1章信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション

インターネットはとてもうまくできているので、ほとんどの人々はそれを人工のものではなく、太平洋のような天然資源であるかのように考えている。これだけの規模の技術にこれほどエラーが少ないのはいつ以来のことだろう?

――Alan Key、“Dr Dobb's Journal”(2012)のインタビューより

今日の多くのアプリケーションは、演算指向ではなくデータ指向であり、CPUの処理能力そのものが制約条件になることはほとんどありません。通常は、データの量や複雑さ、そしてデータの変化する速度のほうが大きな問題なのです。

通常、データ指向アプリケーションは一般的に求められる機能を提供する標準的なビルディングブロックから構築されます。たとえば、多くのアプリケーションでは以下のような機能が必要になります。

  • データを保存し、後にそのアプリケーション自身、もしくは他のアプリケーションがそのデータを再度見つけられるようにする(データベース)。
  • 処理量の多い操作の結果を覚えておき、読み取りの速度を高める(キャッシュ)。
  • ユーザーがデータをキーワードで検索したり、様々な方法でフィルタリングしたりできるようにする(検索インデックス)。
  • 他のプロセスへメッセージを送り、非同期に処理をしてもらう(ストリーム処理)。
  • 蓄積された大量のデータを定期的に処理する(バッチ処理)。

あまりにわかりきったことが書かれているように感じられるなら、それは単にデータシステムという抽象化がきわめてうまくいっていて、それほど考えることなく使っているからです。アプリケーションを構築する場合、多くのエンジニアは新しいストレージエンジンをゼロから書き直そうなどという夢想はしません。これは、データベースがそのためのツールの選択肢として最上のものだからです。 ...

Get データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.