Suite au rachat de la société par un grand acteur du e-commerce, nous avons eu l’opportunité de développer un nouveau produit “from scratch”. Nous
en avons profité pour effectuer une migration souhaitée de longue date vers des runtime Linux, sous dotnet Core, et des conteneurs docker, dans un
orchestrateur Kubernetes.
Ce projet nous a permis de concentrer toute l'expérience acquise dans les années précédentes et de déployer plus de 50 microservices dont le
développement à été simplifié grâce à une specification des contrats et des modèles par OpenApi et de la génération de code permettant une
mutualisation 'souple' des dépendances. L'introspection des communications de ces services (directe, http, queues, streams…) est supporté par une
trace distribuée OpenTracing.
Api First - SwaggerHub / Open API, ProtoActor, Jaeger, OpenTracing, App.Metrics, CosmosDb, RabbitMq, EventStore,
SwaggerHub, Nuke.build, Helm, Azure DevOps, BDD / DDD, Actor Model - ProtoActor
Le but de ce projet était une refonte de la première brique du système BeezUP : le processus qui permet de récupérer les catalogues des marchands, lire
leurs produits, enrichir des colonnes calculées et enregistrer le tout. Le but était de pouvoir exécuter ce processus au moins une fois par heure et par
marchand, quelque soit le nombre de marchands. Dans la version précédente, le processus étant limité par la persistance (Sql Server) et le nombre de
machines pouvant se répartir le travail, il était difficile à la société d'acquerir de nouveaux clients, spécialement de gros clients. Nous devions distribuer
le tout.
Ce projet a été l'occasion de nombreux errements. Son architecture fut retravaillée maintes fois pour arriver à la solution aujourd'hui en production.
Fraichement acquis au CQRS/EventSourcing, nous avons testé, plusieurs persistences, plusieurs orchestrations, plusieurs frameworks. Puis nous avons
renoncé à l'Event Sourcing sur certains des aggrégats métiers les plus consommateurs (les produits et leurs valeurs) et dont la persistance du journal
des évènements était parfaitement dispensable. Forts de ces expériences, après un autre renoncement plus fonctionnel, il a été possible de faire passer
tous les imports clients sur cette nouvelle architecture.
L'architecture en place, au moment où j'écris ces lignes, hybride Azure Service Fabric pour sa partie DDD/Aggrégat, tandis que les traitements et
projections tournent dans un cluster Kubernetes.
Azure Service Fabric, Azure Event Hubs, Kubernetes, EventStore, BlobStorage
Open Source
Depuis peu, par goût personnel et avec le consentement de ma hiérarchie, il m’arrive de contribuer à des projets libres afin de servir les intérêts de
BeezUP à moindres frais. Le code ainsi contribué est alors utilisé au delà des projets BeezUP. Il sera éprouvé et peut-être amélioré par la communauté :
********-dotnet - Ultra fast distributed actors
********-contrib/csharp-decorators - OpenTracing tracer extensibility
******** - Micro, yet turbocharged, C# pubsub library.
Il y’a aussi dans la société une volonté de transparence de notre solution vis à vis de nos utilisateurs. Nous ne sommes pas encore prêts à l’ouverture du
code source de notre framework, mais c’est une réflexion en cours.
BeezUP est, de loin, l’expérience qui m’a demandé le plus de ressources et m’a fait évoluer de la “simple” architecture logiciel à la conception de
solutions distribuées, hautement disponibles et élastiques. Je décris ci-dessous les principales étapes de cette prise d’envergure.
Ma première mission à l'arrivée chez BeezUP fut de retravailler le module de gestion des commandes Amazon (import des commandes et modifications des statuts depuis le site BeezUP) pour en faire une version performante et poser les bases d'une architecture permettant d'intégrer plus rapidement les prochaines marketplaces. Après la première implémentation finalisée et mise en production, le projet a été repris par d’autres développeurs de l’équipe pour ajouter de nouvelles marketplaces avec succès. L'architecture mise en place a permis à des développeurs débutants d’intégrer la gestion de commandes pour une nouvelle marketplace en deux semaines.
Service container, Strategy pattern, TableStorage, QueueStorage, BlobStorage, Async/Await
BeezUP Framework - One to rule them all.
Segmentation des responsabilités d'un framework monolithique en quelques 30 packages Nuget et veille assidue autour des technologie intégrées.
Abstraction de certaines technologies (Queuing, Caching) afin de proposer des APIs communes et des comportements standards.
Centralisation des bonnes pratiques, accompagnement des développeurs, Proof of concepts, centralisation des mises à jour.
VS 2017, Framework 4.6.2, Dotnet Core 2.0, Microsoft Azure (Cloud Services, Table/Blob/Files/Queue storage, Service
Fabric, EventHubs, AzureSearch, EventHubs), Asp.net MVC WebApi, Entity Framework, Rabbitmq, Rollbar, EventStore, Kafka,
Cassandra, Reactive Extensions, DynamicExpresso, RosLyn, Redis, CQRS, DDD, BDD, Event Sourcing, ProtoActor, Docker,
Kubernetes, OpenTracing, Polly
Extranet Client
Lead technique de l’équipe de développement et programmation de l’extranet (front office) de vente de différents produits Edenred (Tickets
restaurants, Tickets Kadéos …)
VS 2012, Framework 4.5, Asp.net MVC, Entity Framework code first, N-Tiers, Castle Windsor, Sql Server
Développeur freelance - InfoFlash - Septembre 2012
Kourses - Licensing Akademy
Production de la partie serveur, base de données et service d’un site e-learning de préparation aux certifications.
VS 2010, Framework 4, Asp.net WebForms, Entity Framework 5 code first, N-Tiers, Unity, Sql Server
Site internet de la société (immobilier)
Architecture, accompagnement et encadrement d’un stagiaire chargé de réalisé le site internet vitrine d’une société de promotion immobilière.
VS 2010, Framework 3.5, Asp.net MVC, jQuery, NHibernate, N-Tiers, Unity, Sql Server
Ausmane - Cellule d'appui aux développements
DIP : Développements itératifs de proximité
Production d'un Template applicatif destiné à accélérer le développement des nouvelles applications DIP.
VS 2010, Framework 3.5, Winform, MVC, Template Applicatif (WSIX), génération de code T4
Proposition de solutions techniques résolvant les problèmes des différentes équipes clientes de la cellule d'appui aux développements. NHibernate,
Entity Framework, Log4Net
Présentation, explication, formation, assistance, pair programming à la demande permettant de soutenir les développeurs dans l'adoption des
solutions proposées.
Dossiers de fond : adoptions de WPF et pattern MVVM, Injection de dépendance Castle Windsor, Tests Unitaires MbUnit, Moq, Intégration Continue
Cruise Control.net, programmation orientée aspect, Domain Driven Design, Model Driven Design.
NGAI - Documents Subscriptions
Production d'un outil de mailing automatique de documents intégrant un paramétrage complexe des documents à envoyer. Accès au listing de
souscription par web services Saleforce. Base de données embarquée par soucis de performance. Mise à jour retour du CRM Salesforce.
VS 2010, Framework 4.0, SQLite, NHibernate, SalesForce, Unit Test Famework
Production Silverlight / MVVM
Intégration de l'ancienne application dans la nouvelle par chargement dynamique avec refonte minimaliste de l'existant.
Assistance technique de l'équipe déjà en place sur XAML/Silverlight ou sur des notions plus générales d'architecture logicielle et de bonnes pratiques de
développement.
VS 2010, Framework 4.0, Silverlight 4, MVVM Light, WCF, Entity Framework
Avatar - Outil de formation pour les opérateurs en usine.
Production de deux outils, constructeur et lecteur de scénarios permettant aux équipes de capitaliser sur l’expérience de situations exceptionnelles.
Projet court en démarche agile SCRUM sur 10 sprints d'une semaine.
Développement atypique, accès sur l'ergonomie et la performance des outils.
Architecture et tests unitaires montés par évolution successives conformément à la philosophie des méthodes agiles.
WS2008, .net Framework 3.5, WPF, MVVM, PostSharp, NUnit