patterns icon indicating copy to clipboard operation
patterns copied to clipboard

Create new patterns from the Azure Well-Architected Framework Sustainability Pillar

Open dubrie opened this issue 3 years ago • 2 comments

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

dubrie avatar Oct 12 '22 18:10 dubrie

I believe @yelghali was going to ingest at least some of these patterns

dubrie avatar Oct 30 '22 22:10 dubrie

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?
  • 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
  • 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.
  • 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
  • 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

markus-gsf-seidl avatar Jan 17 '23 09:01 markus-gsf-seidl