  With the rapid growth of the Internet of Things (IoT) and a wide range of
mobile devices, the conventional cloud computing paradigm faces significant
challenges (high latency, bandwidth cost, etc.). Motivated by those constraints
and concerns for the future of the IoT, modern architectures are gearing toward
distributing the cloud computational resources to remote locations where most
end-devices are located. Edge and fog computing are considered as the key
enablers for applications where centralized cloud-based solutions are not
suitable. In this paper, we review the high-level definition of edge, fog,
cloud computing, and their configurations in various IoT scenarios. We further
discuss their interactions and collaborations in many applications such as
cloud offloading, smart cities, health care, and smart agriculture. Though
there are still challenges in the development of such distributed systems,
early research to tackle those limitations have also surfaced.
