Recently, the concept of cloud computing has witnessed dramatic worldwide growth in the field of information technology (IT). Cloud computing has gained its popularity as a new computing paradigm from an ability to facilitate the provision and use of IT infrastructure, platforms, and applications of any kind in the form of services that are electronically available over the internet. As a result, cloud computing is heading rapidly towards mainstream usage and adoption for many customers, developers, enterprises, governmental institutions, and researchers. In this survey, we give an overview of cloud computing and their application domains, including the challenges that should be addressed in order to push the cloud technology further. Then, we present a systematic and comprehensive taxonomy of the cloud computing technology. Moreover, we review the most popular and successful open source cloud computing technologies and projects. Finally, we identify several open research issues that need to be investigated in the future. This paper intends to help new researchers entering the domain of cloud computing by providing a comprehensive survey on recent developments.