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

Publicité

2 réflexions sur “Note de lecture : Designing Data-Intensive Applications, par Martin Kleppmann

  1. joseph

    Indeed très bon bouquin. Je ne lui aurai pas mis autant ceci dit, 9 seulement ^^ Il m’a laissé un goût d’inachevé tout de même perso, ne détaillant pas assez l’event driven sauf pour dire que c’est la panacée.

    D’ailleurs je viens de parcourir toutes tes notes de lecture, merci encore 🙂 Je me fais une collection de livres à lire du coup.

    Il me semble que tu n’as pas (encore) lu « Don’t make me think »: amha il vaut le coup, même si certains exemples de pages web datent un peu, le fond est génial et applicable à bien plus que l’UX (genre le code). Et puis enfin un livre UX qui indique comment se sortir du traditionnel « moi j’veux un drop down, ah non mois j’veux un multi select ». Bon teaser non? A noter que c’est le seul des 3/4 bouquins d’UX que j’ai lu qui se lisait vite et dont j’ai retenu l’essentiel au point de citer plein de ces titres de chapitres très fréquemment. Voir juste « don’t make me think »: tout « bruit mental » quand on découvre qqchose, cad tout doute, questionnement ou hésitation, indique une ergonomie perfectible. Lovely 🙂

    Vu ta capacité de lecture impressionnante, j’en profite pour glisser sur un sujet moins tech: si tu as la même capacité à lire sur le réchauffement climatique et comment s’en sortir par le haut, ce serait avec plaisir que je lirai ensuite les livres ayant eu tes faveurs.

    Ah j’oubliais, encore un +1 pour ta note sur Vaugh Vernon/Implementing DDD ^^

    Bonne semaine

    J’aime

    1. Bonjour Joseph,
      Merci pour ce long commentaire qui fait vraiment plaisir !
      Je reste sur mon « 10 », c’est l’avantage de ne pas avoir de compte à rendre 😉 L’auteur a mis l’accent sur les fondamentaux (qui vont certes loin, car les algo de consensus distribués…) mais je pense que ces fondamentaux avec leurs bases théoriques manquent cruellement à une grande partie des devs ! Et là c’est à la fois très solide et remarquablement expliqué.
      Effectivement, l’auteur fait plus court sur d’autres sujets. J’appellerais cela un « choix éditorial », car je parie que l’auteur est aussi solide sur ces sujets. Si c’est cela que tu cherchais, il est naturel que tu fut frustré, et à ta place j’aurais sans doute noté un peu moins bien. Cela m’arrive sur d’autres livres.
      Je n’ai pas encore lu « don’t make me think », mais il est en fait dans ma pile physique de livres à lire. Malheureusement, il n’est pas tout seul dans cette pile… J’ajoute d’ailleurs que ma capacité de lecture est sans doute bonne, mais moins impressionnante qu’il n’y parait car je ne publie pas uniquement des lectures récentes. Je devrais d’ailleurs avoir épuisé mes réserves fossiles l’année prochaine ou la suivante…
      Enfin, une réponse à ta dernière question : non je n’ai pas de liste de lecture sur le réchauffement climatique, et ce n’est pas prévu. Non que je ne sois pas sensible au sujet : en tant qu’ancien géologue je sais que ce qui a permis l’avènement d’organismes complexes sur terre, c’est la captation du carbone par la photosynthèse. Relâcher le carbone ainsi piégé dans le pétrole et le charbon dans l’atmosphère et le brûlant est, à minima, une absurdité…
      Comme le disait Frank Zappa : So many books, so little time…
      Au plaisir d’échanger de nouveau avec toi,
      Christophe

      J’aime

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 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.