Create new patterns from the Azure Well-Architected Framework Sustainability Pillar
Describe the pattern you'd like to propose Azure just released their well architected framework for sustainability with a lot of good options for green software patterns. The guidance all connects back to the green software foundation and the green software principles so there is already a lot of good alignment.
Describe specific emission impact from this pattern Various, depending on the specific guidance.
References to this pattern https://aka.ms/waf/sustainability/docs
Additional context Will need to pull the detail from the Azure WAF page into pattern definitions
I believe @yelghali was going to ingest at least some of these patterns
I took the liberty to extract the headings (~~ patterns) from Azures page.
May still need some time to see if we have them already in the catalog (help needed!) I do like their split, maybe this would be a good sub-split for the cloud part @aoifefitton ( Application design, platform, testing, ...)
Guide:
- No checkmark and/or bold text -> Candidate for new pattern
- Checkmark -> pattern already exists, links are provided
- Application design
- [ ] Evaluate moving monoliths to a microservice architecture
- From 10km away similar to adapt serverless, could use a pattern
- [ ] Improve API efficiency
- Interesting Idea --> Pattern
- [X] Ensure backward software compatibility to ensure it works on legacy hardware
- Covered by #139
- [X] Leverage cloud native design patterns
- Too general; also how does this reduce SCI?
- [X] Consider using circuit breaker patterns
- Pattern needed --> Created #218
- [X] Optimize code for efficient resource usage
- Too general; not includable
- [x] Optimize for async access patterns
- Too general; for Web there is already a pattern. Additionally it's not always true
- Could be a pattern: Consider using async call patterns between applications (ex Queues, etc.)
- #209
- [ ] Evaluate server-side vs. client-side rendering
- Pattern needed for Web
- [ ] Be aware of UX design for sustainability
- Pattern needed for Web
- [ ] Update legacy code
- Maybe pattern worthy?
- [ ] Evaluate moving monoliths to a microservice architecture
- Application platform
- [X] Review platform and service updates regularly
- Covered in #154
- [X] Deploy to low-carbon regions
- Covered in #128
- [ ] Process when the carbon intensity is low
- https://patterns.greensoftware.foundation/catalog/cloud/time-shift-kubernetes-cron-jobs
- BUT: Could be done more generally; not k8s specific
- [X] Choose data centers close to the customer
- https://patterns.greensoftware.foundation/catalog/cloud/choose-region-closest-to-users
- [ ] Run batch workloads during low-carbon intensity periods
- Similar to "Process when the carbon intensity is low"
- [X] Containerize workloads where applicable
- Unclear how this reduces SCI, but it's easier to run multiple apps on the same machine; other methods do exist however
- [X] Evaluate moving to PaaS and serverless workloads
- PaaS = marketing hype
- serverless is covered in #129
- [X] Use SPOT VMs where possible
- Cost improvement, do not see any SCI improvement here. Otherwise it would be covered with serverless and time-shift patterns
- [x] Turn off workloads outside of business hours
- https://patterns.greensoftware.foundation/catalog/cloud/scale-down-kubernetes-workloads
- Could use a more general pattern, instead of the k8s specific one above
- Generalized with #220
- [ ] Utilize auto-scaling and bursting capabilities
- https://patterns.greensoftware.foundation/catalog/cloud/scale-kubernetes-workloads-based-on-events
- Could use a more general pattern, instead of the k8s specific one above
- [ ] Match the scalability needs
- A few hints in assumptions, like https://patterns.greensoftware.foundation/catalog/cloud/match-utilization-requirements-of-vm but no pattern yet. Could use a pattern
- [ ] Evaluate Ampere Altra Arm-based processors for Virtual Machines
- Could use a pattern, I do think ARM offers better performance/watt in general (although Intel already knows that and tries to improve)
- [X] Delete zombie workloads
- Covered in #141
- [X] Review platform and service updates regularly
- Testing - CI/CD
- [ ] Run integration, performance, load, or any other intense testing during low-carbon periods
- Could use pattern: Implement Carbon Aware SDK (!)
- [X] Automate CI/CD to scale worker agents as needed
- We already have a few patterns about right sizing and scaling workloads in different environments, like https://patterns.greensoftware.foundation/catalog/cloud/match-utilization-requirements-of-vm/ , https://patterns.greensoftware.foundation/catalog/cloud/minimizing-deployed-environments
- [ ] Consider caching when using CI/CD agents
- Interesting idea, we currently have no Build category.
- [ ] Split large code repositories
- Interesting idea, we currently have no Build category.
- [ ] Assess where parallelization is possible
- Azure has put this in the wrong category, this means parallelization inside the application. For Web we have something like this; otherwise it's not applicable for our Categories (there is no software development category)
- [X] Assess with chaos engineering
- I don't see how this can reduce the SCI
- [ ] Establish CPU and Memory thresholds in testing
- Interesting idea, we currently have no Testing/Software category.
- [ ] Run integration, performance, load, or any other intense testing during low-carbon periods
- Operational Procedures
- [ ] The Emissions Impact Dashboard
- Could be rephrased as: "Monitor the Carbon Emission reports of your cloud provider" Pattern needed
- [ ] Define emissions target
- [ ] Identify the metrics and set improvement goals
- [ ] Cost optimization as a proxy
- [ ] Defining policies
- [ ] Create a sustainability community
- [ ] Plan for learning
- [ ] Share best practices across teams
- [ ] Plan for incentives
- [ ] The Emissions Impact Dashboard
- Networking and connectivity
- [ ] Make use of a CDN
- [ ] Follow caching best practices
- [ ] Select Azure regions based on where the customer resides
- [ ] Use managed audio and video streaming services with built-in compression
- [ ] Enable network file compression
- [ ] Maximize network utilization within the same cloud and region
- Storage
- [ ] Enable storage compression
- [ ] Optimize database query performance
- [ ] Use the best suited storage access tier
- [ ] Only store what is relevant
- [ ] Determine the most suitable access tier for blob data
- [ ] Reduce the number of recovery points for VM backups
- [ ] Revise backup and retention policies
- [ ] Optimize the collection of logs
- Security
- [ ] Use cloud native log collection methods where applicable
- [ ] Avoid transferring large unfiltered data sets from one cloud service provider to another
- [ ] Filter or exclude log sources before transmission or ingestion into a SIEM
- [ ] Archive log data to long-term storage
- [ ] Use cloud native network security controls to eliminate unnecessary network traffic
- [ ] Minimize routing from endpoints to the destination
- [ ] Use network security tools with auto-scaling capabilities
- [ ] Evaluate whether to use TLS termination
- [X] Use DDoS protection
- Pattern needed --> #222
- [ ] Integrate Microsoft Defender for Endpoint
- [ ] Tag security resources