OpenStackはマイクロサービスアーキテクチャで作られている
ソフトウェア開発者の皆さんも、OpenStackという名前を一度は聞いたことがあると思います。OpenStackは、クラウドコンピューティングサービスを提供する基盤(いわゆるクラウド)を構築するためのソフトウェア群です。ソフトウェアという側面から見たときのOpenStackの特徴として、マイクロサービスアーキテクチャ(以下、MSA)と呼ばれるソフトウェアアーキテクチャで作られていることがあります。
MSAは役割ごとに小さく分割したソフトウェアが互いに通信することで全体として動作する、というアーキテクチャです。OpenStackはまさにこの「ソフトウェアが互いに通信すること」で、クラウドコンピューティングサービスという複雑なシステムをシンプルでかつ、可用性も高めた形で提供することに成功しています。
本連載では、MSAという切り口からOpenStackの動作と仕組みを解説していきます。今回は、OpenStackの認証およびエンドポイント管理をつかさどるKeystoneというソフトウェアを紹介します。
OpenStackの構造
最初に、OpenStackとKeystoneがどのような機能を持っているのか、またMSAとしてどのような特徴を持っているのかを紹介します。まずはOpenStackからです。
繰り返しになりますが、OpenStackはクラウドコンピューティングサービス基盤を構築するためのソフトウェア群です。そこに含まれるソフトウェア1つ1つを、OpenStackではサービスと呼びます。つまり、OpenStackではサービスを組み合わせてクラウドコンピューティングサービスを構築します。また、サービス1つ1つが、MSAを構成するマイクロサービスとなっています。
本稿執筆時点では、OpenStackには19のサービスがあります。そのうち、頻繁に登場するのは次表の6つで、OpenStackではこれらをコアサービスと呼びます。
Keystone | OpenStackの認証とエンドポイントの管理をつかさどるサービス。今回解説します |
---|---|
Nova | 仮想マシンを作成したり終了したりするためのサービス |
Glance | NOVAによって作られる仮想マシンの基となるイメージを扱うサービス |
Cinder | 仮想マシンに仮想外部ストレージを管理するサービス |
Neutron | ルータやネットワークインタフェースなど、ネットワーク全般を処理するためのサービス |
Swift | バックアップなど、各種オブジェクトを格納するストレージとして利用できるサービス |
コアサービスは全て、REST APIで外部からのアクセスポイントを提供しています。サービス同士は相互にREST APIにアクセスすることにより協調して動作します。コアサービス同士の関係をまとめると次図のようになります。
コアサービスは必要なものだけを選んで使います。全部を使う必要はありません。例えば、用途から考えて仮想外部ストレージの提供が不要なのであれば、Cinderを使わなくても構いません。
また、サービスのどれかに障害が発生して停止したとしても、他のサービスの動作には影響を及ぼしません。例えば、Glanceが稼動しているサーバーが何らかの障害で停止したとしても、動作しないのはGlanceの機能だけです。
あるサービスが停止しても他のサービスに影響を及ぼさないというのは、「サービスのバージョンアップや追加が容易」であることも意味します。全機能が止まるわけではないため、バージョンアップ時や追加時のユーザーへの影響が最小限に抑えられるからです。モノリシックなソフトウェアでは、いったんサービス全体を停止し、バージョンアップやサービス追加を行い、それからサービスを再開する必要があります。
こうした「必要なサービスだけを選んで使える」「あるサービスが障害で停止しても他のサービスに影響を及ぼさない」という特徴は、OpenStackがMSAで作られているからこそです。システム管理者は作業の煩雑さから解放され、障害発生時には原因を容易に特定でき、停止したサービスの回復に集中できます。