目次
■クラウド&インフラストラクチャ
2019.09.05 2024.02.20 約3分
本連載では、主にインターネット基盤技術、または、インターネットのインフラ技術と呼ばれる領域に関して、Webホスティングサービスの歴史やWebサーバの設計と実装を中心に執筆していきます。 第5回では、前回同様、高集積マルチテナント環境において非常に重要となるリソース制御や研究動向についての研究動向を紹介します。
連載一覧:まつもとりーのインフラ入門
前回も述べたように、限られたコンピュータリソースで複数のホストをできるだけ高集積に管理・運用し、全体のコストを低減しながら安定稼働させるためには、特定のホストに対するWebアクセスがサーバ全体のリソースを占有しないように、ホスト単位で公平にリソースを配分するためのリソース分離手法が必要になります。
しかし、CPUやDisk I/O等のコンピュータリソースは共有のため、特定ホストにアクセスが集中したり、多くのリソースを消費するアプリケーションへのたった一つのリクエストによりリソースが占有されたりすることで、他のホストに影響を与える問題がありました。 そのような課題を解決するために、リソース分離手法がこれまで複数提案されてきました。
Linuxには、cgroupと呼ばれるプロセスのリソース管理技術があります。下記の論文では、cgroupがどの程度の制御が可能かを試しています。
cgroupはプロセスのリソース制御を様々な観点から制御可能で、例えば、cgroupの優先順位機能を使うことで、CPUの使用率やI/Oの帯域を制御できます。そこで、松本らは、リクエスト処理時に、cgroupを利用して、管理者が記述した内容、この手法ではRubyスクリプトに従って仮想的に分離されたリソース領域を作成し、サーバプロセスをそのリソース領域内で動作させることで、リクエスト単位で任意のリソース分離が可能なWebサーバのリソース分離手法を提案しています。
この手法では、クライアントからサーバプロセスに対してリクエスト処理が来ると、そのリクエストの処理が制御対象であった場合、サーバプロセス上で動作しているリソースコントローラが、リソース分離ルールからリソースに関する設定値を取得します。そして、そのリソース設定値を元に確保された仮想リソース領域がなければ、新規で領域を作成します。そのプロセス単位での仮想リソース領域にcgroupを使用しています。
例えば、任意のリクエストに対し、CPU使用率は最大10%、ディスクへの書き込みは最大5MB/secに制限したいとします。その場合は、制御ルールを設定ファイル、すなわちRubyスクリプトとして記述します。記述後、新しいリクエストを受けた際に、リソースコントローラは制御ルールを解釈し、ルール通りにリソース領域を生成します。これは、つまり、WebサーバがRubyスクリプトを実行することに他ならないのです。
そして、サーバプロセスを、作成したリソース領域に割り当てた後、リクエストをそのリソース範囲内で処理します。処理後は、生成したレスポンスをクライアントに返し、リソース領域への割り当てを解除してから、次のリクエスト処理に備えます。
このようなアーキテクチャを取ることにより、リクエストに含まれる情報、例えば、ホスト名やHTTPメソッド、ユーザ情報等を条件に、管理者がHTTPリクエスト単位で柔軟にリソース分離を行えます。
リクエスト単位で仮想的にリソースを制御をする理由としては、やはり、高集積に収容した仮想ホストを、それよりも十分に少ないプロセスでリソースを共有しながらリクエストを代わる代わる処理するからです。
あるタイミングで来たリクエストとその次に同じプロセスに来たリクエストは、別のホストに対するリクエストであるため、リクエスト単位でリソースを制御した上で、制御後は次のリクエストに備えて元の状態に戻さなければなりません。
高集積にホストが収容されたWebサーバにおいて、高負荷時にどれぐらいのリソース使用量をどのホストに割り当てるのが適切なのかということを迅速に検討しなければいけません。
また、負荷原因の状況に応じて、ホストに対する同時接続数制限と、その他の制限手法の組み合わせをどう判定するかについて、刻々と変化しログの量も肥大化していく状況下で人力による調査に頼って判断することは高コストです。
適切な制限項目や一定のルールに従った制限値を、いかにシステム管理者の運用コストをかけずに調査し制限するかという、ホスト単位で精細なリソース分離を行う際の課題があります。
松本らは、Webサーバのコンピュータリソースの特徴量を時系列データとして抽出してリクエスト毎に変化点検出を行い、原因となるホストやプログラムの変化らしさの重み付けを行った上で、サーバ全体のリソース逼迫時には、重み付けリストの結果に基いて自律的に原因となるリクエストを特定し分離するアーキテクチャを提案しています。
時系列データには、ホストおよびプログラム単位でのレスポンスタイムのデータとその時点の同時接続数を使用します。この時系列データに対して、変化の傾向を表すスコアを計算し、リクエストのあったホスト名とプログラム名に基づいて、計測したスコアからリソースの傾向変化に寄与したホストおよびプログラムの重み付けリストを更新していきます。
そして、サーバ全体が高負荷状態になった場合に、重み付けリストに従って原因の可能性が高いリクエストのみを、リソース使用量が限定された隔離環境内で処理するようにします。これらを、Webサーバのレスポンス生成処理の過程に組み込むことにより、Webサーバはサーバ管理者の代わりに自律的に原因を解析し、必要な時にその原因に対処できるようになります。
この手法では、変化点検出のようなデータマイニングの観点からの統計的手法を活用している点が特徴です。一方で、この手法で発見出来た問題が、これまでの手法で対応できたことと比較してどれぐらい優れているのか、また、この手法は従来の手法では見つけることのできなかった問題を発見できるのかなど、統計的手法を利用することによる評価の難しさも浮き彫りになりました。
この観点では、深層学習や機械学習を使った手法でも同様の難しさに直面するため、このような手法の有効性をいかに評価するかといった点が、このようなインターネットと運用技術に応用する場合のポイントになるでしょう。
今回は高集積マルチテナントアーキテクチャを採用したWebサーバにおいて、これまで述べてきた基礎概念から少し踏み込んで、マルチテナント環境において非常に重要となるリソース制御や研究動向について紹介しました。いよいよ次回からは、Webサーバの高集積マルチテナントアーキテクチャにおける権限分離、すなわち、セキュリティ技術についてじっくり紹介していきます。
本連載は下記の私が執筆した論文を参考に、新しい読者へ広めるために平易な形へと再編集しています。
・ 松本 亮介, 栗林 健太郎, 岡部 寿男, Webサーバの高集積マルチテナントアーキテクチャと運用技術, 電子情報通信学会論文誌B, Vol.J101-B, No.1, pp.16-30, Jan 2018.
・ copyright©2018 IEICE
(記事:松本 亮介)