Sustainable Software Engineering - Reduce Carbon Footprint
Published: 2020-12-31 18:02:49

This blog is part of Green Tech – Blogging Competition, an initiative by Microsoft Student Ambassadors - https://studentambassadors.microsoft.com/ which is aimed for student communities to Learn, Lead and Empower.

Usually applications are designed focusing on fast performance and low latency. Based on the choices we go for in terms of infrastructure, software, networking  and maintenance of respective operations have an impact on our environment triggering increased Carbon emission. 

**Sustainable Software Engineering** considers the factors of climate science along with Software Design & Architecture, hardware, electricity, and Data Center design as well. Some of the principles of Sustainable Software Engineering that are explained in the link https://docs.microsoft.com/en-us/learn/modules/sustainable-software-engineering-overview/2-overview can be adopted while building the  system more Carbon efficient way.

This blog focuses on Migrating the On-prem servers to (Microsoft Azure) Cloud presenting the opportunity to reduce consumption of energy and related Carbon emissions. Research has demonstrated Microsoft Cloud which has **Serverless** architecture is more energy efficient than other enterprise datacenters.

Cloud servers are used when they are needed and delimit the usage after the completion of execution which helps sustainability as servers, storage, and network bandwidth are used to their maximum utilization levels.

Understanding how much power is being consumed will help to know how much power the server / application consumes. **Microsoft Sustainability Calculator** is also being made available for Azure enterprise customers that provides new insight into carbon emissions data associated with the associated Azure services. The calculator gives a granular view of the estimated emissions savings from running workloads on Azure compared to that of a typical on-premises deployment.

With **Microsoft’s Azure Kubernetes Service (AKS)** offering, the process of developing a serverless application and deploying it with a Continuous Integrated / Delivery experience along with security is simplified. AKS reduces the complexity and operational overhead of managing Kubernetes. As a hosted Kubernetes service, Azure handles health monitoring and maintenance. As Kubernetes masters are managed by Azure, only agent nodes are to be maintained. Overview and key components of AKS are found here - https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes

**Azure Monitor** provides details on the cluster's  memory and CPU usage which helps to reduce the carbon footprint of the cluster.

Reducing the amount of idle time for compute resources can lower the carbon footprint. Reducing idle time involves increasing the utilization of compute resources – nodes in the cluster. Similarly Sizing the nodes as per workload needs can help run few nodes at higher utilization. Some of the other considerations are configurations to control Cluster scales, usage of spot pools helps to utilize idle capacity within Azure.

Another aspect is to reduce network travel, consider creating clusters in regions closer to the source of the network traffic. **Azure Traffic Manager** can also be used to help with routing traffic to the closest cluster.

**Spot tools** can be configured  to change the time or region for a service to run based on the shaping of the demand.

So Let’s build energy efficient applications and move away from On-Prem wherever feasible to reach the goal to become **Carbon Negative!**