JBoss AS 7はなぜこんなに高速なのですか?

翻訳 オリジナル記事http://in.relation.to/Bloggers/WhyIsJBossAS7SoFast この記事は近日中に公開されますが、質問はまだ関連しています。



要するに、答えは次のとおりです。JBossAS 7の設計全体は、ムーアの法則(より高いプロセッサ周波数のハードウェアを待つ)ではなく、エムデールの法則(タスクの効率的な並列化)に基づいているためです。 現在、デスクトップコンピューター、ラップトップ、サーバーを装備したほとんどすべてのプロセッサーには少なくとも2つのコアがあり、その傾向は急速に拡大しています。 プロセッサの周波数を競う日々はすでに過去のものです。 そのため、現在および将来のハードウェアからすべてを絞り出すために、プログラムは適応する必要があります。



このような重大な進化を達成するために、JBoss ASは積極的な変革を遂げました。 AS 7では、ゼロから始めて、まったく新しい高性能で適切に管理されたカーネルアーキテクチャをゼロから構築しました。 本当に素晴らしいエンジニアリング作業の助けを借りて、1年以上にわたってGithubの小さなプロトタイプからJava EEコンテナーWebプロファイルの本格的な実装に移行することができました(この間にAS 6もリリースしたという事実は言うまでもありませんJBossユーザーはEE6テクノロジーに早期にアクセスできます)。



説明する前に、少しインデントを許可します。 アプリケーションサーバーの主なタスクは、サービスを管理することです。 現代のアプリケーションのほとんどすべてのコンポーネントには一定のライフサイクルがあります。つまり、ある時点でコンポーネントを起動し、後で停止する必要があります。 ライフサイクルを持つものはすべて、サービスとしてマークします。 サービスのもう1つの重要な特性は、通常、ライフサイクルに影響を与える相互接続があることです。 たとえば、サーブレットの動作はWebサーバーに依存していると言えます。 さらに、サーブレットが他のリソース(データベースやEJBへの接続など)を使用している場合、その可用性にも依存すると想定できます。 アプリケーションサーバーがアプリケーションを起動またはデプロイするとき、さまざまなサービスが正しい順序で起動することを確認する必要があります。 さらに、これらのサービスのいずれかが何らかの形で停止した場合、最初にサービスに依存するすべてを(実際には逆の順序で)停止する必要があります。 これは、1つのスレッドで実行される場合、かなり単純なタスクです。



一方、JBoss AS 7はすべてのサービスを並行して起動およびデプロイします。 この困難なタスクは、新しいモジュラーサービスコンテナーであるJBoss Modular Service Containerによって対処されています。 MSCは基本的に高度な並列マシンです。 彼はすべてのサービス間の依存関係をオンザフライで分析し、相互接続の要件を観察しながら、できるだけ多くのサービスを同時に起動しようとします。 これにより、クイックスタートだけでなく、複数のアプリケーションを並行して展開することができます。



並列サービスに加えて、JBoss AS 7はモジュール性と並列クラスローディングも備えています。 クラスを適切なモジュールに分解することにより、アプリケーションサーバーはクラスへのアクセスを自然に最適化し、このクラスが実際にある場所のみを検索できます。 モジュール間の可視性は意図的に制限されているため、検索操作は安価です。 JBossモジュールの場合、モジュールの解決とクラス検索はO(1)で行われます。 これらはすべて、クラスの構造の分析に不可欠な部分を含め、非常に高いレベルの並列処理で機能します。



展開処理も非常に効果的です。 最も重要な最適化は、クラスデータの一部をスキャンすることにより、注釈情報にすばやくインデックスを付けることです。 さらに効率を高めるために、迅速なロード用に設計されたコンパクトなインデックスをモジュールで事前生成できます。 また、別のスキャン最適化では、クラス構造データを慎重にキャッシュして再利用します。



結論として、私が強調したい最後の最適化は、起動時と展開時のCPUとメモリの負荷について、私たちは非常に厳格であったことです。 これはすべて、設計段階で適切なソリューションを選択することから得られます。 このようなソリューションの興味深い例は、JAXB(および他のイントロスペクションベースのリンカー[1])を使用して、一度だけ読み取られる構成を解析することを一時停止することです。 構成の分析に直接進む前に、JAXBはこの分析を行う方法を見つけるために、同じ時間を費やしています。 そして、それはどこにでもあります。 実際、AS 5および6でのXMLの解析のみが、AS 7全体を上げるよりも時間がかかりました。



これにより、このようなパフォーマンスの向上を達成した方法と、AS 7のいくつかの点が以前のバージョンと非常に異なる理由をより明確に把握できればと思います。 ただし、これはほんの始まりにすぎません。 次のブログ投稿をお待ちください。AS7の将来の開発計画についてお話します。



よろしくお願いします!



[1]オリジナルのイントロスペクション駆動型バインダーでは、許容できる翻訳が見つかりませんでした。これは、最初にドキュメントのXMLSchemaを解析してデータ型を理解し、その後デシリアライズを開始するXMLデシリアライザーを意味すると思います。



All Articles