快適な交差点→安定して高速な変換システムを目指して②

通行量が適切であると、実際のラウンドアバウトでは不思議なくらい、うまく機能するようです。

[youtube=http://www.youtube.com/watch?v=LA3qv1dkAVw]

携帯コンテンツ変換のラウンドアバウトでは、大量の通信が発生しても常に安定的なサービスが出来るように不断の努力をしています。

(前回の続きです)

■安定性の確保。メモリ消費量を減らすこと。

実装のアイデアは色々ありますが、安定性を確保するため1つだけ方法を挙げるとすれば、とにかくメモリ消費を抑え込むことです。どんなシステムでもスループットの限界がありますが、メモリ消費を少しでも抑えれば、当然スループットの限界値がUPします。Apacheのようにマルチプロセス・マルチスレッドのシステムでは僅かな節約でも大きなリターンがあります。

幸いApacheにはAPRという優れたメモリ管理ライブラリがあるので、これを使うことで安全でパフォーマンスが高く、仕様の安定した標準化されたコードを書くことができています。

■安定性の確保の為に、セッションを使わないこと。

ラウンドアバウトがセッションを使わない理由はたくさんあります。その重要な理由の1つが、安定性の確保にあります。システムはどんなに優れていて単純なプログラムでも、高負荷状態ではどうしても不安定になります。これは、高負荷状態における様々な場所で生じる遅延とそのタスクキューの処理が普段は引き起こされない状態を出現させるからです。このような状態では普段は現れないメモリリークさえ起こりえます。システム構築では、高負荷状態を作り出さない低メモリ実装と、高負荷状態での強烈なストレステストの2つの方向でこの原理的な問題に対処する必要があります。

そうした中でセッションはメモリを大量に消費し、しかも無駄で使われないメモリを保持し続ける可能性があります。アクセスの度に発生し、次に使われるのか分からないまま保持されるセッションは、ミドルウェアによってシステムキャパシティの限界を作ってしまいます。セッションを使うと、大量のアクセスが発生した時にあっと言う間にメモリを消費してしまい、早々と高負荷状態を作り出してしまいます。

ラウンドアバウトはセッションを使わないとはっきりしたポリシーを持っています。マルチ画像変換という複数のHTTPに跨る機能でさえセッションを使用しません。セッションを使ったら最後、システムの安定性を必ず犠牲にすることになります。

■安定性の確保の為の、強烈なストレステストとは?

ラウンドアバウトの開発当って、実に色々なテストを繰り返していますが、一番特徴的なのがストレステストでしょう。およそ、次のようなものです。

・インターネット上から何十万と言うコンテンツを拾ってくる
・コンテンツは携帯/PCを問わず、文字コードを問わず、日本・海外を問わず、サイズを問わず取得すること
・画像とCSSも上記同様にHTMLにリンクされた形でセットで取得する
・何十~数百までの同時アクセスを、携帯端末シェアの比率に合わせたユーザーエージェントをセットする
・同時アクセス数は、数十から始まり、時間とともにアップさせていく
・画像キャッシュはテスト中に自動削除し、画像変換とIOが常に起きる様にする
・サーバーが応答不能になるまで続ける
・このテストをApacheのみと、ラウンドアバウトありで実施し、結果を比較する

このようなテストをラウンドアバウトでは日常的に続け、常に品質をチェックしています。そして、その結果、Apacheのみと、ラウンドアバウトありの結果を比較すれば、ほとんどグラフの波形は乱れず、常にApacheと連動した安定性を確保することができています。

■高い安定は消費メモリの削減によって実現し、それが高いパフォーマンスも同時にできる

「システムのパフォーマンスと安定性は表裏一体」なのは、メモリ消費に関係する話です。強烈なストレステストによって細部まで苛め抜かれた強靭なプログラムは、実は非常に高いパフォーマンスを誇ります。これが、ラウンドアバウトが「設計・実装」の両面から安定して高速な変換システムを実現しているという理由です。数々の方式とポリシーで設計することと、強烈なテストによる品質向上という実装の両面からがっちり作りこまれていることが、ラウンドアバウトを非常に高いレベルの製品としている所以です。

※ なお、このシステム性能に関する情報はいづれホワイトペーパーとして公開する予定です。

Page Top