There are four major cloud computing platforms available on the market today which should be known and understood in order to select the best option for which to execute secure custom applications within this arena: Amazon EC2, Windows Azure, Google App Engine and Force.com. Each of these platforms is a more or less successful attempt to commercialize internally-crafted virtualization technology. While Amazon and Microsoft succeeded in building general-purpose cloud environments, Google and SalesForce remain niche players due to rudiments of internally-grown technology and the use of programming languages like Python and APEX.
In the years to come, cloud computing will take a substantial piece of the market from traditional deployment models. This implies growing demand for applications that can operate in a cloud environment, and for software engineers skilled in cloud computing technologies. Since commercial software development is driven by enterprises which prefer mainstream technologies, Amazon EC2 and Windows Azure are likely to be the two platforms of choice for software developers. Considering the fact that both platforms can host applications written in different programming languages, one should denote Java and .NET as primary development platforms for Amazon EC2 and Windows Azure respectively.
The first logical step is to become familiar with cloud-related concepts and to adopt the principles of cloud application development. From a software developer’s perspective, cloud can be treated as a way to get on-demand access to two types of scalable resources: compute (CPU) and storage which are available via services provided by the cloud platform.
The second step is to learn how Windows Azure hosting environment works in detail. There is a good presentation at Channel9 describing platform infrastructure and application lifecycle. As result of this step, a developer should recognize and adopt the following ideas:
Cloud application runs in a bare Windows 2008 operating system.
Don’t assume that Windows Azure hosting environment has any preinstalled software – it’s a bare operating system. Any functionality, usually supported by preinstalled software, should be instead implemented within the application hosted on Windows Azure.
The application instance can be recycled by the platform at any point of time.
Everything stored on a local disk drive memory will be deleted once the instance is recycled. To preserve the data and make it available to other instances, use Windows Azure Storage services.
Cloud application runs in a concurrent environment.
Services provided by Windows Azure platform are designed to operate in concurrent environments with the use of “try and correct” pattern. The application should follow this pattern and properly handle cases in which access to a service is declined by repeating the operation later. Another aspect to keep in mind in that a Web application under Windows Azure always runs behind a load balancer.
The Cloud in the Application Development Space
Cloud provides a way to get on-demand access to computing and storage resources. Cloud platforms hide the complexity of building and managing infrastructure required to store large amounts of data and run numerous application instances from a software developer thus allowing the developer to focus on the functionality of the application. For years, companies like Amazon, Microsoft and Google have been engaged in building the technologies that make up today’s clouds. Now, with clouds available to the public, a wide community of software engineers can leverage these advanced technologies to build reliable high-performance systems in less time and at a lower cost. Combined with dramatically reduced up-front investments in hardware required for high-performance systems, cloud technologies create a lot of market opportunities for small companies and ventures.
How Cloud Computing Impacts Security and Security Strategies
Security is a series of measures implemented by the application itself and the environment hosting the application. The traditional on-premise environment is responsible for a significant piece of security measures such us authentication, authorization, logging, traffic filtering, encryption, malware protection and so on. When moving to cloud, the environment doesn’t support many of these measures anymore, so they should be implemented by the application itself (if possible). That means that software engineers developing cloud applications should pay more attention to security. The things to keep in mind are multi-tenancy, storing access keys, data encryption, logging, limited means of traffic filtering and data backup.