  Fog computing is an architecture that is used to distribute resources such as
computing, storage, and memory closer to end-user to improve applications and
service deployment. The idea behind fog computing is to improve cloud computing
and IoT infrastructures by reducing compute power, network bandwidth, and
latency as well as storage requirements. This paper presents an overview of
what fog computing is, related concepts, algorithms that are present to improve
fog computing infrastructure as well as challenges that exist. This paper shows
that there is a great advantage of using fog computing to support cloud and IoT
systems.
