ncore テクノロジー Web アプリケーションデリバリー性能の飛躍的向上 www.citrix.com
はじめに Web アプリケーションの発展と普及の勢いは弱まる兆しがありません 弱まるどころか 加速し続けています これは これまでの ERP CRM Web 2.0 などの Web ベースアプリケーションが提供してきたメリットを考えると 不思議なことではありません Web アプリケーションの爆発的拡大の一方で コストパフォーマンスの低下も見られます 無数の開発手法およびフレームワーク (Ajax SOA Comet Rails など ) と 従来の Web サービスや JSON の使用の拡大により ネットワークにはこれまで以上に高いパフォーマンスが求められ 使用されるサーバーサイクルとネットワーク帯域幅が急速に増加しています このようなアプリケーションの進化に対応するには ロードバランサーとアプリケーションデリバリーコントローラ (ADC) のパフォーマンスおよびキャパシティを引き上げる必要があります しかし 必要とされるパフォーマンスは もはやインテルや AMD の最新プロセッサの導入といった単純な手段のみでは解決できなくなっています プロセッサ単体で向上できるパフォーマンス向上には 限りがあるのが現状です 従来のプロセッサとは異なり 今後のパフォーマンス向上はすべて 1 つのプロセッサパッケージに複数の処理機構が搭載された マルチコアプロセッサ と呼ばれるアーキテクチャの革新によって実現されることになるでしょう たとえば 従来のインテル Pentium 4 は同時に 1 つの命令しか処理できませんでしたが 4 コアのインテル Core 2 Quad であれば 4 つの命令を並行して処理することが可能です アプリケーションとソフトウェアにおいては一般に 単純にこれら新型マルチコアプロセッサを使用するだけで夢のようにパフォーマンスが向上するというものではありません 別の言い方をするなら 3.33 GHz で動作するクアッド (4) コアと 13.32 GHz で動作するプロセッサ 1 基を同じに考えることはできないということです シングルコアの壁を越える マルチコアおよびマルチプロセッサの環境で高いパフォーマンスを達成するには 負荷の効率的な分散 プロセッサ間のリソース共有 並列処理ができない重要機能の正確な管理など 多くの技術的課題を克服する必要があります こうした課題すべてに共通する要素が 同期 です 同期は 高速なネットワーク処理の障害となっています 潜在的な衝突を排除し 正しい計算結果を保証するためには 処理の依存関係を注意深く吟味する必要があり これがすべての処理速度の低下を引き起こします 正確な結果を得るための 同期 であるにもかかわらず 皮肉にも同期の設計自体が 複雑性を増大させます 複雑性が増大すればするほど ミスが発生する可能性が高くなります 同期の影響は マルチスレッドアプリケーションを見るとわかります マルチスレッドアプリケーションでは タスクが複数の小さなプログラム ( スレッド ) に分割され それらが並行して実行されます マルチスレッドアプリケーションの単純な実装では パフォーマンスは大幅に向上します しかし アプリケーションの複雑性とスレッド数が増すにつれて パフォーマンス曲線はすぐに頭打ちになります パフォーマンス低下の原因は ソフトウェアコンポーネント間でのやり取りが増加し より多くの同期処理が必要とされるために 結果的にこれらの同期に要する時間がマルチスレッドの利点を打ち消してしまうことにあります わかりやすい解決策は 同期を必要とする処理を排除することですが これは口で言うほど簡単なことではありません 同期を排除するには ソフトウェアの完全な再設計と大規模な事前計画が必要になります また ハードウェア ソフトウェア システム間のやり取りを深く理解する必要があります 2
ncore テクノロジー Citrix NetScaler ncore テクノロジーは 最も厳しい Web アプリケーションへの要求にも対応可能な高パフォーマンスを マルチコアテクノロジーの効果的活用により実現する 並列処理アーキテクチャです マルチコアプロセッサを効果的に利用するシステムを構築するには (1) システムでどのようにすべてのコアを活用するか (2) プロセッサ間同期処理の必要性をシステムからどのように排除するか という 2 つの課題を検討する必要があります この 2 つは相互依存の関係にあります プロセッサ間の同期の必要性が排除されれば 各プロセッサは可能な限り最大のパフォーマンスを実現することに処理を集中できます これがどのように実現されるかを理解するためには まず既存の NetScaler パケットエンジンの主な特徴を理解する必要があります NetScaler パケットエンジン パケットエンジンの目的は ネットワークからパケットを取得し 大量の TCP/IP の処理 高速化 タスクの最適化を実行し セキュリティポリシーを適用することです パケットエンジンは パケットの 1 つのグループの処理を終了すると 応答をネットワークに戻し 新しいパケットを取得して処理します NetScaler パケットエンジンの効率性では パケットをマイクロ秒単位で処理することができます NetScaler の超低遅延パケットエンジンは Web アプリケーションデリバリーとユーザー体験を最適化します パケット処理の一連のステージを慎重に検討して設計されたこのパケットエンジンにより 同期処理が不要になっています これにより 各プロセッサコア上で実行されるそれぞれのパケットエンジンにおいて ギガビット単位のスループット性能が実現できます 一般的な Linux ベース製品と比較した場合 NetScaler パケットエンジンの効率性の効果が最も確認できます 通常の Linux TCP スタックは 複数の層の間を移動するときにパケットを 1 つずつキューに追加したり キューから取り出したりする必要があります アプリケーションがデータを受信するまでに 各層で大量の同期オーバーヘッドが発生します いくつかの Linux ベース製品で使われる追加のスイッチング層と ASIC では 層間でのパケットの入れ替えのために 発生する遅延が増幅します NetScaler プラットフォームを改善し 同期処理を不要にし 非常に優れた効率性を保ちながらパケットエンジンを複数のプロセッサコアに拡張することが可能となりました 何も共有しない 設計 パフォーマンスの拡張においてよく課題となるのは 共有 です データを複数のコンポーネントで共有する場合 前述の 同期 が必要になるため すぐにパフォーマンスが問題となります しかし 何も共有しなければ 次のような利点が得られます 1. 同期によるオーバーヘッドが発生しない 2. 複雑性が大幅に軽減され 安定性が向上する 3. 1 つのコンポーネントが別のコンポーネントに影響を与えることがないため 障害を適切に処理しやすい 3
NetScaler パケットエンジンの主な特徴を活用して ncore アーキテクチャは 何も共有しない 設計により開発されました 図 1: 何も共有しない 設計 何も共有しない 設計の仕組み ncore の各パケットエンジンは 何も共有しない アーキテクチャです 各パケットエンジンは NetScaler のアプリケーション最適化と高速化のためのすべての機能を完全自立型の実装として備え 個別のメモリ空間で実行されます 各パケットエンジンは独立して必要となるすべての機能を実行できるので 他のパケットエンジンの動作に影響を受けることなく Web アプリケーショントランザクションの始めから終わりまでの全工程を処理することができます パケットエンジン間の機能に依存関係がないので同期の問題は発生しません パケットエンジンがリソース競合のために相互に待機することもありません このため NetScaler は非常に高いスループットと最小限の待ち時間で処理を実現できます 各パケットエンジンがそれぞれの CPU コア上で実行される場合 その状態は 1) 処理するパケットを検索している 2) パケットを実際に処理している という 2 つのうちのいずれかになります 各パケットエンジンは ハードウェアベースのパケットキューでパケットを検索します 何も共有しない の原則に従い すべてのパケットエンジンは独自のキューを持ちます ( これは他のコアと共有されません ) ハードウェア実装が完全に対称であるため 出力パケットもプロセッサごとの個別のキューに送られます 1 つのパケットエンジンは 1 つのコア全体を最大限に利用することができるので コアとパケットエンジンの間に 1 対 1 のマッピングを作成して ハードウェアが提供するすべての利用可能なサイクルが使用されるようにします これにより システムへのコアの追加に比例して直線的にパフォーマンスが向上し プラットフォームの将来的な拡張性が増大します パケットキュー間でフローを分散する方法ネットワークトラフィックを複数のコアに分散する方法はいくつかあります 主に使用される方法は 次の 3 つです 1. 機能の並列化 2. ネットワークインターフェイスのプロセッサへのマッピング 3. 個々のフローの分散 ADC での機能の並列化は 通常 複数のコアにタスクを分割することで実現されます このため 特定のコアに特定の機能が割り当てられることになります たとえば コア 1 はネットワークトラフィックの管理に特化され コア 2 は TCP/IP の処理 コア 3 は第 7 層 (HTTP など ) の処理 といった場合が考えられます 一見すると これは処理の急増を機能ごとに分離できるため 効果的と言えます しかし 実際にはこのようなアーキテクチャは使用率の低下につながります たとえば アプリケーションが第 7 層の処理を多く必要とし SSL の処理を必要としていない場合 使われていない CPU リソースを SSL から第 7 層に割り当てることはできません 4
図 2: 機能の並列化 図 3: ネットワークインターフェイスのプロセッサへのマッピング ネットワークインターフェイスのプロセッサへのマッピングは 物理的ポートを特定のハードウェアに固定する旧来のネットワークから生まれた方法です 新しいバージョンでは この代わりに IP アドレスを特定のコアにマッピングします しかし機能の並列化と同様に これは不均衡な負荷分散につながり 1 つのアプリケーションが 1 つのコアのキャパシティを最大限に使用できても 同じシステム内の他のアイドル状態のコアを活用できないという状態になります 機能の並列化と ネットワークインターフェイスのプロセッサへのマッピングを評価した結果から ncore テクノロジーの方法として個々のフロー分散が選択されました この方法は 最も精度の細かい負荷共有メカニズムであり 1 つのパケットエンジンによって製品のすべての機能が実行できるという点を最大限に活用します この結果 トラフィック負荷は真に均等に分散され 1 つのアプリケーションまたは機能でキャパシティが不足し 他のコアのキャパシティが空いているという状況が発生しません 5
図 4: 個々のフローの分散 個々のフローを非常に高速で分散するために対称フロー分散機能が使用されます この特別なハードウェアによって 1 つのネットワークインターフェイスに到着したパケットを取得し どのパケットエンジンの入力キューが特定のネットワークトラフィックを受け取るかを高速に決定できます 決定は TCP/IP ヘッダー情報に基づいているため この分散機能は 確実に特定のフローのパケットが常に同じパケットエンジンへ送られるようにします 図 5: コアへの入力キュー フロー分散機能が使用するアルゴリズムによって すべてのパケットエンジン間の均等な分散が保証され すべてのパケットエンジンによるシステム全体のワークロードへのサポートが確保されます ncore アーキテクチャでは 同期オーバーヘッドやネットワークトラフィックの不均衡な分散のために貴重なプロセッサリソースが無駄になることはありません 6
ncore の管理 ADC のリソース管理は 従来からの難しい課題でした 処理能力が乏しい場合は 利用可能なキャパシティをすべてパケットエンジンに割り当てることが望まれます この場合 SNMP 通信の提供や管理コンソールから 1 つ以上のインターフェイスへのアクセスなど 必須管理機能のサポートのためのわずかなキャパシティが残されます NetScaler は管理機能用に常にキャパシティを予約しています このため トラフィックの負荷が大きい状態でも管理者は効果的にシステムを管理できます 図 6: 予備として拡大可能な専用のコアが管理用に割り当てられる ncore アーキテクチャは処理キャパシティの性質を根本的に変えるものであるため かつて乏しいとされていたキャパシティは 現在では十分存在していることになります このため 1 つのコア全体とその個別メモリスペースを管理機能専用とするアーキテクチャが決定されました これにより さらに一段階上の柔軟性が管理層に提供され 将来のイノベーションと開発のための可能性が生まれます またこの重要なポイントは 膨大なトラフィックを扱う状況においても 確実に機能する管理インターフェイスが管理者に提供されることです ncore の重要性 ncore テクノロジーがもたらすパフォーマンスと拡張性の利点は 現在および将来の Web アプリケーションデリバリー要件にとって重要な意味を持ちます ncore テクノロジーが提供する機能は以下のとおりです Web 2.0 およびリッチインターネットアプリケーションパフォーマンスの向上 急激なトラフィック増加に対応する機能の強化 より多くのユーザーとアプリケーションをサポートするためのキャパシティの拡大 第 4 層から第 7 層までのロードバランシング キャッシュ 広域負荷分散 (GSLB) 圧縮 SSL VPN SSL オフロード アプリケーションセキュリティ パフォーマンスモニタリングなどを始めとする Web アプリケーションのデリバリー要件を満たす一体型プラットフォーム たとえば CPU 処理が多くなりがちな複雑な第 7 層ワークロードでは ncore テクノロジーによって最大 6 倍の向上が可能です 多数の同時ユーザーをサポートする必要のあるアプリケーションでは 同時接続について 7 倍のパフォーマンス向上が可能です 7
まとめ ncore テクノロジーは 最も厳しい Web アプリケーションへの要求にも対応できるようにマルチコアテクノロジーを効果的に活用できるように拡張された高パフォーマンスの並列処理アーキテクチャです ncore の 何も共有しない 設計による更なる革新によって パケットエンジン間のすべての同期オーバーヘッドを排除し マルチコアテクノロジーによるリニアな性能向上が可能になりました ncore アーキテクチャのリニアな性能スケーラビリティは 非常に高いパフォーマンスを提供するだけでなく 将来の Web アプリケーションデリバリーの課題を解決する革新的なソリューションの可能性を生み出します メモリとプロセッサのキャパシティが豊富であれば Web テクノロジーについて新開発機能は根本的なアーキテクチャを変更することなく 最適化 性能向上 拡張できます ncore テクノロジーは 将来的なキャパシティの増加による新機能の追加や 継続的な性能向上が期待でき さらに多くのメリットを提供していきます 2010 Citrix Systems, Inc. All rights reserved.citrix NetScaler および ncore は Citrix Systems, Inc. の米国あるいはその他の国における登録商標または商標です その他の社名 商品名はそれぞれの所有者の商標または登録商標です 0509/PDF