「うるさい隣人」は困りものですが、勝手に押しかけて居座る隣人は、もっとやっかいです。いちばんたちが悪いのは、留守中にあがり込んで冷蔵庫の中をあさったうえにボトルの水を直接飲んで、そのまま戻す隣人です!いや失礼、学生時代のアパートを思い出して、つい話が具体的になってしまいました。
そんなことを思い出した理由は、クラウド環境のNoisy Neighbor(うるさい隣人)問題について考えたからです。ノイジーネイバーとは、リソースを占有して他のワークロードのパフォーマンスを阻害するワークロードのことです。現象としては、「うるさい隣人」というよりも、むしろ「ひとんちに勝手に上がり込んで飲み食いして仕事の邪魔をする隣人」ですよね。まさに人のリソースを使って、パフォーマンスを阻害しているのだから。でも、長屋じゃないんだから、そんな隣人は滅多にいなくて、英語ではNoisy Neighborのほうが、誰もが共感する「迷惑な隣人」の典型なのでしょう。
話を本題に戻すと、IT環境のNoisy Neighborはマルチテナントの仮想環境で生じる問題です。物理環境でも、同じ問題を引き起こすワークロードは存在しますが、専用リソースを無駄遣いするだけで、他のワークロードのリソースを横取りしないので、まぁ自業自得と言ってしまえばそれまでです。
一方、仮想環境ではリソースを共有するので、競合が生じやすく、Noisy Neighbor問題は絶対に見過ごせません。では、Noisy Neighbor問題はどのように対処すべきでしょうか。取るべき手段はいろいろ考えられます。
現実の世界では、もし隣人がうるさかったら、できることは大まかに言えば次の3通りです。
- 直接、苦情を言う。
- 大家もしくは管理組合を通す。
- 引っ越す。
3番目の「引っ越す」は最後の手段であり、クラウド環境では「プロバイダを変える」に相当しますが、現実の世界でも、引っ越せば引っ越した先にも似たり寄ったりの問題があるので、あまりおすすめできません。なので、3は除外し、1と2に絞って、具体的に見ていきましょう。
1. 直接、苦情を言う = 隣人の生活態度を正す
直接、話して、隣人の生活態度を修正できるのなら、それに越したことはありません。仮想環境のワークロードなら、真っ先にすべきはコードを見直すことです。リソースの無題遣いはメモリリークの可能性があるし、I/Oが最適化されていない可能性も大です。これらを防止するには、開発プロセスにストレステストを組み込んで、特に負荷がかかる状態でのワークロードの動作とリソースの使用状況を確認しておくことが大事です。
次に、すべきはリソースを制限することです。すなわち、ワークロードが実行される際にプラットフォームがどう反応すべきかを定義します。VM(仮想マシン)にvCPU(仮想CPU)を適切に割り当てるなど、ワークロードが使用できるプロセッサやストレージのリソースをあらかじめ定義しておくことが重要です。
ワークロードに優先順位を設定することも忘れないでください。業務に直結する重要なワークロードのパフォーマンスが、あまり重要でないワークロードに阻害されるようなことは、絶対に避けなければなりません。
手動介入を可能にすることも重要です。モニタリングシステムを導入して、問題をリアルタイムで検知できるようにすることはもちろん、システム管理者が臨時でワークロードを停止させられるようなイベント設定も欠かせません。なお、仮想環境のモニタリングは不可欠ですが、アパートで隣人の部屋に密かに監視カメラを設置するのはやめましょう。逆に訴えられます。
以上の対策は、コロケーションのマルチテナント環境などで、ワークロード全体にある程度管理の目が行き届く場合に限られます。パブリッククラウド環境では、「うるさい隣人」は赤の他人で直接干渉できないケースがほとんどなので、対応策も違ってきます。
2. 大家もしくは管理組合を通す = クラウド契約を正しく理解して運用する
隣人に直接干渉できない場合は大家さんに相談するのがベストです。マンションなど、大規模な共同住宅では、きちんとした規定があって、問題の処理はすでに形式化されているはずです。同様に、大規模パブリッククラウドでは、ワークロードのコンピューティングおよびストレージ要件を自動管理できるようになっていて、Noisy Neighbor問題は起きにくいことが期待できます。
とは言え、すべて契約次第です。どのような契約で使用しているかによって、パブリッククラウドでのパフォーマンスが制限される場合もあります。
まず、パブリッククラウドの契約を理解することが大前提です。一般的にリソースは使い放題というわけではないし、うるさいのは隣人ではなく、じぶんちだった!なんてこともあり得ます。その場合に、プロバイダは自分のワークロードをどう処理する規定になっているのかを把握しておく必要があります。リソース超過時の費用への影響もあらかじめ理解しておかなければなりません。
クラウドプラットフォーム全体のパフォーマンスもある程度は把握できるようにしておきたいところです。隣人のワークロードは直接可視化できないまでも、全体的なパフォーマンスのデータを揃えて、プロバイダに問い合わせる材料にできます。ここでも重要になるのはモニタリングシステムです。
最後に、スケーラビリティを確保することも忘れないでください。クラウドだから当然スケーラブルだと思っていたら、リソースの割り当てが初期設定で固定されていてびっくり!なんて場合もあります。リソースのプロビジョニングが柔軟で動的に対応してくれるサービスを選択しましょう。
クラウド環境の「うるさい隣人」は、現実社会の「うるさい隣人」よりも、ずっと迷惑な、ビジネスに支障をきたすクリティカルな問題なので、絶対に放っておくことはできません。しかし、モニタリングなど、適切なツールを導入して、きちんとデータを集めさえすれば、クラウド環境の「うるさい隣人」は現実社会の隣人よりもはるかに御しやすく、管理が簡単です。面倒がらずに丁寧に対応しましょう。