パブリッククラウドを賢く利用し、コストを抑えて性能を上げる方法
~クラウド環境では、『サーバーの追加・増強は最後の手段』という考え方~

cloud-2537658_640

パブリッククラウドではクリック一つでサーバーの追加・増強を行えるのがメリットだ。しかし、安易な追加・増強によってコストが跳ね上がってしまう場合もある。コストを抑えて性能を上げるには、どうすればよいのだろうか。

 

サーバーの追加・増強は最後の手段

企業システムをパブリッククラウドに移行する際に懸念されるのは性能問題だ。一般的に、クラウド環境では一つのサーバーを複数のユーザーと共有するため、サーバーの仮想化を行っており、その仮想化によるオーバーヘッドが性能を落としてしまう。
性能が不足した場合、簡単にサーバーを追加したり、増強したりできるのがクラウド環境のメリットであるが、安易な対応は大幅なコスト増加を招くため現実的ではない。例えば、基幹系システムのように高いシステム要件を求められるものをクラウド環境へ移行する場合、初めから最も性能の高いサービスが必要になってしまうケースもある。

クラウド事業者も性能の向上は大きな課題であると認識しており、新たなサービスを投入してきた。具体的には、「ベアメタルサーバー」と呼ばれるサービスを導入し、仮想化によるオーバーヘッドを除いた物理サーバーのクラウド提供を行う等の取り組みが見られる。しかし、これらの新サービスもコスト面で魅力があるとは言えない。

性能問題が表れやすいのは、オンプレミス環境で運用していたシステムに、極力、手を加えず、そのまま移行する考え方を採用した場合だ。オンプレミスの企業システムでは、構成を簡素化させるため、より性能の高いマシンを使う「スケールアップ」が主に使われる。一方で、クラウド環境では性能の低いマシンを多数並べて性能を向上させる「スケールアウト」に強みがあり、オンプレミスとクラウドを併用するハイブリッド型など、複雑な構成も多い。これまでスケールアップしてきた環境をそのままクラウドで使おうと思うと、想定された使い方から外れてしまうため、コスト増加の原因となってしまうのだ。

クラウド移行に伴うコスト増加を避けるには、クラウド環境に適した賢いサービスの利用が欠かせない。主観的な印象で「クラウドは遅い」と結論付けるのではなく、一つ一つのシステム要素で処理速度を計測し、定量的な評価を行い、そして、問題の切り分けを実施するのが第一歩だ。問題が特定できれば、それを改善するサービスがクラウド事業者から提供されているケースが多いので、適切な対処が取れる。

静的コンテンツはCDNへ、動的コンテンツはMQの利用

Webサーバーやアプリケーション・サーバーは性能問題が起こりやすい。外部からのアクセスが急激に増加した場合など、ボトルネックになるケースがある。まず、検討するべき問題の切り分けは、求められるコンテンツの内訳だ。サーバーでの処理が求められる動的コンテンツよりも、画像や動画といった静的コンテンツの割合が多ければ、静的コンテンツを別のサーバーに移してしまう方法がある。ファイルの配信に特化したコンテンツ・デリバリー・ネットワーク(CDN)に静的コンテンツを移せば、サーバーの負荷が軽減されるのはもとより、キャッシュの効果的な利用によってファイル配信が高速化される。Akamai、CloudFlare、Amazon CloudFrontなどが代表的なCDNだ。

動的コンテンツに対するアクセスが多い場合、アプリケーションを改修し「スケールアウト」に適した構成にする方法が考えられる。例えば、外部からの情報を収集し、加工して結果を返すシステムを考えてみよう。オンプレミスでは一つのマシンで行っていたとしても、「収集」するマシンと「加工」するマシンを別に用意し、非同期通信を行うメッセージキュー(MQ)で接続すれば、処理の平準化が実現できるだろう。

図1: コンテンツによるサーバー振り分けの例

contents

クラウド特有に存在するデータベース処理遅延の原因

データベースの書き込み・読み取りは、オンプレミスと同様にクラウド環境でも、パフォーマンス・チューニングの中心的な課題となる。ただし、クラウド環境特有の条件として、サーバーとストレージ間で通信が発生する点が挙げられる。他の通信データと混在すると、データベースへの書き込みが遅くなってしまうため、ストレージ用専用帯域の確保が必須となる。例えば、AWSであれば「EBS最適化インスタンス」の設定によってストレージ用専用帯域が確保できる。

AWSの場合、耐障害性を確保するため、物理的に異なる場所(アベイラビリティ・ゾーン)にストレージを用意し、同期させる機能がある。ディスクへの書き込みは、同期が完了するまで待たされる仕様になっており、時間のかかるゾーン間の通信が書き込み処理を遅くさせる原因になる。耐障害性とのトレードオフになるが、同じゾーンにサーバーとストレージを配置させると、性能的には向上が見られる。

ディスクが同期される仕様を考慮すると、ディスクへの書き込みは一括で行うようにするのが有利だ。SQL文における「BULK INSERT」を使用すると、大量の書き込み処理を、まとめて実行できるため、同期処理による遅延を最小限にできる。

図2: 同期処理を考慮したストレージ構成例

doukisyori

一括送信でネットワーク接続処理を最小限に抑える

パブリッククラウドを活用したシステムの場合、自社のオンプレミス環境や外部サービスと連携する構成も多く、システム間の接続に性能問題が発生するケースがある。サーバー間の通信では接続を確立するためにオーバーヘッドが生じるため、接続を頻繁に行うと、通信が遅くなってしまうからだ。システム間通信はセキュリティを高めるため「HTTPSプロトコル」で行われるが、通信処理が増えるほど、サーバーへの負荷は高まる。

オーバーヘッドを減らすため、一度確立した接続を一定期間保持する「キープアライブ」機能が有効だ。多くのクラウド事業者でサービスが提供されているが、デフォルトではサービスが無効化されている。必要に応じて、キープアライブの利用を考えても良いだろう。

HTTPS接続に時間がかかる点を考慮すると、データのやり取りを小分けにせず、一括で送受信する設計も、性能向上へ効果がある。HTTPS通信の前後で、接続確認やデータの受信完了確認など、処理待ちの時間が発生しているからだ。データをまとめて送受信すると、サーバー間の待ち時間が減る。

最後に

クラウド環境の安易なサーバー増強はコスト増加につながる。アプリケーション・サーバー、データベース、ネットワークにおいて賢くサービスを利用し、コストを抑えた性能向上を目指したい。

編集:ビジネスon IT

Pocket

コメント