In the effort to realize greater benefits from their cloud hosting environment, the developer may next recognize that cloud providers offer a set of services that they can leverage instead of creating and maintaining these common services themselves.
Often, these cloud-provided services will be better prepared to handle the Internet scale load that application might encounter.
Whether these services are exposed to the developer through native application programming interfaces (APIs) (such as Java) or through remote access APIs (such as representational state transfer (REST)), the combination of these will form the basis for a platform as a service (PaaS) environment.
In this blog post I will explore some of these services.
Outside of a cloud environment, routing is typically managed by a physical appliance configured to accept or deny incoming traffic and map it to other resources. Very often these appliances are firewalls, proxy servers and so on. Due to their critical role in fulfilling network transactions, few people have access to these systems and programmatic access is limited if exposed at all.
Cloud service providers expose the notion of an elastic IP address that can be dynamically mapped to cloud resources. Additionally, virtual appliances are possible in a cloud, enabling existing networking concepts to map to cloud topologies. Supporting programmatic network addressing separately from the virtual instances allows programmers to manage fail-over and maintenance tasks transparently to users.
Cloud service providers often expose firewall rule management to users managing common, host or guest configurations. Other networking providers enable programmatic access to virtual network appliances bridging existing network concepts to cloud automation and virtualization.
For the developer, the opportunity to programmatically access managed services, such as networking, enables a level of historically privileged features. Applications can reconfigure themselves to address impending security, load-balancing and fail-over scenarios. Site addressing can be updated by an operator or by an application, supporting both the traditional and cloud developer. The developer’s role increases to consider the now ever flexible network services.
Applications often require data storage and management. Compute clouds may expose both persistent and transient storage, and may expose services for mounting storage from outside the cloud entirely (also known as cloud storage).
File or object level storage enables application developers to get, put and delete data reliably. Outside of the compute resources, common services move the storage of such data remotely, managed and scaled by a third party.
Another storage service to consider as part of an end-to-end application is the content delivery network (CDN), where content is strategically placed to minimize the latency between data and users. This is primarily a performance enhancing service, but is increasingly used to manage application components of geographically distributed solutions.
Distributed hash table (DHT) systems are often presumed synonymous with cloud computing, yet have existed in several forms for quite some time (such as object caches, object grid and distributed hash map). In their simplest forms, DHTs provide mechanisms to hold name and value data that is separated from specific applications. Some run in memory, like a caching system, while others have complex persistence and distribution systems
Storage represents an obvious place where an application developer can enhance an existing solution by reviewing their data management requirements and mapping them to the appropriate persistent or ephemeral storage services.
For the developer, the challenge with everything being virtual in a cloud is building solutions or building on sub-systems where the potential for failure is a common event and not an edge case.
With some thought, clouds can reliably run traditional relational database management system (RDBMS) as well as NoSQL database software as a virtual or physical machine. Some cloud service providers also offer databases as a service (DbaaS), where some or all the usual management is performed on the user’s behalf.
At a high level, RDBMS databases are designed for vertical scalability whereas NoSQL databases are inherently designed for horizontal scalability. This is achieved by one or more of the following attributes:
- Data replication. Instead of data replication being managed by a redundant array of independent disk (RAID) configuration or a centralized storage area network (SAN), each node in the NoSQL is master of its own data. Data may be replicated two, three or even more times over in order to obtain resiliency on low cost resources. In the event that one replication node is not available, other replica nodes can be used for read/write.
- Database sharding. Contents of a database can be segmented up into “shards” (or partitions) and distributed across multiple physical servers. This can have performance benefits when large amounts of data are reduced to smaller chunks for reading and writing.
- Parallel processing. When data is distributed by replication and/or sharding, this opens the possibilities of more efficient processing for operations such as data analytics.
For the developer, databases remain critical to most solution development. It is the selection of the right type of database and service offering that becomes the most critical aspect of leveraging data services in clouds. Again, there is a role for the standards organization to identify common database services that can facilitate portability between cloud providers.
In cloud orienting your application I noted the need for reliable loosely-coupled communication in a cloud system.
Asynchronous messaging provides scalable communications between different sub-systems, applications or even the components of a single application. It offers two main capabilities:
- Notification removes the need for one component to poll repeatedly in order to become aware of changes that affect it. It features strongly in the event-related cloud-based integration workloads and in data synchronization. Notification also extends out to mobile and other devices that connect into a cloud platform, where it may be required to push event notifications to thousands or hundreds of thousands of consuming devices.
- Queuing enables reliable, transactional communication allowing multiple systems to run work asynchronously with low risk of data loss. Queues flatten out spikes in load and ensure ordered and processed work. They are also used for synchronization to allow multiple parts of a system to operate independently while coming together at points of coordination. Queues are also used in cloud-based integration when integrating one application which emits notifications with another application which operates by polling for updates.
Some cloud providers offer a messaging service that is itself virtualized; this is often referred to as messaging as a service (MaaS) and can be used both by applications hosted in the cloud, but also by applications running outside the cloud. A MaaS simplifies the use of messaging and in particular the administration of messaging resources, making it easier for application developers to make use of this approach.
In my next blog post in this series on cloud computing’s impact on programming models, I will take a closer look at the application development platform, approaches to development and programming languages.
|Cloud computing’s impact on programming models
Part 1: Hosting on the cloud
Part 4: Delivery models and languages
Part 5: Integrating applications
Part 6: The business unit developer