  Cloud computing has grown to become a popular distributed computing service
offered by commercial providers. More recently, Edge and Fog computing
resources have emerged on the wide-area network as part of Internet of Things
(IoT) deployments. These three resource abstraction layers are complementary,
and provide distinctive benefits. Scheduling applications on clouds has been an
active area of research, with workflow and dataflow models serving as a
flexible abstraction to specify applications for execution. However, the
application programming and scheduling models for edge and fog are still
maturing, and can benefit from learnings on cloud resources. At the same time,
there is also value in using these resources cohesively for application
execution. In this article, we present a taxonomy of concepts essential for
specifying and solving the problem of scheduling applications on edge, for and
cloud computing resources. We first characterize the resource capabilities and
limitations of these infrastructure, and design a taxonomy of application
models, Quality of Service (QoS) constraints and goals, and scheduling
techniques, based on a literature review. We also tabulate key research
prototypes and papers using this taxonomy. This survey benefits developers and
researchers on these distributed resources in designing and categorizing their
applications, selecting the relevant computing abstraction(s), and developing
or selecting the appropriate scheduling algorithm. It also highlights gaps in
literature where open problems remain.
