Table of Contents
Microsoft Azure fournit une solide gamme de services pour la mise en œuvre d'EDA, avec Azure Event Hub servant de couche d'ingestion d'événements à haut débit et Azure Functions fournissant un calcul sans serveur pour réagir à ces événements en temps quasi réel. Cet article présente un guide complet pour la construction d'une architecture d'événements utilisant ces deux services, couvrant les principes de conception, la mise en œuvre étape par étape, les meilleures pratiques opérationnelles et les cas d'utilisation du monde réel. Que vous ingérez la télémétrie à partir de millions d'appareils IoT ou le traitement des données de flux de clic à partir d'applications Web, cette architecture peut s'étendre pour répondre à vos demandes tout en maintenant la complexité opérationnelle faible.
Comprendre l'architecture d'événements
L'architecture d'événements est basée sur la production, la détection, la consommation et la réaction aux événements. L'événement est un changement important de l'état – par exemple, une lecture de capteur, une transaction de paiement ou une mise à jour de profil utilisateur.
Concepts clés
- Producteur de l'événement:[ Tout composant qui émet des événements dans le bus de l'événement. Exemples comprennent les appareils IoT, les microservices ou les systèmes existants émettant des événements de capture de données de changement (CDC).
- Event Bus / Stream:[ Un pipeline durable et évolutive qui ingère et persiste les événements. Azure Event Hub s'adapte parfaitement à ce rôle, offrant des flux d'événements cloisonnés et ordonnés.
- Event Consumer: Un composant qui s'inscrit aux événements et les traite. Azure Functions peut agir en tant que consommateur, déclenché automatiquement lorsque de nouveaux événements arrivent.
- Event Sourcing and CQRS:[ De nombreuses implémentations combinent EDA avec l'approvisionnement d'événements (persistant le journal d'événements comme source de vérité) et la séparation de la responsabilité de la requête de commande (CQRS) pour séparer les modèles de lecture et d'écriture.
Le découplage introduit par EDA permet aux équipes de développer, déployer et mettre à l'échelle des services de manière indépendante. Il facilite également l'analyse en temps réel, les pistes d'audit et la possibilité de rejouer des événements historiques pour le débogage ou le retraitement.
Hub de l'événement Azure : le calque d'ingestion
Azure Event Hub est une plateforme de streaming de données en temps réel entièrement gérée qui peut ingérer des millions d'événements par seconde. Son architecture est conçue pour un débit élevé, faible latence et la durabilité. Event Hub capture les événements dans des partitions, chacune étant une séquence ordonnée d'événements.
Principales caractéristiques du Hub de l'événement
- Partitionnement:[ Les événements sont répartis entre les partitions pour le traitement parallèle. Chaque partition est indépendante et peut être consommée par une instance séparée de la fonction Azure.
- Capture: persiste automatiquement les flux d'événements vers Azure Blob Storage ou Azure Data Lake Storage pour l'analyse des archives et des lots.
- Geo-disaster Recovery:[ L'appariement facultatif des espaces de noms dans les régions assure une grande disponibilité.
- AMQP, HTTPS et Kafka Protocol: Prend en charge plusieurs protocoles, permettant aux producteurs utilisant les clients Apache Kafka d'envoyer des événements directement.
- Unités de débit (TU) ou unités de traitement (PU) :[ Déterminer la capacité d'entrée et d'évacuation. Pour le niveau sans serveur (Basic et Standard), les UU sont utilisées; pour les unités de débit Premium et dédiées, les PU fournissent des performances plus prévisibles.
Étapes de configuration
- Créer un espace de noms de Hubs d'Event: Dans le portail Azure, créez un nouvel espace de noms de Hubs d'Event. Choisissez le niveau de prix (Standard est recommandé pour la plupart des charges de production).
- Créer une instance de Hub d'Evénement: Dans l'espace de noms, créer un hub d'événement. Spécifiez le nombre de partitions – une règle courante de pouce est de 4-32 partitions pour la plupart des cas d'utilisation. Les partitions ne peuvent pas être modifiées plus tard sans recréer le hub, donc choisissez en fonction du débit attendu.
- Configurer les politiques d'accès partagé:[ Créer une politique pour les producteurs (p. ex., «Envoyer seulement») et pour les consommateurs (p. ex., «Écouter seulement») afin de respecter le principe du moins de privilèges.
- Enable Capture (facultatif):[ Si vous devez stocker tous les événements bruts pour la rétention à long terme, activez Capture et pointez vers un conteneur de stockage de blocs d'azur ou Data Lake Storage.
Pour un exemple pratique, consultez le .
Fonctions Azure : le déclencheur de calcul
Azure Functions fournit un environnement de calcul sans serveur où vous écrivez un code qui répond aux événements. Le déclencheur Event Hub permet d'invoquer automatiquement une fonction lorsque de nouveaux événements sont publiés dans un hub d'événements. Les fonctions peuvent s'élargir automatiquement, chaque instance de fonction traitant des événements à partir d'une ou de plusieurs partitions.
Comportement déclencheur du Hub Événement
- Le point de contrôle: La fonction d'exécution gère le point de contrôle pour garder une trace du dernier événement traité avec succès par partition. Cela garantit que si la fonction redémarre, elle reprend à partir de la position correcte.
- Traitement par lots : Par défaut, le déclencheur délivre un lot d'événements. Vous pouvez contrôler la taille des lots et le nombre de pré-découpages pour le réglage des performances.
- Parallélisme: Le nombre d'instances de fonction est égal au nombre de partitions avec des événements non traités. Pour augmenter le parallélisme, augmenter le nombre de partitions (dans les limites). Pour le débit le plus élevé, utilisez le plan d'hébergement Premium ou dédié au lieu du plan de consommation, surtout si la fonction est plus de quelques secondes.
Création d'une fonction Azure avec le déclencheur de Hub Event
- Créez une application de fonction dans le portail Azure ou via Azure CLI. Choisissez la pile d'exécution (par exemple .NET, Node.js, Python).
- Ajouter une liaison de déclenchement de Hub d'événement. La signature de la fonction comprendra un paramètre pour les données d'événement (p. ex. ou .
- Définir la chaîne de connexion Event Hub (à partir des paramètres d'application) et le nom du hub d'événement.
- Fonctions communes : désérialiser JSON, mettre à jour une base de données, appeler une API ou envoyer l'événement à un autre service comme SignalR pour les tableaux de bord en temps réel.
- Configurer les liaisons de sortie au besoin – par exemple, une liaison de sortie Cosmos DB pour stocker les données traitées.
La documentation de déclenchement des fonctions d'Azure fournit des échantillons de code détaillés pour chaque langue.
Conception de l'architecture de bout en bout
Maintenant nous combinons les pièces. Le flux typique est : Producteurs → Event Hub[ → Fonctions d'Azur[ → Downstream Services[.Let=s passe par un exemple de qualité de production : un système de gestion de flotte recevant des pings GPS de milliers de véhicules.
Étape 1: Définir le schéma d'événement
La cohérence est cruciale. Utilisez un registre de schéma (comme Azure Schema Registry dans Event Hubs) ou tout simplement faire appliquer un schéma JSON.
{
"vehicleId": "VH-12345",
"latitude": 37.7749,
"longitude": -122.4194,
"speed": 65.2,
"timestamp": "2025-03-21T10:30:00Z"
}
L'utilisation d'Avro ou de Protobuf peut réduire la taille de la charge utile et fournir des capacités d'évolution de schéma, mais JSON reste le plus simple à déboguer.
Étape 2: Configurer les producteurs
Les producteurs peuvent être des appareils IoT utilisant Azure IoT Hub ou des applications personnalisées utilisant le SDK Event Hubs. Pour les scénarios à volume élevé, les événements par lots ensemble (par exemple, envoyer 100 événements par demande) pour maximiser le débit.
Étape 3: Définir la clé de partition
Si vous avez besoin d'un traitement commandé par véhicule, utilisez comme clé de partition. Cela garantit que tous les événements du même véhicule atterrissent dans la même partition et sont traités successivement par un seul consommateur.
Étape 4: Construire la fonction Azure
La fonction reçoit des lots d'événements, traite chacun dans l'ordre, puis peut écrire le dernier emplacement vers un cache (par exemple Azure Redis Cache) pour des requêtes en temps réel. Elle peut également gérer des événements géofence – lorsqu'un véhicule entre dans une certaine zone, la fonction peut envoyer une alerte via Azure Logic Apps ou Twilio.
Étape 5 : Manipulation des défaillances et des retraits
Si le traitement échoue pour un lot, le déclencheur Event Hub réessayera selon la fonction , la politique de réessayer (par défaut est exponentielle jusqu'à 5 fois). Pour les événements de poison (par exemple, JSON mal formé), logez-les dans une file d'attente de lettres mortes (Azure Storage Queue ou un Event Hub dédié). La fonction devrait attraper des exceptions spécifiques et déplacer les événements problématiques hors du pipeline de traitement normal.
Étape 6: Surveiller et évaluer l'échelle
- Utilisez Azure Monitor pour suivre les paramètres du Hub Event : messages entrants, demandes throttlées, taille de l'arriéré (différence entre la dernière commande offset enquued et la dernière commande).
- Pour les fonctions d'échelle Azure, le plan de consommation va automatiquement s'étendre, mais peut avoir des retards de démarrage froid. Le plan Premium offre une instance préchauffante et l'intégration de réseau virtuel.
- Configurer des alertes pour un arriéré élevé, ce qui indique que la fonction ne peut pas suivre – envisager d'augmenter les partitions ou de mettre à jour le plan d'hébergement.
Les modèles avancés et les meilleures pratiques
Rejouer et rattraper l'événement
Un avantage important de Event Hub est que les événements sont conservés pendant une période configurable (jusqu'à 90 jours sur Standard). Cela permet aux consommateurs de rejouer les événements à partir d'un moment précis – utile pour le remblayage d'une nouvelle base de données ou retraitement après la correction d'un bug.
Groupes de consommateurs multiples
Event Hub soutient jusqu'à 20 groupes de consommateurs par hub d'événements. Utilisez des groupes de consommateurs distincts pour différents pipelines de traitement : un pour l'analyse en temps réel, un autre pour l'archivage, et un troisième pour la formation de modèles d'apprentissage automatique.
Traitement des Idépotents
Comme les événements peuvent être livrés au moins une fois, la fonction doit être idémpotente. Par exemple, lors de l'insertion dans une base de données, utilisez des opérations de mise à jour au lieu d'insérer. Ou vérifiez si un ID d'événement existe déjà dans un magasin de déduplication (par exemple, Redis avec TTL).
Intégration avec les liaisons de sortie de fonction Azure
Au lieu d'écrire un code manuel pour envoyer des données ailleurs, utilisez des liaisons de sortie. Le tableau suivant résume les liaisons communes pour les scénarios axés sur les événements :
- Cosmos DB:[ Rehausse automatiquement les documents de la sortie de la fonction.
- SignalR Service: Diffusion d'événements traités à des clients connectés (p. ex., tableau de bord en temps réel).
- Stockage de blob:[ Rédigez périodiquement les sorties de lots (évitez d'écrire par événement pour réduire les coûts).
- Event Hubs (Output): Envoyer des événements à un autre Event Hub pour la chaîne.
Considérations en matière de sécurité
- Utilisez l'Identity Managed pour la fonction Azure pour vous connecter au Hub Event au lieu de stocker les chaînes de connexion dans le texte clair.
- Activer l'intégration par pare-feu et réseau virtuel pour l'espace de noms Event Hub afin de restreindre l'accès au réseau.
- Utilisez Azure Key Vault pour stocker des secrets tels que les chaînes de connexion Event Hub et les clés d'accès.
- Chiffrer les événements au repos et en transit (Event Hub utilise TLS par défaut).
Cas d'utilisation et scénarios du monde réel
Traitement de la télémétrie IoT
Comme décrit plus haut, le scénario de gestion de flotte est un ajustement classique. Azure IoT Hub peut ingérer les messages de périphérique et les diriger vers Event Hub pour le traitement en aval. Azure Functions peut ensuite calculer la vitesse moyenne par route, détecter des anomalies ou déclencher des alertes de maintenance.
Analyse de Clickstream
Les sites Web de commerce électronique génèrent des données massives sur le flux de clic. Event Hub peut agréger les vues de page, les actions de panier d'achat et les recherches. Les fonctions peuvent enrichir les événements avec les données de profil d'utilisateur, mettre à jour les compteurs de session et pousser vers Azure Data Explorer pour les tableaux de bord en temps quasi réel.
Changement de saisie des données (CDC)
Lorsque vous devez synchroniser des données d'une base de données relationnelle à un index de recherche ou un cache, CDC utilisant Event Hub est une approche commune. Par exemple, utiliser Debezium (Kafka Connect) pour streamer les changements de base de données dans Event Hub, puis une fonction Azure transforme et écrit à Elasticsearch. Ce modèle maintient l'index de recherche toujours à jour sans logique de sondage personnalisée.
Traitement des transactions financières
En finance, l'architecture basée sur les événements permet la détection de fraude, le marquage en temps réel des risques et le règlement des transactions. Event Hub , latence faible et le débit élevé le rendent adapté pour traiter des milliers de métiers par seconde. Azure Fonctions peut exécuter des modèles de détection de fraude, signaler les transactions suspectes, et envoyer des alertes tout en maintenant des pistes d'audit.
Optimisation et surveillance des coûts
Bien que sans serveur réduit les coûts de ralenti, vous devez toujours surveiller l'utilisation.
- Unités de débit de hub d'événement:[ Chaque TU permet 1 MB/s en cours et 2 MB/s en cours d'exécution (ou 1000 événements par seconde).
- Montant des données ingérées: Facturée par million d'événements (niveau standard). Utilisez le lotage pour réduire le nombre d'événements.
- Temps d'exécution de la fonction Azure:[ Le plan de consommation charge par seconde d'exécution. Assurez-vous que votre fonction est efficace – évitez de bloquer les appels et d'utiliser les E/S asynchrones.
- Stockage utilisé pour la capture et les points de contrôle: Les coûts de stockage des blocs sont minimes, mais tiennent compte des politiques de conservation.
Définir les alertes budgétaires dans Azure Cost Management. Utilisez Application Insights pour suivre les temps d'exécution des fonctions et les appels de dépendance. La page Azure Event-drived architecture pattern contient des conseils sur la surveillance.
Comparaison avec les technologies de remplacement
- Mieux pour les charges de travail sous commande nécessitant une commande stricte, un traitement transactionnel et une lettre morte. Event Hub est optimisé pour la diffusion d'événements à haut débit, et non pour la messagerie point à point.
- Apache Kafka sur HDInsight ou Confluent: Plus de contrôle sur les configurations mais nécessite des frais généraux opérationnels. Event Hub fournit la compatibilité du protocole Kafka avec un service géré.
- Event Grid:[ Convient pour la programmation réactive et le routage des événements entre les services Azure. Il n'est pas conçu pour le streaming en grand volume – Event Hub gère des millions d'événements par seconde.
- Azure Stream Analytics: Un moteur de traitement SQL géré pour l'analyse de séries chronologiques. Il peut fonctionner en plus du Hub Event, mais pour une logique d'affaires complexe, Azure Functions offre plus de flexibilité.
Liste de contrôle opérationnelle
- Définir le temps de rétention pour les événements (par défaut 1 jour, max 7 jours sur Standard).
- Définir les informations d'application pour la fonction Azure pour enregistrer le nombre d'événements traités et les erreurs.
- Activer les alertes Azure Monitor pour le throttling Event Hub (vérifiez la métrique .
- Utilisez la politique Azure pour faire appliquer la version TLS et le type d'authentification.
- Scénarios de défaillance : arrêtez la fonction, laissez les événements s'accumuler, puis redémarrez pour vérifier la récupération de point de contrôle.
- Effectuer des essais de charge avec un producteur simulé pour s'assurer que l'architecture gère le volume de pointe.
Conclusion
La combinaison de la diffusion en continu des événements et du calcul sans serveur permet aux développeurs de se concentrer sur la logique d'affaires tout en gérant la partition, l'échelle et la gestion des points de contrôle. En suivant les principes de conception et les meilleures pratiques décrits ici – en choisissant les nombres de partitions appropriés, en mettant en œuvre le traitement idémpotent et en surveillant la santé opérationnelle – vous pouvez créer un pipeline prêt à la production qui s'adapte aux volumes de données en évolution.