Cloud Computing and Programming
For a long time now, ‘cloud computing’ has become the buzzword in the IT domain. Like most other things concerned with technology, there is no common consensus as to what exactly ‘cloud computing’ means. One leading IT consulting firm defines cloud computing as “a style of computing where scalable and elastic capabilities are provided as a service to multiple external customers using Internet technologies.” The U.S. National Institute of Standards and Technology defines it as “cloud computing is a model for enabling convenient, on-demand network access to a shared pool of configurable resources (e.g. networks, servers, storage, applications and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction.”
Whatever the definition, clouds are a large pool of computing and / or storage resources, which can be accessed via standard protocols with an abstract interface.Cloud computing paves the way for companies that are looking to reduce their capital expenses and spend more on operating costs. It allows establishments to intensify hardware utilization and to scale up to substantial capacities as per demand, without having to invest in infrastructure or license software. Cloud computing also provides new opportunities to shape better network facilities in less time and money.
There are four basic cloud deployment models as below.
- Public cloud: this is the most standard method of deployment. In this model, the service provider makes resources such as applications and storage available to the general public over the Internet. Users are charged on utility computing basis
- Private cloud: this is a proprietary computing architecture that provides public services to a restricted number of people on the Internet. Private cloud is meant for organizations that need more control over their data. A private cloud allows the benefits of scalability, metering and agility of public cloud with a better control on security and recurring costs.
- Hybrid cloud: it is a combination of public, private cloud, and sometimes even local infrastructures. Major vendors create an cloud environment wherein some nodes of an application are running on real, physical hardware and others on cloud server instances.
- Community cloud: a new kid on the block, this model is based on public cloud, but with set levels of security, privacy, and even regulatory compliance of a private cloud. It refers to several organizations in a private community sharing the cloud infrastructure. The organizations usually have similar principles and security concerns.
- It maintains a highly virtualized and standardized infrastructure, leading to simplified and a more efficient IT and application management
- In terms of features, fault tolerances and reliability, cloud computing ranks very high
- For complex and data intensive applications where the number of users cannot be predicted, cloud computing provides a robust and scalable option
- The cloud provides enormous data storage
- It is very affordable as there are no licenses to buy
- Security: By far, the most important concern about cloud computing is the security. Hacking an insecure cloud is relatively easy than a server protected by a firewall
- Privacy: As a corollary to security, privacy is another concern should data breach of personal information occurs
- Billing: Since cloud computing works on ‘demand and supply’ principle, it is difficult to predict the expenditure. The provider SLAs are not sufficient to certify the accessibility and scalability
- Reliability and availability: Cloud providers may lack continuous service which results in regular failures
You can categorize cloud services in the way it is offered, as below.
- Software as a Service (SaaS): Commonly called as the Application Service Provider model is one of the most popular cloud models. It can be viewed as a multl-tenant cloud platform that shares common resources and a single instance of both the object code of an application as well as the underlying database. It supports multiple customers simultaneously.
- Platform as a Service (Paas): This model provides developers with a platform including all the systems and environments comprising the end-to-end life cycle of developing, testing, deploying and hosting web applications. In essence, PaaS provides an easier way to develop business applications and various services over the Internet.
- Infrastructure as a Service: IaaS provides the delivery of resources (e.g. processing, storage, networks, etc.) as a service over Internet. Apart from the higher flexibility, a key benefit of IaaS is the usage-based payment scheme that allows to pay as their business grows.
Virtualization: Virtualization is a core cloud characteristic. It refers to a multi-layer hardware platform, operating system, storage device, etc. Virtualization hides the technical complexity from users and allows physical resources to be configured efficiently. It also allows for quick recovery and fault tolerance.
Security: One of the biggest concerns in deploying cloud solutions is the threat of security. Cloud service providers must maintain a balance between data distribution and ease of use while addressing security concerns.
Multi-tenancy: Multi-tenancy allows sharing of resources and costs across multiple users. It is an important technical aspect of cloud computing, as it brings resource many providers like centralization of infrastructure in locations with lower costs, and improvement of utilization and efficiency with high peak-load capacity. Tenancy information is stored in separate databases but is altered concurrently. It should be well maintained for isolated tenants.
Programming environment: the cloud offers various features. Programming environment is essential to really exploit cloud features. The programming environment should be capable of addressing issues like administrative domains, large variations in resource heterogeneity, performance stability, exception handling, etc.
System interface adopts web services’ APIs, which provides a standards-based framework for accessing and integrating with and among cloud services.
Is programming for cloud different than ‘normal’? Not really. All the apps deployed on the cloud run on the same languages like C, C++, Java, etc. What separates cloud programmers from the other programmers is the following:
- Cloud computing distributes the file system that spreads over multiple hard disks and machines. Data is stored on different machines. Programming for the cloud involves addressing this backend. So, a sound algorithm for resource allocation is an important aspect of cloud programming
- Since security is a major concern, programs that address the security is another important aspect of cloud computing
- In general, since cloud computing is dynamic and distributed across resources, most of the programming is concerned with optimizing the resource allocation