One can think of the history of IT as a pendulum that swings between the extremely centralized and the extremely distributed. Early mainframes were an example of centralized computing. The PCs and workstations of the 70s and 80s were a strong contrast, with computation occurring at the outermost nodes of the architecture. The ever improving connectivity and bandwidth driven by Internet technologies is bringing us back to greater centralization. Both centralization and distribution have important merits for enterprise IT. Centralization of control enables consistency, economies of scale, and efficient rollout of innovations that are applicable across the enterprise. Distribution of control enables agility for departments, allowing flexibility to respond quickly to needs and imperatives specific to their roles within the organization. Optimizing the balance between centralization and distribution is an ongoing challenge for IT architecture, organization of the people who support that architecture, and organization of the people who use that architecture. Client-server computing was the first big step toward more centralization from the world of distributed PCs and workstations. As the ubiquity and quality of Internet-based networking made client-server more viable and widespread, much of computing shifted to the server in a more centralized model.
The Seven Keys to Cloud application development Architecture
1-Everything is a Service – Compute, network, and storage are now software services, along with cloud applications.Increasingly, vendor capabilities are being delivered in Software as a Service (SaaS) modes, rather than as on-premise solutions.
2-Use RESTful APIs – When everything is a service, APIs become the building blocks and leverage points of your cloud application. Deconstructing our application into separate web service APIs enables easy re-use and publishing of your application’s capabilities for integration into other cloud apps.
3-Separate Compute and Persistence – Designing for complete separation of compute and persistence provides deployment and scaling flexibility. If we make sure our cloud applications use web services for ALL data storage (including things we normally might not consider, such as log files and debugging streams), we enable the infrastructure around them to be managed and invested in separately, shield the application from underlying changes in storage technology, and decrease deployment overhead.
4-Design for Failure – We always do our best to avoid failures; however, at the same time, we must expect them to happen. Components will fail, services will become unavailable, latencies will increase, but your business must continue to run and your customers must still be served.
5- Architect for Resilience – Over the years, many products have been delivered with Cloud computing architecture that focus on Mean Time between Failures (MTBF). MTBF focused architectures tend to focus on trying to reduce the frequency of errors (preferably to zero).
6- Operationalize Everything – The entire set of services should be supportable, properly instrumented, easy to maintain, easy to troubleshoot and require the least number of people to operate.
7-Security at Every Layer – In the cloud, and more specifically in public clouds, the perimeter security approach, which is typically used by enterprises, is not sufficient. In a public cloud, it is not clear where your data resides, who has access to it, or how it travels; therefore, a more comprehensive approach is needed.
Cloud application development architecture