Over the past decade significant advances in cloud services have helped businesses build scalable applications with increasing agility and scalability. When modernizing legacy applications or designing new cloud native applications using a serverless architecture, everyone on the team must be aligned with the specific design goals and the challenges it entails.
The first thing to consider is that serverless architectures are a new paradigm to the traditional data center. In the past, any task that involved infrastructure would most likely be delegated to a systems administrator and a developer. The only exception would be cases, such as configuring a virtual machine/server, which would not have any interaction with the infrastructure. With cloud services, the on-premise data center ceases to exist and is replaced by lines of code. These lines of code provide the same functionality as an on-premise data center, but in the form of cloud services, hence Infrastructure as a Service (IaaS).
One of the benefits of running your infrastructure in the cloud is the ability to scale any service on the fly. To accomplish this in a traditional data center, you would have grabbed a vendor catalog, looked for the upgrade that was needed to accomplish the scaling, order the upgrade, wait a couple of days/weeks for the upgrade to arrive, install and configure the upgrade, test the upgrade, and finally the service would be scaled. In cloud services, the only thing you need in order to scale a service is a couple of mouse clicks and in a few minutes (or less) the service is scaled. And, this applies both ways, for scaling in and scaling out.
Operations: On-Premise vs Cloud
An on-premise data center requires dedicated resources to provide maintenance and ensure the availability of the services. Maintenance tasks can include upgrades, monitoring, and inspections. In a cloud environment, most of these tasks are outsourced to the cloud provider and its automated platform. The combination of these automated processes and services is what allows the cloud providers to offer service level agreements with high availability.
However, that is not to say that a cloud environment is free of considerations. The availability put forth by the provider refers to individual resources. The overall solution availability results from the combination of the individual resources. This is important to take into consideration when designing an application with a serverless architecture because it can represent a loss of data, revenue, or quality of service since the availability of individual resources is independent.
Designing for cloud architectures requires that you take new considerations into your design. The important thing to remember is that the traditional data center is mostly represented as code in the cloud. With that in mind, there will be additional efforts to consider when representing the infrastructure as code. To get started, ask the following questions:
- Does infrastructure code need to be part of a CI/CD pipeline?
- What type of scaling should be applied: fixed or automatic?
- What additional code or resource should be tested before moving to production?
- What additional logging efforts should be put in place?
Stay tuned for my next blog post where I will dig a little deeper on identifying these considerations.