『データ指向アプリケーションデザイン』を読んだ
『データ指向アプリケーションデザイン』を読んだ。たいへんおもしろかった。技術書でこんなにわくわくしながら一気に読んだのは『Androidを支える技術』以来かもしれない
本書はソフトウェアシステムの設計について「データ」という観点からまとめたものだ。もちろんデータベースは登場するが、それだけでなくJSONなどのデータ形式、RPC、メッセージキュー、全文検索インデクス、バッチ処理やオンライン処理も等しく「データ」という観点から扱っている。特筆すべき点は、理論だけでなく実際のミドルウェア製品を引き合いに出しつつ具体例を混じえて解説している点だろう。地に足がついた、かといって個別詳細に立ち入りすぎず、一歩離れたところから中立的に包括的に解説する姿からは、筆者の多くの技術への深い理解と経験が窺える。
本書は3部構成になっているが、自分の中では白眉はやはり第5章から第9章までの第2部「分散データ」だといえよう。一見簡単そうで、実はとても大変な(!)「レプリケーション」から始まって、章が進むにつれて、それまで漠然と分かっていたつもりになった「一貫性」とはなにか、「耐障害性」とはなにか、信頼できない要素を組み合わせて信頼できる技術にすることがいかに大変か、といったことが順に明らかになっていく。最後の第9章「一貫性と合意」はそれまで扱っていた別々の概念が実は等価であったことが示される章であり、自分のようなこの界隈に無知な人間は、エレガントな数学の定理の証明を読んでいるようで興奮が抑えられなかった。
自分が本書のもっとも気に入っている点の1つは明快さだ。概念をあらわす単語は慎重に選ばれ、たとえば「一貫性」が意味するところのものが前出のものと異なる場合はきちんと断りがつく。それによって、読者が分かったような分からない気持ちになるのを防いでくれる。反面、その概念をきちんと身体に染みこませずに次に進むと、おそらく何を言っているか分からなくなるだろう。もしそのような事態になったら、臆することなく前ページにもどって確認することをおすすめする。この本はそれだけの深い理解をする価値のある本だ。
ところで、自分の無知ゆえかもしれないが、ちょうどNoSQL系のミドルウェアがもてはやされていたころから、自分はどうもその界隈のバズ用語が満載の説明に胡散臭さをおぼえていた。「CAP定理」や「結果整合性」といった言葉で優位性を説明されても、それらの技術の限界が腑に落ちなかったからだ。本書は「CAP定理」を『したがって、 CAPは歴史的には大きな影響力があったものの、システムの設計における実際的な価値はほとんどないのです』(9.2.4.1 CAP定理)と切って捨て、より厳密な「線形化可能性」や「全順序」といった概念を中心に、定理にもとづいて説明が進んでいく。この真摯さ、明快さ、厳密さがうまい具合にブレンドされていることは本書のもっとも優れた点だと思う。
最終章12章では、それまで筆者があえて守っていた中立さを捨て、自分の考えを述べている。やや散漫な印象もあるが、おもしろく読める章だ。筆者の個人ブログを読んでいるような気になる。なかんずく「12.4 正しいことを行う」は、筆者の強い思いが伝わる節であった。その主張に賛成であれ反対であれ、本書を手にとったソフトウェアエンジニアはぜひこの節まで読んでいただきたいと思う。データをどう扱うか、ということを考えてきた筆者の声だけに耳を傾ける価値はあると思う。
最後になったが、和訳の素晴しさを述べて終わりにしたい。本書は先にも述べたとおり、レンガを1つ1つ積んでいき1つが合わないと全体が崩れるような、そんな厳密さを持ったものである。それぞれの概念をきちんと理解していないと、このような文章は正確に訳せないだろう。自分は「原文を読んで意味を確認したい」と思った箇所に線を引く癖があるが、本書ではわずか数カ所であった。訳者の方は本書の内容を理解し、必要とあらば参考文献にあたって、理解を深めたうえで、適切な翻訳にしてくださったものと思う。いち読者としては今後もぜひ翻訳者として活躍いただきたい。