Bienvenue dans la deuxième édition du Trio de News !
Au programme cette semaine le rétropédalage d’Amazon sur S3, gofiber et la publication de metrics Prometheus et enfin le début imminent du Hacktoberfest.

Amazon rétropédale au niveau de S3

Amazon a lancé le service S3 au printemps 2006. Les spécifications initiales de Jeff Bezos pour S3 étaient très succinctes, il voulait un malloc (une fonction d’allocation de mémoire pour les programmes C) pour Internet. Depuis, S3 s’est développé au point de stocker plusieurs milliards d’objets et de traiter des millions de requêtes par seconde pour manipuler ces derniers. Au cours des 13 années qui se sont écoulées depuis, Amazon a ajouté de nouvelles options de stockage, caractéristiques et contrôles de sécurité à S3.

Dans sa conception originale, toutes les URL S3 commençaient par un domaine S3 tel que s3.amazonaws.com ou s3-eu-west-1.amazonaws.com. AWS appelle cela les path-style addresses. Cela a ensuite été modifié pour prendre en charge les adresses où chaque “bucket” est un sous-domaine. Ce type d’URL commence par votredomaine.s3.amazonaws.com et AWS l’appelle cela les virtual hosted addresses.

En mai 2019 Amazon a publié un article sur son blog pour annoncer son souhait de supprimer les path-style addresses. Il y a plusieurs raisons derrière cela. D’une part l’utilisation ce type d’adresses implique que toutes les requêtes vont vers un nombre limité d’endpoints, alors qu’avec le virtual hosting, chaque bucket a sa propre entrée dans le DNS. D’autre part, le virtual hosting facilite la mise à l’échelle et permet de se défendre contre les attaques DDoS (Distributed Denial of Service). Enfin, d’après AWS, certaines nouvelles fonctionnalités de sécurité dépendraient de l’utilisation des virtual hosted adresses.

AWS avait prévu initialement de mettre fin au support des URL de type “path-style” le 30 septembre 2020. La société a ensuite déclarée, suite aux protestations de clients ayant des applications qui en dépendent, qu’elle continuerait à le prendre en charge pour les buckets existants, mais pas pour les nouveaux créés après cette date limite. Ces derniers jours, elle a encore fait marche arrière, en disant qu’elle avait entendu de nombreux clients qui demandaient de prolonger la date de support. AWS a déclaré qu’elle reporterait la déprédation pour s’assurer que les clients aient le temps pour passer à des URL de type virtual-hosted.

Que peut-on en conclure ? D’une part, c’est rassurant de constater que même les sociétés comme Amazon doivent faire face à des problématiques de gestion du legacy ! D’autre part, j’ai une pensée émue pour les ingénieurs de l’équipe S3 qui vont devoir continuer à gérer les load-balancers des noms de domaines legacy, load-balancers qui affrontent un trafic absolument imprévisible !

Publier des metrics Prometheus avec gofiber

Je suis tombé récemment sur un projet GitHub qui permet de publier des metrics Prometheus quand on utilise le framework gofiber. Ce projet a attiré mon attention car il y a environ un an, j’ai pas mal travaillé sur la problématique des metrics et de l’alerting avec Prometheus. Je pourrais en parler longuement, mais cela nécessiterait un article à lui tout seul ! D’autre part j’avais entendu parler de Fiber, en particulier au travers des articles publiés sur dev.to au début de l’année. Pour être honnête, j’avais vu cela comme un gadget. Pas sérieux ! Dans mon article sur le Go je mettais plutot en avant le framework go-kit.

Et bien je dois dire que j’ai eu tort ! Fiber est un framework web inspiré de Express.js et basé sur Fasthttp, un moteur http pour Go. Il utilise une syntaxe similaire à celle d’Express. L’idée est géniale ! Les personnes qui passent de Node.js à Go se retrouvent souvent face à une courbe d’apprentissage difficile et cela les empêchent de commencer à construire leurs webapps immédiatement. Ce projet est destiné à faciliter les choses pour développer rapidement, mais tout en gardant un objectif de performances à l’esprit. En outre, toute une panoblie de middlewares est proposée afin de gérer la compression, le CORS est bien d’autres.

Du coup j’ai un peu joué avec et c’est vrai que la prise en main est très rapide. Je me suis amusé à construire un projet pour tester tout cela. Tu le trouveras sur mon GitHub. Il s’agit d’un service qui pour une année donnée renvoie le nom du Bagad qui a remporté le championnat de première catégorie. Le code est simple. Simpliste même ! Les valeurs sont codées en dur. Dans la vraie vie on utiliserait une base donnée, par exemple DynamoDB. C’est toutefois suffisant pour tester le framework.

Le code source du fichier principal est le suivant :

package main

import (
	"github.com/gofiber/fiber"
	fiberprometheus "github.com/hepsiburada/fiber-prometheus"
)

func main() {
	app := fiber.New()

	p8sMiddleware := fiberprometheus.NewMiddleware("fiber", "http", "/metrics")
	p8sMiddleware.Register(app)

    palmares := make(map[string]string)
  // more items in actual map
	palmares["2019"] = "Bagad Cap Caval"

	app.Get("/bagad/:year", func(c *fiber.Ctx) {
		y := c.Params("year")
		winner, found := palmares[y]
		if !found {
			c.Status(404)
		} else {
			champ := &champion{Name: winner, Year: y}
			c.JSON(champ)
		}
	})

	app.Listen(7000)
}

type champion struct {
	Year string
	Name string
}

On peut alors lancer le projet et requêter le service :

curl -v http://localhost:7000/bagad/2019
< HTTP/1.1 200 OK
< Date: Tue, 29 Sep 2020 19:57:51 GMT
< Content-Type: application/json
< Content-Length: 40
< 
{"Year":"2019","Name":"Bagad Cap Caval"}

Il est ensuite possible de consulter les metrics :

curl -v http://localhost:7000/metrics/
< HTTP/1.1 200 OK
< Date: Tue, 29 Sep 2020 20:05:04 GMT
< Content-Type: text/plain; version=0.0.4; charset=utf-8
< Content-Length: 6728
< 
# HELP fiber_http_requests_total Number of HTTP requests
# TYPE fiber_http_requests_total counter
fiber_http_requests_total{method="GET",path="/bagad/:year",status_code="200"} 2

En lançant le projet je me suis aperçu qu’un warning s’affichait dans la console :

v2 will be released on 15 September 2020!
Please visit https://gofiber.io/v2 for more information.

Ni une ni deux, je me suis empressé de suivre ce lien. Effectivement une release majeure est disponible et elle apporte son lot d’amélioration. C’est particulièrement vrai sur le plan des performances, grâce à un changement de package pour l’encodage du json et grâce à une nouvelle implémentation du routeur basée sur l’utilisation d’un arbre radix. Malheureusement cette nouvelle release introduit des ruptures de compatibilité. Il n’est par conséquent pas possible d’utiliser le projet fiber-prometheus avec fiber v2. Du moins pour le moment ! Tout l’intérêt de l’open-source étant de pouvoir contribuer, j’ai proposé une PR en ce sens.

En définitive, je pense que le framework Fiber est promis à un bel avenir ! Son adoption devrait encore s’accélérer avec la release récente de la v2.

Le lancement de Hacktoberfest est immiment !

Enfin la dernière chose dont je voulais parler aujourd’hui est le lancement du Hacktoberfest 2020. J’ai découvert cette initiative l’année dernière grâce à un événement local organisé par Avalon Lab. Le Hacktoberfest est une projet de DigitalOcean qui vise à promouvoir le logiciel libre pendant un mois. Il est ouvert à tout le monde ! Il suffit de faire cinq contributions à des projets open source entre le premier et le 31 octobre pour recevoir un t-shirt souvenir. C’est une excellente façon de se lancer dans l’open-source. Petite nouveauté cette année, il est possible de renoncer à son t-shirt et de planter un arbre à la place !

Les goodies que j&rsquo;ai reçu l&rsquo;année dernière !

Les goodies que j’ai reçu l’année dernière !

Pour participer c’est simple ! Tu as besoin d’un compte GitHub. Si tu n’en as pas encore, tu peux en créer un gratuitement en quelques minutes. Ensuite, rendez-vous sur la page d’inscription de Hacktoberfest et suit les instructions. Le site propose également de nombreuses ressources pour apprendre à utiliser Git. Il y a aussi une page qui permet de trouver des issues qui n’attendent que toi pour être résolues. Enfin, il existe de nombreuses façons de contribuer à l’open-source comme je te l’explique dans cet article.


Si tu es arrivé jusqu’ici, merci beaucoup d’avoir lu cet article !
Photo de couverture par Roman Kraft.