Selon la Green Software Foundation, « un logiciel vert est un logiciel responsable de l’émission de moins de gaz à effet de serre. Notre objectif est la réduction, pas la neutralisation.
Je m’appelle Hacene KASDI, je suis ingénieur logiciel Fullstack et passionné de Microsoft Azure. Actuellement consultant chez @LeLion_Vert pour le compte de La Société Générale, intervenant sur des sujets cloud et software craftsmanship.
Chez @LeLion_Vert, nous prenons toujours soin du code en réduisant la dette technique, en appliquant les meilleures pratiques de l’artisanat logiciel et en développant des applications sensibles au carbone.
Au cours de cet article, nous allons parcourir quelques principes verts et contribuer au cours d’un parcours de développeur de logiciels, même par quelques petites actions.
Dans ce premier chapitre, nous appliquerons quelques bonnes pratiques pour réduire et optimiser l’utilisation des ressources, voici un exemple que nous pouvons appliquer lors de la conception du logiciel ou lors de la réunion d’enregistrement des décisions d’architecture.
(Vert) Ingénieur logiciel Rant
Parfois, en tant qu’ingénieurs logiciels, nous prenons des décisions sans penser aux conséquences, nous concevons et choisissons nos outils de développement sans une réflexion approfondie compte tenu de la durabilité de la solution.
L’une des principales philosophies de l’ingénierie logicielle verte est que chacun a un rôle à jouer dans la solution climatique, de sorte que nos décisions ont un impact significatif sur la pollution carbone de nos applications.
Contexte technique : Notre application sera utilisée dans le monde entier, elle sera déployée sur un emplacement situé dans l’est des États-Unis et les demandes des utilisateurs du monde entier doivent être acheminées vers ce point et obtenir la réponse du serveur.
Considérons quelques solutions avant d’endosser des principes durables :
Partie 1 : Utilisation de la machine virtuelle Azure
Nous devons déployer une application sur un fournisseur de cloud Azure, la solution que je vais choisir ici est une Azure Virtual Machine (Infrastructure as a Service – IaaS)
Un IaaS fournit toute l’infrastructure pour prendre en charge les applications Web, y compris le stockage, les serveurs Web et d’applications et les ressources réseau. Nous pouvons déployer rapidement des applications Web sur IaaS et faire évoluer facilement l’infrastructure lorsque la demande pour les applications est imprévisible.
Partie 2 : Utilisation d’Azure PaaS
Mais nous pouvons améliorer notre solution en réduisant la taille de cette machine virtuelle pour augmenter l’utilisation. Si nous voulons aller plus loin, les solutions PaaS sont dimensionnées de manière plus appropriée pour leur charge de travail et peuvent exécuter ces charges de travail à une utilisation élevée sur leurs ressources de calcul sous-jacentes.
Je choisirai Azure App Services pour déployer les images Docker hébergées sur l’ACR (Azure Container Registry), comme meilleure pratique, nous utiliserons l’approche Infrastructure As Code pour scripter, développer, modifier et versionner l’infrastructure de manière sûre et efficace.
Nous allons provisionner nos services Cloud en utilisant Terraform, nous obtiendrons une infrastructure immuable, un paradigme dans lequel les serveurs ne sont jamais modifiés après leur déploiement.
Vous trouverez ci-dessous la première phase de mise en service d’un service d’application Azure, qui sélectionne une image Docker hébergée sur Azure Container Registry. (Solution complète hébergée sur GitHub)
Nous allons spécifier l’emplacement et le référentiel de l’image docker à partir d’Azure Container Registry. Au préalable, l’authentification auprès de l’ACR doit être effectuée avant de provisionner la ressource App Service.
resource "azurerm_resource_group" "rg_green_front_fr_001" {
name = "rg-green-front-${local.environment_tag}-fr-001"
location = local.location
}
## -----------------------------------------------------------------------------##
# App service plan configuration to deploy/run docker images pushed to the
# ACR (Azure Container Registry)
## -----------------------------------------------------------------------------##
resource "azurerm_app_service_plan" "greenAppServicePlan" {
name = "appservice-plan-green-front-${local.environment_tag}-fr-001"
location = azurerm_resource_group.rg_green_front_fr_001.location
resource_group_name = azurerm_resource_group.rg_green_front_fr_001.name
kind = "Linux"
reserved = true
sku {
tier = "Standard"
size = "S1"
}
tags = {
environment = local.environment_tag
application = local.application_tag
}
}
resource "azurerm_app_service" "greenAppService" {
name = "green-front-${local.environment_tag}-fr-001"
location = azurerm_resource_group.rg_green_front_fr_001.location
resource_group_name = azurerm_resource_group.rg_green_front_fr_001.name
app_service_plan_id = azurerm_app_service_plan.greenAppServicePlan.id
app_settings = {
WEBSITES_ENABLE_APP_SERVICE_STORAGE = false
# Settings for private Container Registries
DOCKER_REGISTRY_SERVER_URL = "https://${local.container_registry_login_server}"
DOCKER_REGISTRY_SERVER_USERNAME = local.container_registry_name
DOCKER_REGISTRY_SERVER_PASSWORD = var.container_registry_admin_pwd
}
# Setup connection with azure container registry for image pulling
site_config {
app_command_line = ""
linux_fx_version = "DOCKER|${local.container_registry_name}.azurecr.io/${local.acr_repo_app_name}:latest"
always_on = "true"
}
identity {
type = "SystemAssigned"
}
tags = {
cdn = local.environment_tag
environment = local.environment_tag
application = local.application_tag
}
}
Optimiser le trafic réseau
L’objectif de cet article est de trouver une alternative afin de réduire la latence et la distance des requêtes d’actifs statiques circulant sur le réseau.
Azure CDN est une solution permettant de fournir rapidement du contenu à large bande passante aux utilisateurs en mettant leur contenu en cache sur des nœuds physiques stratégiquement placés à travers le monde. Ces serveurs de périphérie sont proches des utilisateurs finaux afin d’accélérer la livraison des actifs dynamiques et de minimiser la latence.
Avec l’optimisation d’accélération de site dynamique (DSA) Azure CDN, les performances des pages Web avec un contenu dynamique sont considérablement améliorées.
Pour notre exemple, par défaut, le DSA sélectionné est le Verizon offre correspondant au plan Azure PAYG, qui utilise certaines techniques d’optimisation.
Le réseau Verizon utilise une combinaison de DNS Anycast, de point de présence de prise en charge haute capacité et de vérifications de l’état, pour déterminer les meilleures passerelles pour acheminer au mieux les données du client à l’origine.
L’option à ajouter à la ressource est type-optimisation biens.
Les valeurs possibles incluent :
-
Accélération de site dynamique,
-
GénéralMediaStreaming
-
GénéralWebDelivery
-
GrandFichierTélécharger
-
VideoOnDemandMediaStreaming.
Pour quels types d’optimisation ce point de terminaison CDN doit-il être optimisé ?
Concentrons-nous sur Accélération de site dynamique et ses bienfaits :
Optimisation des itinéraires :
Basé sur le chemin le plus court, cet algorithme choisit le chemin le plus optimal vers l’origine et le contenu est livré rapidement via la route la plus fiable possible.
Optimisations TCP :
En un mot, Transmission Control Protocol est une norme qui définit comment les connexions doivent être établies, fonctionner avec Internet Protocol (IP), et les connexions sont établies et maintenues jusqu’à ce que les applications à chaque extrémité aient fini d’échanger des informations.
Le démarrage lent TCP est un algorithme du protocole TCP qui empêche la congestion du réseau en limitant la quantité de données envoyées sur le réseau. Elle permettait notamment aux machines les moins puissantes de ralentir une connexion TCP si la machine d’en face envoyait ses informations trop rapidement. Faire une analogie avec quelqu’un qui parle très vite avec un interlocuteur ayant une compréhension lente. Il commence par de petites tailles de fenêtre d’encombrement entre l’expéditeur et le destinataire jusqu’à ce que le maximum soit atteint ou qu’une perte de paquets soit détectée.
Les profils Azure CDN collectent des métriques et mesurent la bande passante des connexions entre les serveurs Edge PoP (Point Of Presence) afin d’éliminer le démarrage lent TCP.
[Important] Pour Azure CDN des profils Akamai, vous êtes autorisé à modifier l’optimisation d’un point de terminaison CDN après sa création. Pour les profils Azure CDN de Verizon, vous ne pouvez pas modifier l’optimisation d’un point de terminaison CDN après sa création.
Provisionner un CDN Azure avec le profil Verizon à l’aide de Terraform
resource "azurerm_cdn_profile" "cdnGreenApp" {
name = "cdn-profile-app-green-dev-001"
location = azurerm_resource_group.rg_green_front_fr_001.location
resource_group_name = azurerm_resource_group.rg_green_front_fr_001.name
sku = "Standard_Verizon"
}
resource "azurerm_cdn_endpoint" "cdnGreenAppEndpoint" {
depends_on = [
azurerm_app_service.greenAppService
]
name = "cdn-endpoint-app-green-dev-001"
profile_name = azurerm_cdn_profile.cdnGreenApp.name
location = azurerm_resource_group.rg_green_front_fr_001.location
resource_group_name = azurerm_resource_group.rg_green_front_fr_001.name
optimization_type = "DynamicSiteAcceleration"
origin_host_header = "${azurerm_app_service.greenAppService.name}.azurewebsites.net"
origin {
http_port = "80"
https_port = "443"
name = "greenAppFrontend"
host_name = "${azurerm_app_service.greenAppService.name}.azurewebsites.net"
}
}
Provisionner un CDN Azure à l’aide du portail Azure
Pour configurer un point de terminaison CDN pour l’optimisation DSA à l’aide du portail Azure :
- Sélectionner CDN Azure de Plus de fonctionnalité de mise en réseau
- Enregistrez le nouveau point de terminaison et le profil CDN avec Standard Verizon niveau de tarification
- Une fois créé, le nouveau point de terminaison apparaîtra dans la section Points de terminaison
IMPORTANT
Pour Azure CDN des profils Akamai, vous êtes autorisé à modifier l’optimisation d’un point de terminaison CDN après sa création.
Pour les profils Azure CDN de Verizon, vous ne pouvez pas modifier l’optimisation d’un point de terminaison CDN après sa création.
- Après quelques minutes, accédez au point de terminaison CDN
cdn-endpoint-app-green-dev-001.azureedge.net
Vous voyez la même page que celle que vous avez exécutée précédemment dans une application web Azure. Azure CDN a récupéré les ressources de l’application web d’origine et les sert à partir du point de terminaison CDN.
Pour vous assurer que cette page est mise en cache dans le CDN, actualisez la page. Deux requêtes pour le même actif sont parfois nécessaires pour que le CDN mette en cache le contenu demandé.
-
Pour Azure CDN Standard des profils Microsoft, la propagation se termine généralement en dix minutes.
-
Pour les profils Azure CDN Standard d’Akamai, la propagation se termine généralement en une minute.
-
Pour les profils Azure CDN Standard de Verizon et Azure CDN Premium de Verizon, la propagation se termine généralement en 90 minutes.
De plus, vous pouvez rencontrer des incohérences, lorsque vous déployez une nouvelle version du contenu statique, en raison de la fonction de mise en cache, le contenu persistera pendant quelques jours.
En natif, le CDN actualisera ses ressources à partir de l’application Web d’origine en fonction de la configuration de la durée de vie (TTL). La durée de vie par défaut est de sept jours.
Conclusion
L’objectif de cet article est de développer des applications écoénergétiques en réduisant la quantité de données et la distance à parcourir sur le réseau.
Pour les articles suivants, nous aborderons d’autres techniques et améliorerons notre application logicielle en approuvant d’autres principes durables.
Avant de partir, aimez l’article, levez le pouce et n’hésitez pas à poser n’importe quelle question. Trouvez le code complet sur mon référentiel GitHub d’ingénierie logicielle verte.