ユユユユユ

webエンジニアです

Designing Data-Intensive Applications を読むにさきだって

f:id:jnsato:20201213190703j:plain

 年末年始の課題図書を紹介する。といっても紹介するのは一冊だけである。一冊だけではあるが、骨太な一冊を選んでいる。積読を消化するよりも絶対これを読みたい! というホットな気持ちで手に入れた本であるため、初々しいアティチュードを記録する目的で書く。

 それは Designing Data-Intensive Application というオライリー社の一冊で、『データ指向アプリケーションデザイン』のタイトルで邦訳もされている。

 nand2tetris (これは今夏読んだ)と並んで teachyourselfcs.com で強くプッシュされていた一冊である。 nand2tetris は「コンピュータ・アーキテクチャ」のカテゴリの入門書であるが、他方のこちらは「分散システム」の項目に分類されている。

 nand2tetris は読者が手を動かしながら学ぶことを要求していたのに対して、こちらは個別の技術の使い方に深入りすることはなく、一般性の高い理論書として読みやすい構成になっているとの評判である。なにより原著の出版は2017年であり、いわゆる正統派のテキストにしてはまだまだ若く、トピックとしても老いていない。古びていないどころか、たかだか出版後3年にして国内外で高く評価されているのは、なににも増してこのテキストの有効性をあかし立てている。

 さて、内容について、目次をみるとおよその関心内容がわかる。おおよそ三部に大別されており、それぞれが注目するのは次のような項目群である。

「分散システム」をトピックとしつつ、「マイクロサービス」という語句がフィーチャーされていないのが秀逸であるとおもう。実際、上に並べたヘッドラインの文言は、古典的で骨太な概念を中心に肉付けされたものという印象を与え、賞味期限の早いバズワードには最初から目もくれないスタンスが気に入った。

 序説から少しだけ抜粋する。

CPU clock speeds are barely increasing, but multi-core processors are standard, and networks are getting faster. This means parallelism is only going to increase. (xiii)

これに関連してもう一箇所。

We call an application data-intensive if data is its primary challenge--the quality of data, the complexity of data, or the speed at which it is changing--as opposed to compute-intensive, where CPU cycles are the bottleneck. (xiii-xiv)

 システムの価値はデータに宿るということ、これは言われてみれば当たり前の話であるが、真理としてひろく一般に浸透しているかというと怪しいところがある。僕自身、データは大事であると心がけたり、チームに対して主張することはあっても、それはどちらかというと直感的で、理論的支援を持たないアイデア(要するに「データが壊れると後始末でひどい目をみる」という経験則)に過ぎなかった。同じ主張をするに及んでも、背景の文脈をきちんと整理できているかどうかが鍵になる。その意味でも、一冊の書籍の議論に沿いながら、知識を体系立てて入力できる機会に興奮が高まっている。

「分散システム」というと、なんだか Google の入社試験で設計させられるような、厳かで近寄りがたい構築物のような響きがある。しかし複数台構成で冗長化した単純なウェブシステムもまた、ひとつの分散システムにほかならない。つまるところ、分散システムとはいまや空気のように当たり前のアーキテクチャであり、ある意味では誰にでもできるが、正しく理解して運用するには正しい知識が必要であることに変わりはない。

 サーバーレスであるとかマイクロサービスというようなバズワードはいったん傍において、そうした個々の技術や概念を要請することになった中心的な議論はなんであるのかを学ぶこと、そしていわゆるトレンド技術がそれらの問題をどういう形式において解決できるかということ。そのあたりをより具体性をもって眺められる目を獲得するつもりで、年末年始はこの本に向き合おうとおもう。