【技術書】「データ指向アプリケーションデザイン」を読みました
今回読んだ本
めっちゃためになるけど分厚くて大変だと名高い 「データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理」をとうとう読み終えました。
他の本とかに浮気したりしながら読んだのと、内容が重厚だったので半年くらいかけて少しずつ読みました…。
この本を読んだ理由
システム開発をするものとしてこの本を読んだほうが良いという話はよく聞いていたため、いつか読みたいと思っていました。 非常に重い本だということも聞いていたのですが、AIエージェントの台頭が凄まじいこの一年くらいで、改めて自分のスキルの幅や深さを広げたり深めたりするきっかけとして読みたいと思っていました。 やっぱり周りの強いエンジニア達は普通に読んでいる印象が強いですし、どんどん生産性の差が広がっていきそうですし自分も強くなりたいなと…。
概要や感想
自分は普段Webアプリケーションを開発していますが、その中で当たり前のように頼っているDB等の整合性がどのように担保されているのか(しようとしているのか)ということや、その限界について色々と学ぶことが出来たと思います。
内容についてはこのスライドが簡潔に(といっても30分ですが)まとめてくれているため、こちらを軽く見ていただくのが良いかと思います。
全体として銀の弾丸はないということが繰り返し述べられていたと思います。 列思考 vs 行思考、強整合性 vs 結果整合性 などそれぞれメリット・デメリットや、多少のデメリットがあっても現実的に起こり得ないから採用する価値があるなど、色々なトレードオフを考慮してアプリケーションを設計出来るようになる必要があるというように感じられました。
内容が膨大なため正直全て理解しきれたとは言えないですが、一見完璧に動いているような新しい技術でも(ほぼ?)間違いなくトレードオフがあるもので完璧なシステムはないというような考え方を持って接することが出来るようなれそうな気がします。
また、今のクラウド環境がかなり発展した世の中では、複数サーバを設置することでDB周りも簡単にスペックを上げることが出来るようになっています。 (簡単というと怒られそうですが)
当然今までもとてもありがたいと思っていたのですが、この本を読むとそこには様々な工夫や先人達の工夫やビジネス判断等があるのだなあと感じで今まで以上にありがたみを感じています。
昔はなんでマルチライターぽんぽん出してくれないんだよとか思ったりしてましたが、もうそんなことは言いません。制約も受け入れます
この本では広くデータの扱いついて述べられていますが、結局「データ指向アプリケーション」とは一体なんだろう?ということですがアプリケーションレイヤーを考える人に向けた、1つの回答としてデータが破損せずかつ回復可能にしやすくするために、
- 冪等な処理をすることと
- DBに保存するだけでなくイベントをログ等にひたすら追記していくこと
が大きな教訓になるのだろうと感じました。 AIエージェントが色々やってくれる時代だからこそ、どうしたらデータを壊さないか、どうしたらバグが起きたときに追跡可能になるか、みたいな問への1つの回答になりそうな部分だと感じています。
まとめ
重厚な本ですが色々な知識を学ぶことが出来たり考え方からアップデートしてくれるような本だったと思います。 全て吸収できているわけではないので、またいつか読み直したいです。でももう第2版出てるから今度読むならそっちかな…。
「データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理」