Note de lecture : Designing Data-Intensive Applications, par Martin Kleppmann

Note : 10 ; Monumental! Book of the year 2021 !

Une somme de connaissances, cet imposant ouvrage, n’est pas moins que cela. Le titre laisse présager que l’on va parler big data. C’est plus subtil que cela, car il s’agit avant tout les principes et mécanismes fondamentaux des grosses architectures data, certes en faisant référence aux classiques du marché, pour comprendre les spectres d’utilisation des différentes solutions. On va donc y parler stockage, systèmes réparties, transactions, streaming, etc. Et ce n’est pas du léger.

Léger, l’ouvrage ne l’est clairement pas vu de l’extérieur (et comme nous le verrons, cela va se gâter à l’intérieur) : 550 pages divisées en 3 parties pour un total de 12 chapitres. Nous avons donc des chapitres très conséquents, il n’y a aucun doute. La première partie traite des fondamentaux. Cela couvre 150 pages sur 4 chapitres. C’est une introduction en douceur, le propos y est tout à fait abordable. Le premier chapitre, fort d’une vingtaine de pages, nous invite à comprendre ce qu’est un système fiable, scalable et maintenable. Il ne s’agit pas juste de généralités, car l’auteur y présente ainsi la structure des données dans les SGBDR, dans un système de streaming tel que Storm. On y apprend ce qu’est un percentile et beaucoup d’autres choses. Bref, un chapitre en douceur mais solide, épaulé par une trentaine de références bibliographiques.

En débutant le chapitre 2, j’ai été frappé par la gravure représentant la table des matières du chapitre. Le premier chapitre en avait une aussi, ainsi qu’en fait tous les chapitres du livre ! Modèles de données et langages de requêtes sont au menu de ce chapitre diablement passionnant. Non seulement on rentre en profondeur dans les structures des différents modèles de données et les paradigmes des langages de requêtes, qu’ils soient déclaratifs ou impératifs, mais l’auteur nous donne un éclairage historique remontant au Codasyl. Brillant.

Ne croyez pas vous en tirer facilement avec le chapitre 3 consacré au stockage. Il y sera question d’algorithmes d’indexation, de représentation de données, de compaction et de comprendre enfin ce qu’est un stockage orienté colonnes. Le modèle OLAP a droit aussi à son explication, car l’auteur ne s’arrête pas au Big Data. L’objectif est de comprendre les compromis de performance de ces différents modèles et il est remplis.

Cette première partie se referme sur un chapitre dédié à l’encodage des données. C’est l’occasion de découvrir les modèles de sérialisation à la mode (Protocole Buffer, Thrift, Avro et Parquet), ainsi que les modèles de dataflow.
La seconde partie du livre couvre le sujet des données distribuées. Il compte 5 chapitres pour un total de 230 pages. Et c’est cette partie qui vous fera vraiment mal : le sujet est (très) ardu et l’auteur ne nous épargne rien ! Le chapitre 5 aborde la réplication et nous rentrons tout de suite dans la question des différentes stratégies : leur coût et leurs contraintes, mais surtout la garantie temporelle qu’elles offrent. Ces stratégies sont nombreuses et c’est sans doute le texte le plus pointu que l’on puisse s’offrir sans tomber dans les papiers de recherche. A côté de celui-ci, le chapitre 6 où le partionning est abordé paraît même relaxant. Il n’ouvre que deux questions sérieuses sur les requêtes multi-partitions et sur le rééquilibrage de ces partitions.

Le chapitre 7 aborde du sérieux : les transactions ! on reprend à la base le concept d’ACID qui s’avère n’être pas aussi clair qu’on peut le croire. C’est spécialement avec la question de l’isolation que l’on prend vraiment très cher.
Au chapitre 8, on aborde très sérieusement les systèmes distribués et tout ce qui peut mal se passer. Et les possibilités sont très nombreuses et souvent insoupçonnées. Une fois de plus l’auteur va au fond du sujet, souvent à l’aide de chronogrammes. Près d’une centaine de références bibliographiques soutiennent cela si le cœur vous en dit. C’est le chapitre 9 qui aborde le consensus dans les systèmes distribués et qui fait directement suite aux propos précédents qui vous occasionnera pleins de cauchemars tout mignons. Rien que le concept de linéarisation (que l’auteur met en perspective avec la sérialisation) a de quoi nous occuper. Quant au théorème de CAP, taxé de naïveté, il en prend plein la figure. Évidemment cela est très solidement étayé entre autres par un solide développement sur la garantie d’ordre. Le two phase commit « pas un très bon algorithme de consensus » sort aussi tout cabossé d’un développement particulièrement ardu sur les algorithmes de consensus distribués. Ce chapitre et ses 110 références bibliographiques conclue cette seconde partie.

En 3ème partie est forte de 3 chapitres couvrant 160 pages. Elle s’ouvre sur un chapitre 10 dédié aux systèmes batch. Pour l’auteur, le shell Unix, avec son pipe, est un peu le nirvana du batch processing. Et c’est par rapport à cela que l’auteur met le framework Hadoop en perspective. Car le chapitre consiste essentiellement à décortiquer map-reduce et son écosystème dont le stockage et les langages de requête. Un chapitre solide et qui nous repose par rapport à la seconde partie. Le Streaming Processing occupe logiquement le chapitre suivant. Et s’il est question de système de messaging, on arrive rapidement quand il question des choses sérieuses, aux logs partitionnés et donc à Kafka. Le stream processing est traité dans la continuité, mais peut-être pas avec l’acuité que j’attendais. Disons que le chapitre est une très bonne introduction au sujet.

La partie et le livre se referment sur un chapitre 12 un peu en décalage pour évoquer le futur des systèmes de données. Le chapitre se lit en deux parties. Tout d’abord une vision prospective de l’architecture de ces systèmes qu’il nomme « unbundling databases », sorte de vision Unix formée de nombreux système spécialisés, assemblés à l’aide d’un dataflow abandonnant le principe de l’ordonnancement total, mais s’appuyant sur des identifiants d’opérations. La seconde partie est un propos plus personnel de l’auteur sur la question et les responsabilités des architectes data par rapport au respect de la vie privée et des impacts sociétaux voir politiques de manière plus large. Il nous propose ainsi de remplacer « données » par « surveillance » et de voir ce que donne nos propos !

Voici un titre majeur dans la littérature sur le big data. La lecture est très loin d’un léger pique-nique d’un dimanche après-midi. C’est une lecture solide mais les qualités pédagogiques de l’auteur aident beaucoup. J’ai eu l’impression de lire un livre, sinon à chaque chapitre, au moins à chaque partie. La somme de connaissances est impressionnante. Un passage obligatoire pour tout développeur qui a des prétentions dans le domaine de la donnée.

Référence complète : Designing Data-Intensive Applications – Martin Kleppmann – O’Reilly 2017 – ISBN : 978 1 449 37332 0

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.