Mis à jours 4 octobre 2022 Des kits d’outils de messagerie et de routage à la conception d’API et aux frameworks d’applications, le langage Go contient tout ce dont vous avez besoin pour passer au micro
Lorsqu’une équipe de codeurs Google a exploré la collection de langages informatiques en 2007, elle a découvert des centaines d’excellents outils pour écrire des logiciels, mais aucun n’offrait les fonctionnalités adéquates pour Google. C’est-à-dire un langage prenant en charge la construction de la vision de Google d’une multitude de progiciels fonctionnant ensemble dans la vaste collection de serveurs de Google.
Certains langages étaient trop concentrés sur les niveaux les plus bas de la pile. D’autres étaient trop complexes, avec des caractéristiques qui ne feraient que gêner. Les développeurs de Google souhaitaient un langage suffisamment simple pour être appris en quelques heures, mais suffisamment complexe pour gérer le flux d’informations sur Internet moderne.
La solution était Go, un langage qui semblera familier aux programmeurs qui ont étudiés C, Java ou JavaScript, autrement dit, à peu près tous les programmeurs. Go a juste assez de fonctionnalités pour écrire des boucles et des blocs de codage, mais aucune des idées les plus sophistiquées qui prennent du temps à maîtriser. Les routines intégrées sont optimisées pour transférer des données depuis et vers Internet. Tout le reste, aussi intelligent soit-il, est laissé de côté.
Go est une excellente option pour les équipes qui construisent des applications basées sur des architectures de microservices, car ces constellations de services ne sont que des versions plus petites de la galaxie utilisée par Google. Votre projet n’offrira peut-être pas d’e-mails, de cartes, de recherches et d’innombrables autres services de cloud computing au monde, mais il pourrait tout de même proposer des dizaines de services d’informations plus petits et plus différents aux utilisateurs. Chaque projet de microservice est simplement une version micro, voire une nano, de Google.
La décision de Google d’ouvrir l’open source Go était judicieuse. La langue a nourri des milliers de projets qui offrent les éléments de base de votre projet Web. Cette riche tradition facilite le travail en parallèle dans d’autres équipes pour créer votre propre constellation.
Voici 20 des projets open source les plus intéressants pour créer un réseau de microservices Go. Des kits d’outils plus petits axés sur la messagerie, le routage, la gestion des erreurs ou les API, aux frameworks plus complets pour la création d’applications Web MVC, vous trouverez une multitude d’options pour passer au micro avec Go.
Beego
Le framework Beego comprend de nombreux extras standard, tels qu’un routeur complet et un mappeur d’objet à base de données avec des opérations CRUD pratiquement prêts à fonctionner. Un des favoris de nombreux fans de Beego est l’outil Bee, un outil de ligne de commande rapide et puissant pour la création, la mise à jour, la compilation et le déploiement de votre application. L’outil Bee générera le code source à partir de modèles et maintiendra la base de données à jour.
Buffalo
De nombreux frameworks de microservices vous mènent très loin. L’équipe de Buffalo avait besoin de quelque chose qui puisse assembler toutes les parties d’une application Web, y compris la conception de l’application elle-même. Ils aiment appeler cela un « écosystème » pour un certain nombre de pièces pouvant être installées ensemble. Si vous voulez le routage, et peu d’entre vous le voudriez, Buffalo lancera le projet Gorilla/Mux. Si vous avez besoin de modèles, Buffalo préfère Plush par rapport au mécanisme Go intégré. Une vaste collection de modules de connexion à la base de données appelée Pop vous aidera à transformer les informations de la base de données en objets Go. Vous trouverez également des méthodes standard pour vous connecter à des bases de données, gérer les cookies et accomplir pratiquement tout ce que vous pouvez imaginer.
Cobra
Parfois, vous voulez juste une interface de ligne de commande pour votre code. Cobra est prêt à gérer toutes les fonctionnalités standard d’une interface de ligne de commande. Vous n’avez donc pas besoin de perdre votre temps à mettre en œuvre le code pour rechercher des indicateurs -h ou -help. Si vos microservices doivent répondre à des appels de ligne de commande avec beaucoup d’indicateurs et d’autres fonctionnalités, vous devrez alors intégrer Cobra.
Docker
Vous pouvez exécuter votre code de microservice sur n’importe quelle machine, y compris certaines des boîtes nues dans la salle des serveurs depuis longtemps oubliée dans votre bureau, mais de plus en plus de personnes regroupent leur code dans des conteneurs Docker et les envoient dans le cloud. Les petits packages facilitent la jonglerie avec différents morceaux de code – un service précieux lorsque votre vision d’une architecture de microservice vous commande de créer de nombreux petits blocs de code indépendants.
Il est à noter que Docker est écrit en Go, bien que vous ne l’utilisiez probablement jamais lors du déploiement de conteneurs Docker. L’édition de la communauté Docker est open source, vous pouvez donc vous en servir si vous en avez besoin, mais vous utiliserez probablement Docker comme outil pour déployer votre propre génie de microservice. La vraie raison pour laquelle les fans de Go veulent se rappeler que Docker est écrit en Go est que leur omniprésence est une déclaration de soutien solide pour le langage.
Echo
Echo est un framework minimaliste, mais il contient un bon nombre des composants les plus importants pour la livraison des bits. Le routeur décompactera les URL et transformera les pièces en paramètres afin que vous n’ayez pas besoin de les analyser. Ensuite, vous pouvez combiner authentification, analyse de formulaire, compression et limites sensibles. Vous pouvez vous concentrer sur le retour des informations correctes de votre fonction.
Errors
Parfois, les utilisateurs d’une API transmettent des paramètres incorrects qui doivent être marqués. Vous pouvez le gérer vous-même ou le transmettre à Errors, une bibliothèque qui automatisera une grande partie du suivi pour faciliter le débogage. Quand une erreur se produit, Errors la résume avec des annotations qui détaillent ce qui a mal tourné et où.
Gin
Au cas où le nom ne le rend pas évident, le projet Gin est la prochaine génération du framework Martini populaire. Vous pourriez dire que Gin jette les extras et se concentre sur les ingrédients qui produisent le plus de performance. Les développeurs qui ont passé beaucoup de temps à créer des applications Node.js pour microservices se sentiront bien à l’aise. Vous créez un microservice dans Gin en instanciant un objet, puis en attachant des fonctions pour gérer des invocations particulières. Gin gère le routage et vos fonctions fournissent le logique métier. Si vous ignorez quelques signes de ponctuation, cela va paraitre comme un code Node.js.
Ginkgo
Les tests peuvent constituer le domaine le plus difficile du développement de microservices. Ginkgo étend le mécanisme de test intégré de la distribution standard Go avec des tests basés sur le comportement. Le langage utilisé pour les tests offre un mécanisme de haut niveau pour définir exactement ce qui doit sortir des fonctions ou du service. Les résultats sont généralement évalués avec Gomega Matcher de Ginkgo, bien que vous puissiez utiliser une bibliothèque de matcher différente si vous le souhaitez.
Ginkgo est un framework sophistiqué offrant une grande variété d’options pour configurer les données de test, exécuter les tests et supprimer les données de test quand ce sera fait. La structure vous encourage à décrire les résultats puis à laisser Ginkgo gérer tout le reste.
Goa
Si vous êtes un développeur ayant travaillé avec Ruby et le framework Praxis dans le passé ou si vous êtes simplement quelqu’un qui apprécie la puissance et la discipline d’un langage de programmation, vous trouverez tout ce que vous voulez avec Goa. Vous n’écrivez pas le code Go en tant que tel. Vous écrivez une spécification de conception pour l’API dans le DSL de Goa, puis Goa la transforme en code Go permettant d’effectuer le travail. Le DSL est optimisé pour les API de microservice et oblige votre conception à se conformer à une architecture standard.
Gorilla
Le projet Gorilla fournit une autre grande collection de modules conçus pour répondre rapidement à une grande partie de ce dont vous avez besoin. Le routeur Mux de Gorilla est utilisé par de nombreux autres frameworks parce qu’il est si bon. De nombreux utilisateurs ont immédiatement indiqué que le code Websocket était la raison principale pour laquelle ils avaient adopté Gorilla.
Gotify
L’un des défis de la synchronisation d’un groupe de microservices est la mise en place de nœuds de transmission de messages efficaces. Gotify est un serveur simple d’envoi et de réception de messages, qui regroupe votre collection de microservices avec des messages persistants. La partie la plus utile est peut-être l’interface Web qui facilite le débogage, tâche qui peut être extrêmement difficile.
Hugo
Peu de microservices ne peuvent être construits avec un générateur de site statique comme Hugo, mais c’est une option à considérer lorsque le nombre de réponses aux requêtes répétitives est limité. Hugo sort les réponses une fois, puis elles pourront être servies encore et encore. Ceci est très utile lorsque vos réponses sont déjà livrées au format HTML.
Kite
Si vous souhaitez construire une constellation de services plus étroitement contrôlée avec davantage d’interactions que d’habitude, jetez un coup d’œil à Kite. Kite a été conçu pour simplifier un peu la coordination des communications entre microservices. Les appels d’API provenant de non-Kites via un websocket, puis les nouveaux messages sont transmis en utilisant des connexions de sockets plus rapides et de niveau inférieur (basées sur dnode). Un registre de service et un service d’authentification appelé Kontrol se trouvent au milieu. Si vous devez échanger fréquemment des messages, coordonner de nombreuses actions, l’ajout de cette couche d’interconnexion entre les différents serveurs peut tout accélérer.
Logrus
Garder une trace des données entrant et sortant de votre API et des erreurs qu’elle pourrait générer signifie généralement que vous écrivez des fichiers journaux. Le processus peut être aussi simple que d’écrire une seule ligne de données dans un fichier ouvert, mais il est généralement judicieux de définir un framework complet pour la journalisation avec toutes les fonctionnalités et la structure supplémentaires. Logrus fournit des outils de formatage permettant de normaliser votre sortie et facilitant l’automatisation ultérieure de toute analyse de fichier journal. N’écrivez pas votre propre code de connexion rapide et incorrect. Utilisez une bibliothèque comme Logrus.
Nano
Il ne faut pas grand-chose pour mettre en place un microservice. Le projet Nano est un merveilleux exemple de simplicité. Il n’y a pas plus de 200 lignes de code réel, et quelques-unes plus de 400 lignes si vous comptez les commentaires. Cependant, vous pouvez configurer un microservice avec seulement quelques lignes de votre propre code – un microservice qui résumera uniquement le logique métier nécessaire au traitement d’une requête. Le framework a quelques autres petites touches, comme une structure d’API indépendante du langage, pour que votre code Go puisse bien fonctionner avec tous les services écrits dans d’autres langages. Puis, il existe un bon processus de test pour intégrer vos propres routines de test locales. Il n’y a pas grand-chose de plus, mais c’est l’essentiel.
Negroni
Certaines personnes ont regardé Martini et ont décidé de le prendre dans une direction plus simple. Ils ont vidé le routeur et quelques autres éléments pour créer Negroni, un outil très minimaliste qui ne fera que servir à la gestion de fichiers standard, gérer vos demandes personnalisées, résoudre des problèmes élémentaires et tenir un journal. Si vous voulez les extras, vous pouvez les mélanger vous-même. L’équipe de Negroni fournit une longue liste de petits projets qui s’harmonisent avec les leurs.
Renderer
Lorsque vous préparez votre sortie, vous devez prendre les données et les insérer dans des modèles. Renderer est un projet qui offre une large gamme de formats de sortie (JSON, JSONP, XML, YAML, HTML, fichier) et un moteur de création de templates sympa, rapide et standard.
Revel
Revel a emprunté une fonctionnalité intéressante du monde Webpack de Node.js qui lui permet d’agir comme un IDE, ou du moins la partie de l’IDE qui reconstruit constamment votre projet chaque fois que vous apportez des modifications au code. Une fois que vous avez appuyé sur Enregistrer, le framework détecte le changement, compile le code et, en l’absence d’erreur de compilation, lance l’application. Ainsi, le serveur Revel déploiera automatiquement les modifications apportées à son code – idéal pour le développement depuis un ordinateur de bureau et peut-être un peu trop tentant pour le code en production.
Le framework lui-même est complet avec tous les mécanismes majeurs et mineurs trouvés dans les plus riches en fonctionnalités. Cela signifie que des modèles, une mise en cache, une validation et des filtres agissent sur les données lorsqu’elles transitent dans le pipeline de requêtes. Si vous construisez plusieurs microservices, un système de modules vous permet de partager certains des composants MVC entre les projets.
Testify
Un des moyens les plus simples d’utiliser des tests d’assertions classiques est Testify, un projet Go qui propose également des outils mock-up permettant de tester rapidement des parties individuelles de votre vaste collection de microservices. Quelques lignes suffisent pour écrire quelques tests de base, puis vérifier automatiquement si le code renvoie la bonne réponse.
Tollbooth
Lorsque vous publiez votre API pour la première fois, vous voulez que tout le monde l’appelle. Lorsque votre serveur est en panne (ou si vous consultez vos factures d’hébergement Cloud pour des services élastiques), vous changez d’avis. Tollbooth est un système léger permettant de limiter les requêtes entrantes à un certain nombre par seconde. Couper la demande au niveau de la porte d’entrée réduit les demandes sur les microservices ou les bases de données dans le pipeline, vous permettant de tout faire fonctionner sans problème.
None
Avec « None », il n’y a pas pas de framework du tout. Vous allez commencer à écrire le code Go à partir de zéro sans rien importer ni instancier un objet de contrôle. Il est facile de créer un microservice dans Go, car Go possède déjà une grande partie du code de base intégré. C’est pourquoi il est possible de créer des infrastructures telles que Nano avec seulement quelques centaines de lignes de code.
Tout le travail nécessaire pour écouter sur les sockets, décompresser la requête HTTP, et plus encore, est déjà fait pour vous dans l’une des bibliothèques standard faisant partie de la distribution standard. Bien sûr, certains frameworks peuvent ajouter de la discipline ou des fonctionnalités, mais souvent vous n’en aurez pas besoin si vous écrivez simplement un microservice très basique. Tous les « extras » entrent en jeu et cela amène certains développeurs de Go à dire que le code finit par devenir encore plus complexe. Si vous voulez simplement écouter sur le fil et prendre quelques décisions de base avec l’information fournie, vous pourrez peut-être vous passer de rien.