Cloud Architecture
Architectural Best Practices provide guidance on how to best design aspects of your application that maximize the unique benefits of a Cloud platform.
Architectural Best Practices
GSA IT recommends and strongly encourages consideration of the eight Architectural Best Practices described below to drive consistency across the enterprise.
1. Compute
- Teams should select cloud compute based on their requirements preferring serverless solutions over all others. If serverless is not possible given the requirements of your deployment then containerization should be considered as the next best option. Lastly, virtual machines should be considered for your application focusing your efforts on optimally sizing the machine with preference for horizontal over vertical scaling.
2. Software
- Teams should select cloud-native software as available that is delivered as a Software as a Service (SaaS). If no SaaS can be identified for the use-case prefer products that can be hosted in a containerized environment like Kubernetes. Finally, if none of these can be achieved then weigh the cost/benefit of adopting a more traditionally deployed product versus custom development.
3. Storage
- Teams should select storage based on three primary areas: cost, latency and resiliency.
4. Network Resilience
- Teams should design their application deployment to support a multi-path architecture leveraging the Cloud Service Provider's geographical distribution (e.g. Availability Zones and/or Regions). Applications should leverage Content Distribution Networks, Denial of Service mitigation services and Edge capabilities where possible to minimize load on internal GSA network resources.
5. Message Queuing
- Teams should prefer (where possible) adopting an asynchronous transaction model leveraging cloud-native message queuing capabilities to provide their application with better fault tolerance and scalability.
6. Alerting
- Teams should define an alerting strategy that dispatches role-based contextually relevant alerts to prevent alert fatigue:
- Alerts with appropriate detail
- Alerts dispatched only to necessary stakeholders based on their role
- Alerts that are aware of auto-scaling
- Alerts should require action
- Teams should adopt automated mitigation of common alerts and classification of alerts to minimize the number of alerts that must be reviewed or actioned by a human.
7. Event Bus (pub/sub)
- Teams should leverage existing Cloud Service Provider created events and dispatch application specific events to a common event bus to provide opportunities for future extensibility and integration as the application matures.
8. Reusability
- Teams must adhere to agency strategic goals for reusability when identifying their destination architecture. Agency-level or holistic value should be maximized by leveraging investments previously made by other teams and capabilities available in the existing Cloud Ecosystem.