  The emergence of cloud computing over the past five years is potentially one
of the breakthrough advances in the history of computing. It delivers hardware
and software resources as virtualization-enabled services and in which
administrators are free from the burden of worrying about the low level
implementation or system administration details. Although cloud computing
offers considerable opportunities for the users (e.g. application developers,
governments, new startups, administrators, consultants, scientists, business
analyst, etc.) such as no up-front investment, lowering operating cost, and
infinite scalability, it has many unique research challenges that need to be
carefully addressed in the future. In this paper, we present a survey on key
cloud computing concepts, resource abstractions, and programming operations for
orchestrating resources and associated research challenges, wherever
applicable.
