Conception d'applications intensives en données : Les grandes idées derrière des systèmes fiables, évolutifs et maintenables

Aleksandr Shitik
Aleksandr Shitik

J’écris mes propres articles et livres, et je fais des critiques de films et de livres. Expert en cosmologie et astronomie, informatique, productivité et planification.

Conception d'applications intensives en données : Les grandes idées derrière des systèmes fiables, évolutifs et maintenables
Martin Kleppmann
Genres: Programmation
Année de publication: 2018
Année de lecture: 2020
Ma note: Maximale
Nombre de lectures: 1
Nombre total de pages: 640
Résumé (pages): 28
Langue originale de la publication: Anglais
Traductions dans d'autres langues: Russe, Espagnol, Chinois

Description générale

Le livre comprend 12 chapitres divisés en 3 parties. Il contient très peu d'illustrations et se lit assez difficilement et lentement car tout est texte continu, avec une police de caractères plutôt petite. Chaque chapitre se termine par un résumé de quelques pages et une bibliographie conséquente.

Résumé succinct

Le premier chapitre explique des termes comme maintenabilité, extensibilité et fiabilité. L'auteur décrit ce que c'est et pourquoi c'est important. D'ailleurs, je me souviens depuis mes études que ce sont loin d'être les seules caractéristiques que devrait avoir un logiciel.

Le deuxième chapitre traite des modèles de données, notamment les bases de données relationnelles classiques, orientées document et les bases de graphes. Rien de très concret encore - juste leurs particularités, avantages et inconvénients. À noter que les langages de requête sont aussi abordés (outre SQL, l'auteur cite même CSS comme exemple de langage déclaratif).

Chapitre trois. C'est là que les choses deviennent un peu plus complexes et moins familières pour le travail quotidien d'un développeur moyen : les arbres-B, SSTables, arbres LSM, index de hachage. Ce n'est pas très compliqué, mais comme on n'utilise pas ça directement tous les jours, l'information s'oublie vite. Au mieux, sur 50 pages, il ne reste que quelques idées. Par contre, ce que j'utilise presque quotidiennement et qui est mentionné ici, c'est le travail avec les index et les sous-systèmes de stockage (avec les exemples d'InnoDB et MyISAM).

Le quatrième chapitre est consacré aux formats de données pour la transmission. Il faut reconnaître à l'auteur qu'il ne s'est pas limité à JSON et XML, mais a couvert Thrift, Protocol Buffers et Avro. Il décrit aussi les approches comme REST et RPC. Ceci clôt d'ailleurs la première partie sur les bases des systèmes d'information, et commence la partie sur les systèmes distribués.

Un des chapitres suivants ouvre une nouvelle section sur la réplication. À mon avis, le contenu est plutôt bon. On y trouve les topologies principales pour les systèmes de réplication, les nœuds maîtres et esclaves (même la réplication sans maître), la cohérence, les problèmes de latence, le quorum - tout y est.

Le chapitre suivant traite du partitionnement. Tout aussi bien traité. La différence avec la réplication. Partitionnement par plages de valeurs-clés, par hachage, routage des requêtes et équilibrage de charge - voilà les thèmes principaux. Notons que le partitionnement est décrit de manière générique, applicable à différents systèmes : appelé "shard" dans MongoDB, Elasticsearch et SolrCloud, "region" dans HBase, "tablet" dans Bigtable, ou "vnode" (nœud virtuel) dans Cassandra et Riak.

Vient ensuite un chapitre sur les transactions. Bien développé aussi. L'essentiel tourne autour d'ACID, avec aussi des informations sur la gestion des erreurs et l'abandon de transactions.

Les deux derniers chapitres de cette partie abordent les pannes et problèmes des systèmes distribués (comme les réseaux non fiables ou la désynchronisation des horloges - "horloges non fiables"), ainsi que la cohérence et le consensus (linéarisabilité) et les transactions distribuées.

Parmi les trois chapitres suivants (si on exclut le dernier, très théorique, sur l'avenir des systèmes d'information), ceux qui valent le coup traitent du traitement par lots et en flux (c'est leur nom). On y parle de Hadoop, MapReduce et des brokers de messages. Mais le tout est un peu superficiel.

Mon avis

Un livre théorique sur la programmation qui approfondit vraiment des termes comme les types de bases de données, la notion de transaction, la réplication, le partitionnement, les problèmes de charge élevée et de disponibilité des systèmes distribués, le traitement par flux et par lots - et surtout - quels outils et technologies existent pour résoudre les problèmes liés à ces approches. À cause de son volume, la lecture semble longue et fastidieuse. Mais globalement, si apprendre la programmation c'est comme assembler un puzzle dans sa tête, où chaque pièce est une technologie, une approche ou simplement un conseil, ce livre révèle assurément beaucoup de ces pièces. Donc même si le livre était long et aride, et mon résumé - énorme, je lui ai quand même donné une note assez élevée.

Вверх