- Wave est une entreprise valorisée à 1,7 Md$ (2,3 billions de wons) avec 70 ingénieurs (elle fournit des services bancaires mobiles pour l’Afrique)
- Son architecture est celle d’une application CRUD standard : un monolithe Python basé sur Postgres
- En partant d’une architecture simple et en résolvant les problèmes tout en minimisant la complexité, les ingénieurs ont pu se concentrer sur la création de valeur pour les utilisateurs
- Stack Overflow a lui aussi connu une forte croissance avec succès en faisant évoluer un monolithe, jusqu’à être acquis pour 1,8 milliard de dollars
Malgré l’efficacité d’une architecture simple, la plupart des médias préfèrent les architectures complexes
- Dans les conférences techniques, on voit beaucoup de présentations sur des architectures complexes basées sur des microservices, mais aucune sur de simples monolithes
- De nombreuses entreprises imitent des technologies complexes alors même que leurs applications sont de petite taille, et en tirent de la popularité dans les conférences et sur HN
- L’architecture que nous utilisons est tellement simple qu’il n’est même pas nécessaire d’en faire un diagramme
Comment conserver la simplicité
- Wave utilise Python synchrone, ce qui signifie que les processus serveur sont bloqués lorsqu’ils attendent des E/S
- Ils ont essayé des frameworks asynchrones comme Eventlet, mais il y avait trop de bugs, et ils ont jugé que cela ne valait pas le coût en souffrance opérationnelle
- Au lieu d’augmenter la complexité, les tâches à long temps d’exécution sont isolées dans des files d’attente
- Pour respecter les règles de résidence des données, il faut exploiter des datacenters on-premise dans certains pays
- Le Sénégal et la Côte d’Ivoire étaient sur le cloud, mais l’Ouganda et d’autres pays exigeaient de l’on-premise à cause de la réglementation
- Dans ce cas, une architecture simple est bien plus facile à gérer qu’une architecture complexe
Construire plutôt qu’acheter
- Avec une petite équipe, l’entreprise préférait au départ acheter des logiciels, mais lorsqu’il était impossible de corriger des bugs critiques, elle développait ses propres outils
- Construire des outils maison ajoute une complexité qu’ils préféreraient éviter, mais dans certaines catégories de produits, même après des recherches approfondies, ils n’ont trouvé aucun fournisseur capable de proposer une solution adaptée
- Même en dehors des compétences cœur de métier, il est parfois nécessaire de développer ses propres outils et de maintenir une expertise en interne
Choix remis en question
- Ils reconsidèrent certains choix techniques comme RabbitMQ, Celery, SQLAlchemy et Python, car ils accroissent la complexité ou la charge de maintenance
- S’ils devaient repartir sur une nouvelle base de code, ils examineraient ces choix avec prudence
Choix dont ils sont satisfaits
- Ils sont satisfaits de choix comme GraphQL, un protocole de transport personnalisé et Kubernetes
- GraphQL apporte des avantages comme l’auto-documentation, la génération de code et l’explorateur interactif GraphiQL
- Ils estiment qu’avec GraphQL, les avantages l’emportent sur les inconvénients
- Avantages
- Auto-documentation sur les types de retour exacts
- Des clients plus sûrs grâce à la génération de code à partir des types de retour exacts
- Gain de productivité avec l’explorateur interactif GraphiQL
- Diverses applications (application utilisateur, application de support, application des agents Wave, etc.) peuvent en grande partie partager une seule API, ce qui réduit la complexité
- Avec un langage de requête composable, les clients peuvent récupérer exactement les données nécessaires en un seul aller-retour de paquets, sans avoir à construire de nombreux endpoints spécialisés
- Suppression des débats inutiles sur ce qui doit être considéré comme une API RESTful
- Inconvénients
- Les bibliothèques GraphQL n’étaient pas excellentes au moment de l’adoption de GraphQL
- L’encodage GQL par défaut est redondant, et comme beaucoup de clients utilisent une faible bande passante, une grande attention est portée aux limites de taille
- Kubernetes est utilisé pour répondre aux exigences d’exploitation de datacenters par pays
Conclusion
- En gardant l’architecture applicative aussi simple que possible, il est possible de consacrer le budget de complexité (et de personnel) aux domaines où cette complexité aide réellement l’entreprise
- En privilégiant l’idée de faire les choses aussi simplement que possible tant qu’il n’existe pas de raison forte d’ajouter de la complexité, ils ont pu bâtir une activité d’une taille significative avec peu d’ingénieurs, alors même qu’ils opèrent dans la finance en Afrique, souvent considérée comme un secteur difficile
9 commentaires
« Buy before build » devrait plutôt être « build before buy ».
Ah, j’essayais de mettre l’accent, mais le titre est devenu bizarre. Je l’ai corrigé. Merci.
Est-ce que les modes changent selon le cycle économique ? Indépendamment des tendances, commencer par un monolithe est plus avantageux pour réduire les coûts fixes et pour la maintenance.
Une architecture facile à comprendre est aussi plus facile à maintenir.
À mon avis, pour n’importe quel service, il vaut mieux commencer par un monolithe. Partir sur une MSA dès le début, c’est gaspiller de l’argent.
« Quand la complexité augmente, les coûts (argent, ressources humaines, temps...) augmentent aussi. »
« N’essaie pas de résoudre avec une architecture complexe un problème qui peut l’être avec une architecture simple. »
Avis sur Hacker News
Conseils d’ingénierie sur les microservices
Conférences sur les microservices
Biais cognitifs et simplicité
Sur-ingénierie et manque d’expérience
Des entreprises qui valorisent l’équilibre entre vie professionnelle et vie privée
Expérience personnelle avec Dan Luu
L’importance d’une architecture simple
Architecture et structure sociale des équipes d’ingénierie
Préférence pour une architecture simple
Pourriez-vous partager le lien vers la conférence qui traite des conseils de David Schmitz sur les échecs des microservices ?
Il s’agit de https://www.youtube.com/watch?v=r8mtXJh3hzM