Les Design Patterns
appliqués au Cloud
MAI 2014
Pascal Laurin
• Développeur et architecte .NET
Azure (Cloud Patterns)
Client-Serveur (IoC/DI)
WPF (MVVM)
SQL (Repository)
CleanCode (SOLID)
Test automation (Design for testability)
GOF
OOP
…..
www.pascallaurin.com
pascal.laurin@outlook.com
@plaurin78
Cloud Design Patterns
Patterns & Practices
Cloud Design Patterns
Patterns & Practices
• Problem areas in the cloud
• Availability, Data Management, Design and Implementation, Management and
Monitoring, Messaging, Performance and Scalability, Resiliency, Security
• Design Patterns
• Cache-Aside, Circuit Breaker, CompensatingTransaction, Competing Consumers,
Compute Resource Consolidation, CQRS, Event Sourcing, External Configuration
Store, Federated Identity, Gatekeeper, Health Endpoint Monitoring, IndexTable,
Leader Election, MaterializedView, Pipes and Filters, Priority Queue, Queue-Based
Load Leveling, Retry, Runtime Reconfiguration, Scheduler Agent Supervisor,
Sharding, Static Content Hosting,Throttling,Valet Key
• Guidance
• Asynchronous Messaging, Autoscaling, Caching, Compute Partitioning, Data
Consistency, Data Partitioning, Data Replication and Synchronization,
Instrumentation andTelemetry, Multiple Datacenter, Service Metering
Pourquoi étudier les Design Patterns
• Communications
• Options et compromis
• Mettre un nom sur les Patterns qui émergent naturellement dans
notre code (répétition des mêmes techniques)
• Avoir une boîte à outils (solutions) bien rempli quand on frappe un
problème
Le Design et les Patterns sont plus
importants que les Design Patterns
• « Le voyage est plus important que la destination »
• Si on ne le comprend pas on ne l’utilise pas!
• Ce que nous allons voir est applicable un peu partout, pas seulement
dans le Cloud
Cache-Aside pattern
• Load data on demand into a cache from a data store
Data StoreCache
Compute
Mise en œuvre
• Lecture
1. Lors d’une demande pour de la donnée on regarde premièrement dans le Cache
1. Si l’information n’est pas en Cache on la charge du Data Store puis on stock
l’information en Cache (read-through caching)
2. L’information en Cache est retournée au demandeur
• Écriture
• Lors d’une sauvegarde
1. L’information est mise à jour dans le Data Store (write-through strategy)
2. L’information du cache est invalidé
• Techno
• Azure Cache Service, In-Role Cache
• Memcached
Avantages
• Peu d’écriture, beaucoup de lecture
• Proximité de l’information
• Réduction de la bande passante (pour Cache local)
Problématiques et considérations
• Cohérence entre les données en le Cache et le Data Store
• Durée de vie des données en Cache
• Expulsion des données en Cache
• Amorçage du Cache
• Différents types de Cache
• Mémoire
• Disque
• Service
• Taille optimal du Cache
Competing Consumers pattern
100/s 100/s 25/s 100/s
25/s
Competing Consumers pattern
100/s 100/s
25/s
100/s
100/s
Competing Consumers pattern
• Enable multiple concurrent consumers to process messages received
on the same messaging channel
Producer Consumer
ConsumersProducers
Mise en œuvre
• Utilisation d’une queue pour les messages
• Communication asynchrone
• Ajout de plus de ressources pour compétitioner pour les messages
• Techno
• Azure Storage Queue
• Azure ServiceBus Queue andTopic
• MSMQ
Avantages
• Découplage des producteurs et consommateurs
• Plus résilient car la queue peut recevoir des messages même si les
consommateurs sont hors-service
Problématiques et considérations
• Communication asynchrone (gestion des valeurs de retour)
• Ordonnancement des messages
• Design des services pour la résilience (idempotent)
• Détection et gestion des messages empoissonnés
• Scaling du système de messagerie (queue)
Queue-Based Load Leveling pattern
100/s
0
50
100
150
Load
50/s
Queue-Based Load Leveling pattern
• Use a queue that acts as a buffer between a task and a service that it
invokes in order to smooth intermittent heavy loads that may
otherwise cause the service to fail or the task to time out
100/s 50/s
0
50
100
150
Load
0
20
40
60
Load
50/s?/s
Mise en œuvre
• Utilisation d’un système de queue pour les messages
• Étudier les limites des systèmes (throughput)
• Observation du niveau de messages dans la queue
Avantages
• Permet d’absorber les spikes temporaire de messages
• Prévenir la surcharge de services externes (Azure SQL Database)
• Améliore la disponibilité et l’efficacité des services
Problématiques et considérations
• On doit étudier la limite des services afin d’éviter de les surcharger
(monitoring)
• Trop de producteurs/consommateurs pour une queue peut affecter sa
disponibilité
• Seulement pour les spikes! Si la charge reste toujours au dessus de la
limite du système nous devons trouver une autre solution (scaling)
Priority Queue pattern
LeadTime
CycleTime
1s
in done
start done
# items in queue Cycle Lead
0 1s 1s
10 1s 11s
10000 1s 2h46m41s
Utilisation d’une queue
Priority Queue pattern
• Prioritize requests sent to services so that requests with a higher
priority are received and processed more quickly than those of a
lower priority
1231 3 23 1
Mise en œuvre
• Mettre les nouveaux messages devant les messages moins
importants dans la queue
• Sinon, utilisation de plusieurs queue (1 par priorité)
• Techno
• Azure Storage Queue avec plusieurs queues
• Azure Servive Bus Subscriptions
Avantages
• Permet d’établir des niveaux de services (SLA)
• Prioriser les clients payants
• Laisser les messages sans deadline être traiter à la fin
• Faire du scaling uniquement où c’est payant
Problématiques et considérations
• Haute priorité veut dire traitement plus rapide
• Est-ce que tous les messages haute priorité doivent être traité avant
les messages basses priorités?
• Besoin d’observer le nombres de messages pour chaque priorité
séparément
• Les différentes priorités devraient être nommées avec de vrai
concepts d’affaires (enterprise vs pro vs free)
• Avoir plusieurs queues multiplie le coût de chercher des messages
Materialized View pattern
• Generate prepopulated views over the data in one or more data
stores when the data is formatted in a way that does not favor the
required query operations
Mise en œuvre
• Génération à l‘avance des vues matérialisées des données
• Les vues sont jetable (pas la source authoritative)
• Si possible indexées pour de meilleurs performances de requêtage
• Spécialement créer pour un petit nombre de requêtes
Avantages
• Optimisées pour la lecture et le requêtage (pas pour l’écriture)
• Données normalisées, semi structurées ou non structurées (DTO pour UI, les
rapports ou l’affichage)
• Peut-être un sous ensemble des données (sans données sensibles)
• Générées à l’avance donc moins de traitements requis (CPU)
• Pas besoin d’être dans le même Data Store que les données originales
(NoSQL)
• En cache si éphémères, peut être reconstruites facilement
• Aussi pour scénarios partiellement connecté
Problématiques et considérations
• Quand et comment mettre à jour les vues? (suite à un événement,
suivant un horaire ou déclanchement manuel)
• Peut utiliser beaucoup trop d’espace de stockage si on a beaucoup de
vues
• Gestion des vues avec données périmées
Questions?
Site Web
bit.ly/CloudDesignPatterns
Patterns & Practices
http://pnp.azurewebsites.net/en-us/
Cloud Architecture Patterns
oreil.ly/1hAB6NM
www.pascallaurin.com
pascal.laurin@outlook.com
@plaurin78

Cloud design patterns

  • 1.
  • 2.
    Pascal Laurin • Développeuret architecte .NET Azure (Cloud Patterns) Client-Serveur (IoC/DI) WPF (MVVM) SQL (Repository) CleanCode (SOLID) Test automation (Design for testability) GOF OOP ….. www.pascallaurin.com pascal.laurin@outlook.com @plaurin78
  • 3.
  • 4.
    Cloud Design Patterns Patterns& Practices • Problem areas in the cloud • Availability, Data Management, Design and Implementation, Management and Monitoring, Messaging, Performance and Scalability, Resiliency, Security • Design Patterns • Cache-Aside, Circuit Breaker, CompensatingTransaction, Competing Consumers, Compute Resource Consolidation, CQRS, Event Sourcing, External Configuration Store, Federated Identity, Gatekeeper, Health Endpoint Monitoring, IndexTable, Leader Election, MaterializedView, Pipes and Filters, Priority Queue, Queue-Based Load Leveling, Retry, Runtime Reconfiguration, Scheduler Agent Supervisor, Sharding, Static Content Hosting,Throttling,Valet Key • Guidance • Asynchronous Messaging, Autoscaling, Caching, Compute Partitioning, Data Consistency, Data Partitioning, Data Replication and Synchronization, Instrumentation andTelemetry, Multiple Datacenter, Service Metering
  • 5.
    Pourquoi étudier lesDesign Patterns • Communications • Options et compromis • Mettre un nom sur les Patterns qui émergent naturellement dans notre code (répétition des mêmes techniques) • Avoir une boîte à outils (solutions) bien rempli quand on frappe un problème
  • 6.
    Le Design etles Patterns sont plus importants que les Design Patterns • « Le voyage est plus important que la destination » • Si on ne le comprend pas on ne l’utilise pas! • Ce que nous allons voir est applicable un peu partout, pas seulement dans le Cloud
  • 7.
    Cache-Aside pattern • Loaddata on demand into a cache from a data store Data StoreCache Compute
  • 8.
    Mise en œuvre •Lecture 1. Lors d’une demande pour de la donnée on regarde premièrement dans le Cache 1. Si l’information n’est pas en Cache on la charge du Data Store puis on stock l’information en Cache (read-through caching) 2. L’information en Cache est retournée au demandeur • Écriture • Lors d’une sauvegarde 1. L’information est mise à jour dans le Data Store (write-through strategy) 2. L’information du cache est invalidé • Techno • Azure Cache Service, In-Role Cache • Memcached
  • 9.
    Avantages • Peu d’écriture,beaucoup de lecture • Proximité de l’information • Réduction de la bande passante (pour Cache local)
  • 10.
    Problématiques et considérations •Cohérence entre les données en le Cache et le Data Store • Durée de vie des données en Cache • Expulsion des données en Cache • Amorçage du Cache • Différents types de Cache • Mémoire • Disque • Service • Taille optimal du Cache
  • 11.
    Competing Consumers pattern 100/s100/s 25/s 100/s 25/s
  • 12.
    Competing Consumers pattern 100/s100/s 25/s 100/s 100/s
  • 13.
    Competing Consumers pattern •Enable multiple concurrent consumers to process messages received on the same messaging channel Producer Consumer ConsumersProducers
  • 14.
    Mise en œuvre •Utilisation d’une queue pour les messages • Communication asynchrone • Ajout de plus de ressources pour compétitioner pour les messages • Techno • Azure Storage Queue • Azure ServiceBus Queue andTopic • MSMQ
  • 15.
    Avantages • Découplage desproducteurs et consommateurs • Plus résilient car la queue peut recevoir des messages même si les consommateurs sont hors-service
  • 16.
    Problématiques et considérations •Communication asynchrone (gestion des valeurs de retour) • Ordonnancement des messages • Design des services pour la résilience (idempotent) • Détection et gestion des messages empoissonnés • Scaling du système de messagerie (queue)
  • 17.
    Queue-Based Load Levelingpattern 100/s 0 50 100 150 Load 50/s
  • 18.
    Queue-Based Load Levelingpattern • Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads that may otherwise cause the service to fail or the task to time out 100/s 50/s 0 50 100 150 Load 0 20 40 60 Load 50/s?/s
  • 19.
    Mise en œuvre •Utilisation d’un système de queue pour les messages • Étudier les limites des systèmes (throughput) • Observation du niveau de messages dans la queue
  • 20.
    Avantages • Permet d’absorberles spikes temporaire de messages • Prévenir la surcharge de services externes (Azure SQL Database) • Améliore la disponibilité et l’efficacité des services
  • 21.
    Problématiques et considérations •On doit étudier la limite des services afin d’éviter de les surcharger (monitoring) • Trop de producteurs/consommateurs pour une queue peut affecter sa disponibilité • Seulement pour les spikes! Si la charge reste toujours au dessus de la limite du système nous devons trouver une autre solution (scaling)
  • 22.
    Priority Queue pattern LeadTime CycleTime 1s indone start done # items in queue Cycle Lead 0 1s 1s 10 1s 11s 10000 1s 2h46m41s Utilisation d’une queue
  • 23.
    Priority Queue pattern •Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those of a lower priority 1231 3 23 1
  • 24.
    Mise en œuvre •Mettre les nouveaux messages devant les messages moins importants dans la queue • Sinon, utilisation de plusieurs queue (1 par priorité) • Techno • Azure Storage Queue avec plusieurs queues • Azure Servive Bus Subscriptions
  • 25.
    Avantages • Permet d’établirdes niveaux de services (SLA) • Prioriser les clients payants • Laisser les messages sans deadline être traiter à la fin • Faire du scaling uniquement où c’est payant
  • 26.
    Problématiques et considérations •Haute priorité veut dire traitement plus rapide • Est-ce que tous les messages haute priorité doivent être traité avant les messages basses priorités? • Besoin d’observer le nombres de messages pour chaque priorité séparément • Les différentes priorités devraient être nommées avec de vrai concepts d’affaires (enterprise vs pro vs free) • Avoir plusieurs queues multiplie le coût de chercher des messages
  • 27.
    Materialized View pattern •Generate prepopulated views over the data in one or more data stores when the data is formatted in a way that does not favor the required query operations
  • 28.
    Mise en œuvre •Génération à l‘avance des vues matérialisées des données • Les vues sont jetable (pas la source authoritative) • Si possible indexées pour de meilleurs performances de requêtage • Spécialement créer pour un petit nombre de requêtes
  • 29.
    Avantages • Optimisées pourla lecture et le requêtage (pas pour l’écriture) • Données normalisées, semi structurées ou non structurées (DTO pour UI, les rapports ou l’affichage) • Peut-être un sous ensemble des données (sans données sensibles) • Générées à l’avance donc moins de traitements requis (CPU) • Pas besoin d’être dans le même Data Store que les données originales (NoSQL) • En cache si éphémères, peut être reconstruites facilement • Aussi pour scénarios partiellement connecté
  • 30.
    Problématiques et considérations •Quand et comment mettre à jour les vues? (suite à un événement, suivant un horaire ou déclanchement manuel) • Peut utiliser beaucoup trop d’espace de stockage si on a beaucoup de vues • Gestion des vues avec données périmées
  • 31.
    Questions? Site Web bit.ly/CloudDesignPatterns Patterns &Practices http://pnp.azurewebsites.net/en-us/ Cloud Architecture Patterns oreil.ly/1hAB6NM www.pascallaurin.com pascal.laurin@outlook.com @plaurin78

Notes de l'éditeur

  • #5 Animation pour les sujets de la présentation aujourd’hui
  • #8 Cache-Aside design pattern: http://msdn.microsoft.com/en-us/library/dn589799.aspx Caching guidance: http://msdn.microsoft.com/en-us/library/dn589802.aspx Memcached: http://www.memcached.org/
  • #10 Cache-Aside design pattern: http://msdn.microsoft.com/en-us/library/dn589799.aspx - Caching guidance: http://msdn.microsoft.com/en-us/library/dn589802.aspx
  • #11 Cache-Aside design pattern: http://msdn.microsoft.com/en-us/library/dn589799.aspx - Caching guidance: http://msdn.microsoft.com/en-us/library/dn589802.aspx
  • #15 Competing Consumers pattern: http://msdn.microsoft.com/en-us/library/dn568101.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #16 Competing Consumers pattern: http://msdn.microsoft.com/en-us/library/dn568101.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #17 Competing Consumers pattern: http://msdn.microsoft.com/en-us/library/dn568101.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #18 Queue-Based Load Leveling pattern: http://msdn.microsoft.com/en-us/library/dn589783.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #19 Queue-Based Load Leveling pattern: http://msdn.microsoft.com/en-us/library/dn589783.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #20 Queue-Based Load Leveling pattern: http://msdn.microsoft.com/en-us/library/dn589783.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #21 Queue-Based Load Leveling pattern: http://msdn.microsoft.com/en-us/library/dn589783.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #22 Queue-Based Load Leveling pattern: http://msdn.microsoft.com/en-us/library/dn589783.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx
  • #23 Priority Queue pattern: http://msdn.microsoft.com/en-us/library/dn589794.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx Autoscaling guidance: http://msdn.microsoft.com/en-us/library/dn589774.aspx
  • #24 Priority Queue pattern: http://msdn.microsoft.com/en-us/library/dn589794.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx Autoscaling guidance: http://msdn.microsoft.com/en-us/library/dn589774.aspx
  • #25 Priority Queue pattern: http://msdn.microsoft.com/en-us/library/dn589794.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx Autoscaling guidance: http://msdn.microsoft.com/en-us/library/dn589774.aspx
  • #26 Priority Queue pattern: http://msdn.microsoft.com/en-us/library/dn589794.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx Autoscaling guidance: http://msdn.microsoft.com/en-us/library/dn589774.aspx
  • #27 Priority Queue pattern: http://msdn.microsoft.com/en-us/library/dn589794.aspx Throttling pattern: http://msdn.microsoft.com/en-us/library/dn589798.aspx Compute Partitioning guidance: http://msdn.microsoft.com/en-us/library/dn589773.aspx Asynchronous Messaging primer: http://msdn.microsoft.com/en-us/library/dn589781.aspx Autoscaling guidance: http://msdn.microsoft.com/en-us/library/dn589774.aspx
  • #28 Materialized View pattern: http://msdn.microsoft.com/en-us/library/dn589782.aspx Data Consistency primer: http://msdn.microsoft.com/en-us/library/dn589800.aspx CQRS pattern: http://msdn.microsoft.com/en-us/library/dn568103.aspx Event Sourcing pattern: http://msdn.microsoft.com/en-us/library/dn589792.aspx Index Table pattern: http://msdn.microsoft.com/en-us/library/dn589791.aspx
  • #29 Materialized View pattern: http://msdn.microsoft.com/en-us/library/dn589782.aspx Data Consistency primer: http://msdn.microsoft.com/en-us/library/dn589800.aspx CQRS pattern: http://msdn.microsoft.com/en-us/library/dn568103.aspx Event Sourcing pattern: http://msdn.microsoft.com/en-us/library/dn589792.aspx Index Table pattern: http://msdn.microsoft.com/en-us/library/dn589791.aspx
  • #30 Materialized View pattern: http://msdn.microsoft.com/en-us/library/dn589782.aspx Data Consistency primer: http://msdn.microsoft.com/en-us/library/dn589800.aspx CQRS pattern: http://msdn.microsoft.com/en-us/library/dn568103.aspx Event Sourcing pattern: http://msdn.microsoft.com/en-us/library/dn589792.aspx Index Table pattern: http://msdn.microsoft.com/en-us/library/dn589791.aspx
  • #31 Materialized View pattern: http://msdn.microsoft.com/en-us/library/dn589782.aspx Data Consistency primer: http://msdn.microsoft.com/en-us/library/dn589800.aspx CQRS pattern: http://msdn.microsoft.com/en-us/library/dn568103.aspx Event Sourcing pattern: http://msdn.microsoft.com/en-us/library/dn589792.aspx Index Table pattern: http://msdn.microsoft.com/en-us/library/dn589791.aspx