Herokuを支える技術(仮)はじめに
前回のポストでHerokuを支える技術(仮)のアイデアを晒してみたら割と期待してくれている人も多かったようなので、ぼちぼち原稿を書き始めている。
まだまだ書き始めたばかりで先は長いけれども今年から大学院に通っているというのもあり、コンスタントに文章を書く訓練にもなるかなと思っている。Herokuを支える技術で書こうと思っているコンテンツは割と幅広いので、いろいろ勉強するきっかけにもなるのでいいかなと感じている。
ということで、「はじめに」の途中まではこんな感じで書いています。
はじめに
現代のITサービス運用基盤としてクラウドコンピューティングの利用が一般的になる中、アプリケーション実行環境もまた、クラウド時代に最適化されたアーキテクチャに進化しつつあります。
これまでのアプリケーション実行環境は、物理的なものであれ仮想的なものであれ「サーバー」の存在が前提とされてきました。しかし今日では、柔軟性の高いアプリケーション実行環境の展開と運用をするために「サーバー」よりも小さく軽量なアプリケーション実行環境である「コンテナ」を活用したアプリケーション実行アーキテクチャの利用が進んでいます。
本書では、コンテナを中核とするアプリケーション実行アーキテクチャを「コンテナ型アーキテクチャ」と呼ぶことにします。また、コンテナ型アーキテクチャと対比して、サーバーを構成単位とする従来のアプリケーション実行環境を「サーバー型アーキテクチャ」と呼ぶことにします。
サーバー型アーキテクチャは古くから存在し、サーバー仮想化技術の普及とともに現在では多くの情報システム、特にインターネット上で提供されるサービスのインフラストラクチャとして広く利用されています。一方コンテナ型アーキテクチャの中核になる技術も古くから存在し、データセンターなど大量のコンピュータ資源を管理運用するような現場で用いられてきました。
本書では、コンテナ型アーキテクチャをベースにしたクラウドプラットフォームサービスのうち、最もメジャーなHerokuのアーキテクチャ構成を例に挙げながら、コンテナ型のアーキテクチャ全般の設計・実装・運用上の考慮点と、Herokuにおいて、どのようなアプローチでそれを解決しているかということについて解説します。
なぜコンテナ型アーキテクチャが注目されているか
アプリケーション実行環境をコンテナ技術を利用してサーバー上の区分された区画に分割管理するという発想自体は決して真新しものではない。事実、コンテナを実現するための基本的なコンポーネントの多くは20世紀のうちに利用可能な技術として確立しており、大規模なデータセンターを運用する企業においては古くから使われている技術である。
では、昨今急速にコンテナ型アーキテクチャが注目を集め、実際に複数の商用プラットフォームサービスがコンテナ型アーキテクチャを採用しているのはなぜだろうか。大きな理由の一つに、企業や個人によるインターネットを活用したサービス提供とインターネットを背景にしたサービスの利用、消費が社会のあらゆるところにおいてあたりまえになってきたことが挙げられる。
本書の読み進め方
本書は、コンテナ型アーキテクチャの具体的な構築手続きを解説するものではなく、コンテナ型のアーキテクチャ全般の設計・実装・運用上の考慮点と、Herokuにおけるそれぞれのアプローチについて紹介することを目的にしています。各章では、個別の技術要素や具体的なソフトウェアについて、より詳しく解説しているインターネット上の情報源や書籍を紹介しているので、具体的な環境の構築手続きや設定内容などについてはそちらを参照してください。
本書は全般にわたって、Herokuの内部構造をコンテナ型アーキテクチャの軸として紹介していますが、アーキテクチャの内部構造やその設定などに関するほとんどの部分はHerokuの利用者が変更することはできません。また、Herokuの内部アーキテクチャは日々改善や試行が繰り返されて進化し続けているので、本書の執筆時点の内容が必ずしも現時点でのHerokuのアーキテクチャと厳密に一致しているわけではないことについても注意してください。
第1章 (Herokuプラットフォーム)コンテナ型アーキテクチャとは何か
本章では、次章以降で紹介するコンテナ型アーキテクチャの全体像を概観します。
コンテナ型アーキテクチャが実現するアプリケーション実行基盤の特性に軸足を置きつつ、コンテナ型アーキテクチャの土台となるサーバー仮想化技術についてもおさらいし、仮想サーバーを構成単位とするアプリケーション実行環境と、コンテナ型アーキテクチャの相違点を明らかにします。
Herokuやその他のコンテナ型アプリケーション実行基盤をすでに利用しているソフトウェアエンジニアは、利用しているコンテナ型アプリケーション実行環境がどのような利点をもたらしてくれているのか理解すると同時に、そのアーキテクチャ上の制限について納得することができるでしょう。
これまで仮想サーバーを運用した経験があるサーバー運用エンジニアや、インフラ提供型のクラウドサービスを用いて情報システム基盤設計を担当したことがあるアーキテクトの方は、本章を読むことでコンテナ型アーキテクチャによって実現される柔軟なアプリケーション実行環境の配備が、従来のサーバー型アプリケーション実行環境に比べどのような点で異なるのか明確に理解することができるでしょう。
第2章 (Herokuコンポーネント)コンテナ型アーキテクチャの構成要素
本章では、コンテナ型アーキテクチャの構成要素(コンポーネント)と、コンポーネント毎の役割を提示します。
それぞれのコンポーネントの役割を果たす具体的なソフトウェアについても簡単に紹介するが、個別のソフトウェアに関する詳細な情報は次章で解説します。コンポーネントの役割分担についてはHerokuを例にして解説するが、ユーザが独自にコンテナ型アーキテクチャを構築する場合にはそれぞれのコンポーネントは同じ役割を果たす別のソフトウェアによって代替可能です。