NServiceBus, l’”ESB” léger pour tous ! Steve Degosserie – 6 Mai 2010 Tout ce que vous avez toujours voulu savoir sur les communications fiables dans un système distribué
NServiceBus, l’ “ESB” léger pour tous ! DotNetHub – Steve Degosserie 6 mai 2010 NServiceBus, l’ “ESB” léger pour tous !
DotNetHub Prochaines sessions : 16 juin : Mini XP Days Wallonie 2010 24 juin : Microsoft Community Day 2010 Introduction to NServiceBus (English)
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Steve Degosserie Fondateur de DotNetHub Freelance Software Architect – Yoot Expertise : Framework & API Design, ORM, IOC, AOP Focus actuel: Domain-Driven Design (DDD) Distributed System Design (SOA / EDA) Functional & Concurrent Programming (F#) Domain-Specific Languages (DSL) Blog : http://yoot.be Twitter : @stiiifff ORM : Nhibernate Framework & API Design : Design Patterns, Inversion of Control contains (Caste Windsor), SOLID, AOP
Agenda Présentation de NServiceBus Concepts & Briques de base Types d’hébergements Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Intro – Historique & Roadmap Udi Dahan – The Software Simplist Blog : http://www.udidahan.com Twitter : @udidahan Créateur de NServiceBus, expert mondial en SOA Version 2.0 : Mars 2010 Host générique Facile à configurer Extensible Futur : Version 2.1 Support d’autres technos de queuing que MSMQ Amélioration du Timeout Manager
Intro – NServiceBus, c’est quoi ? Un Bus de services d'entreprise (“Enterprise Service Bus”) Open Source Gratuit Léger Fiable Sécurisé Haute-performance … permettant de développer des systèmes distribués. “Messaging” => Communication basée sur des messages, asynchrones NServiceBus is a communication framework
Intro – ESB ?! Et un “Enterprise Service Bus”, késako ? Type d’architecture ? Un produit ? Ensemble de technologies ? Une couche d’abstraction permettant l’implémentation d’architectures de type SOA. Les définitions d’”ESBB” varie, et le terme est malheureusement surchargé. Les vendeurs essaient bien évidemment chacun de vendre leur dernier produit en y associant les derniers termes à la mode. C’est en effet dans l’implémentation de systèmes distribués basé sur une architecture de type SOA qu’un ESB trouve son utilité principale. On peut utiliser un ESB comme simple abstraction de la couche de communication mais ce n’est pas le but premier.
Intro – Hello DotNetHub - WCF Communication synchrone nombreux problèmes potentiels: Serveur down erreur / message perdu On réessaie plus tard ! Timeouts Couplage Temps de réponse Fiabilité Configuration Mise en évidence des problèmes liés aux communications de type synchrone Formes de couplage: Afférent (Français ?) Efferent (Français ?) Temporel Spatial Plate-forme WCF a été designé d’abord par rapport à des protocoles de type RPC (TCP / Remoting, HTTP / Web Services, …). Le support de MSMQ n’a été rajouté que plus tard (dixit Udi Dahan), et le design n’est donc pas pensé pour du One-Way Messaging … Même s’il y a un semblant de One-Way Messaging dans WCF, il y a pas mal de problèmes liés à celui-ci. Le support des extensions WS-* part le binding WsHttp2007 WCF (Reliable Messaging, Transactions) ne rend pas la communication plus “fiable”, au contraire !!!
Intro – Hello DotNetHub - NSB Communication asynchrone uni-directionnelle (“One-way Messaging”) Messages persistents (par ex. MSMQ) Opérations transactionnelles sur les messages stockés Erreur message reste dans la queue Faible couplage Communication “fiable” -> Rend le système plus résistant dans son ensemble
Agenda Présentation de NServiceBus Concepts & Briques de base Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Concepts – Bus Infrastructure transportant les messages. IBus Sécurisable “Bus logique” “Fluent” Config Le bus est en fait une abstraction il est réparti sur N machines physiques. De plus, au niveau implémentation, le Bus est séparé de la partie Transport (MSMQ, Azure). La configuration se fait grâce à une API “Fluent” (aisée). Types de sérialization supportés: - XML Binaire Le design distribué par nature de NServiceBus est propice au “Scale-out” on rajoute des serveurs sur lesquels on déploie l’application pour pouvoir servir plus de clients. Expose différents modèles de Messaging: - One-way - Request / Response - Publish / Subscribe
Concepts – Messages Unité de base pour tout type d’information qui transite sur le Bus. Typage fort “Marker interface” IMessage Implémentation Classe Interface Typage les messages sont typés ! Ils transportent une sémantique … il ne s’agit pas d’information quelconque ! Contraster l’implémentation class vs interface Versioning No logic in messages Il existe des extension methods pour facilement travailler avec des interface-based messages.
Concepts – Message Handlers Composant qui traite des messages d’un ou plusieurs types. IMessageHandler<T> IHandleMessages<T> “Injectables” Zero config Transactionnel Transactionnel -> Dépend du type de messages / de la technologie de transport utilisée Pas besoind de créer explicitement un TransactionScope !
Concepts – Transport Abstraction de la technologie de transfert de messages (ITransport). MSMQ par défaut Windows Azure en développement Autres à venir
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Hosting – Self-Hosting Diverses possibilités d’hébergement: Console Service Windows Application WinForms / WPF Application Web ASP.NET Config 100% manuelle
Hosting – Generic Host NServiceBus.Host.exe : Processus hôte générique Console ou Service Windows Configurations types: Client / Server Publisher Auto install: MSMQ / MSDTC / Performance Counters Perf. Counters -> not automatic, only on request, must pass a flag to the host
Hosting – Profiles Support des Profils de configuration Lite Integration Production Custom Profil de config : réglages pour le logging, la sécurité, la persistence, … pour un environement d’exécution de l’application Lite : In Memory saga persister Integration : SQLite saga persister Production : Database saga persister (Nhibernate)
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Messaging – 11 idées reçues 11 idées reçues sur les systèmes distribués Le réseau est fiable Les temps de latence restent constants La bande passante est suffisante Le réseau est sécurisé La topologie du réseau est figée L’Administrateur saura quoi faire
Messaging – 11 idées reçues 11 idées reçues sur les systèmes distribués Le coût des communications réseau reste négligeable Le réseau est homogène Le système est atomique / monolithique Le système est fini / figé La logique métier peut et doit être centralisée
Messaging – Msg à sens unique Message à sens unique: “One way” / “Fire & Forget” Client envoie un msg, et continue à travailler Messages identifiables par un Id Asynchrone a.k.a. “One way” / “Fire & Forget”
Messaging – Msg à sens unique L’utilisation de messages à sens unique évitent les problèmes de couplage Technologique : XML Temporel : Messages asynchrones Afférent / Efferent : Contrats Spatial : Configuration Spatial : Configuration Mapping Type de Message / Destinataire logique
Messaging – Addresse de retour Chaque message contient l’adresse de son émetteur. Permet au destinataire de: Répondre Ne pas devoir au préalable connaître l’adresse de l’émetteur du message reçu A l’émetteur de spécifier une adresse de retour alternative (“Reply-to”)
Messaging – Pub / Sub Producteur / Consommateur
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Messaging fiable
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Processus longs Appelés “Sagas”
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Intégrations
Agenda Présentation de NServiceBus Concepts & Briques de base Processus hôte Modèles de messaging Messaging fiable Processus longs Intégrations Outils
Outils
NServiceBus “One more thing …”
EDA = SOA 2.0 NServiceBus est l’outil idéal pour l’apprentissage et la mise en pratique d’une architecture de type événementielle sur la plate-forme .Net Event-Driven Architecture (EDA) = SOA 2.0 Evénéments au lieu d’opérations Chorégraphie au lieu d’orchestration Couplage faible / Systèmes distribués
NServiceBus Questions ?
DotNetHub Merci et à bientôt !