Architecting for High Availability in the Cloud with Cellular Architecture
10 Jun 2024 (6 months ago)
Cellular Architecture in the Cloud
- Cellular architecture involves breaking down an application into isolated deployments called cells, which can be regional or zonal.
- Automating cellular infrastructure requires solving key problems such as isolation, provisioning new cells, deploying changes, managing permissions, and monitoring.
- Standardization is crucial for managing multiple deployments of application code, but it should not lead to homogenization.
- Different microservices may have different technology stack requirements, and it's acceptable to have multiple flavors of tech stacks within an application.
Automating Cellular Architecture
- To deploy changes to microservices in a cellular architecture, a common process involves committing code changes, building binary artifacts, releasing them, and deploying to individual cells.
- A staging cell is used for pre-production deployment, and a "bake" step is added to monitor metrics and ensure deployment health before proceeding to production cells.
- Standardized build targets for microservices ensure a consistent deployment process across different services.
- A cell registry is used to maintain a list of cells and their metadata, which is published to a central location and accessed through a library.
- A cell bootstrap script is used to provision and configure new cells, including setting up networking, installing dependencies, and deploying the application code.
Managing Multiple Cells
- Isolation is achieved by creating separate AWS accounts for each cell, which provides built-in isolation and cost visibility.
- Routing is managed through unique DNS names for each cell, ensuring traffic is directed to the appropriate cell.
- Spinning up new cells is made easy with the cell bootstrap script, which leverages standardized build targets and account registry data.
Infrastructure as Code (IaC)
- IaC has seen a breakthrough with the introduction of programming languages to define infrastructure, such as AWS CDK, CDK8s, and CDK TF.
- These tools enable the creation of reusable libraries of infrastructure code, making it easier to manage and deploy complex systems.
- AWS Code Pipeline can be used to automate the deployment of infrastructure changes, with the help of a "pipeline of pipelines" repository that generates deployment pipelines for different components.
Benefits of Cellular Architecture
- Cellular architecture can greatly benefit customers in terms of availability and meeting SLAs.
- It also enhances business agility and engineering velocity.