Webコンテナデザイン
Webコンテナの開発には、通信層の知識、プログラム言語レベルの知識など、さまざまなレベルの多くのテクノロジーが含まれます。利用可能なWebコンテナは比較的大きなシステムであり、それを明確に説明するのに長い時間がかかります。この記事は、Webコンテナの設計方法を紹介し、実装のアイデアについてのみ議論する方法を紹介することを目的としており、あまりにも多くの特定の実装を伴いません。いくつかのモジュールとコンポーネントに分割します。各コンポーネントモジュールは、さまざまな機能を担当します。次の図には、いくつかの基本的なコンポーネントがリストされ、各コンポーネントが導入されています。
受信機に接続します
主な責任は、クライアントソケット接続があるかどうかを聞き、ソケットを受信し、その後、実行のためにソケットをタスクエグゼキューター(スレッドプール)に引き渡すことです。システムの下部からソケットを継続的に読み取り、できるだけ処理を少なくしてから、スレッドプールに投げ込みます。なぜ可能な限りほとんど対処する必要性を強調するのですか?これはシステムのパフォーマンスの問題に関連しており、過度の処理はスループットに深刻な影響を与えます。通常、レシーバーは1つだけであるため(1つのスレッドがソケット受信を担当します)、各受信プロセスの長さに影響を与える可能性があります。したがって、受信者はほとんど単純な作業を行い、いくつかの状態変数、フロー制御ゲートの蓄積操作、サーバーソケットの受信操作、受信したソケットの一部のプロパティを設定し、受信したソケットをスレッドプールに配置し、例外処理を行います。処理に時間がかかる他のロジックは、ソケットの基礎となるデータの読み取り、HTTPプロトコルパケットの解析、クライアントの一部の操作への応答など、スレッドプールに引き渡されます。
接続番号コントローラー
マシンの場合、アクセス要求の合計トラフィックにはピーク期間があり、サーバーには物理的な制限があります。 Webサーバーが洗い流されないようにするには、保護および防止するためにいくつかの対策を講じる必要があります。ここのトラフィックは、ソケット接続の数を制御することでトラフィックを制御するソケット接続の数について少し説明する必要があります。効果的な方法の1つは、フロー制御を採用することです。これは、流れの入口にゲートを追加するようなものです。ゲートのサイズは、流れのサイズを決定します。最大フローに達すると、ゲートが閉じられ、アイドルチャネルが発生するまで受信を停止します。 JDKのAQSフレームワークを使用してカウンターを実装できます。
ソケット工場
さまざまな使用機会には、異なるセキュリティレベルが必要になる場合があります。たとえば、支払い関連のトランザクションの場合、情報を送信する前に暗号化する必要があります。これには、主要な交渉のプロセスも含まれますが、他の通常の場合にはパケットを暗号化する必要はありません。アプリケーションレイヤーを反映することは、HTTPとHTTPSを使用する問題です。
簡単に言えば、TLS/SSLプロトコルは、このセッションのエンティティアイデンティティの合法性を認証するために、各通信①の認証サービスを提供します。 buny暗号化サービスを提供すると、強力な暗号化メカニズムにより、通信中のメッセージが解読されないようにします。 stamper改ざんサービスを提供し、ハッシュアルゴリズムを使用してメッセージに署名し、署名の検証によって通信コンテンツが改ざんされていないことを確認します。
HTTPプロトコルはソケットに対応し、HTTPSはSSLSocketに対応します。ソケットとSSLSocketsを生成する方法は、ソケット工場に引き渡されます。
タスクDEFINER -TASK
実行するタスクを定義し、スレッドプールに実行するタスクの種類を伝えます。タスクは、主にソケットの処理とクライアントへの応答、接続カウントカウンターの減少、ソケットの閉鎖の3つのポイントに分割されます。その中で、ソケットの処理は最も重要で複雑です。基礎となるソケットバイトストリームの読み取り、HTTPプロトコルリクエストメッセージ(リクエストラインの分析、リクエストヘッダー、リクエストボディおよびその他の情報)の解析、リクエストライン分析に基づいてパスを取得して、対応するホストのWebプロジェクトのリソースを見つけ、処理結果とクライアントの出力に従ってHTTPプロトコル応答メッセージを組み立てることが含まれます。
タスクエグゼキューター
スレッドプールを最大数と最小数のスレッドプールは「タスクエグゼキューター」と呼ばれます。スレッドプールは、タスクキューを継続的に検出するためのいくつかのスレッドを起動すると見なすことができ、タスクを実行する必要があると、実行されるようになります。スレッド制限の最大および最小数、冗長性回復時間制限、スレッドの最大数が超えるときのスレッドプールによる拒否アクションなど。
メッセージの読み取り
クライアントから基礎となるオペレーティングシステムへのパケットを読み取り、バッファリングメカニズムを提供するために使用されます。メッセージをDesBufにコピーします。
メッセージ出力
Webコンテナによって処理されたパケットをオペレーティングシステムに書き込み、バッファリングメカニズムを提供するために使用されます。メッセージをバッファーを介してオペレーティングシステムにメッセージを作成します。
入力フィルター
この読み取りプロセスでは、いくつかの追加処理が望まれ、これらの追加処理は、異なる条件に応じて異なる方法で行われる場合があります。プログラムの分離と拡張機能を考慮して、フィルターが導入されます。操作をフィルタリングした後にのみ、フィルターのレイヤーを介してデスバフに到達できます。このプロセスは、処理レベルを追加するようなものです。対応する操作は、レベルを通過した後に実行され、最後に宛先データへのソースデータが完了します。
出力フィルター
入力フィルター関数に似ており、メッセージ出力時に使用されます。
メッセージパーサー
HTTPプロトコルのさまざまな部分を解析する機能を提供します。
リクエストジェネレーター
オブジェクト指向のアイデアによれば、各リクエストプロセスの要求に関連する属性とプロトコルフィールドは、要求オブジェクトに抽象化されます。リクエストライン、リクエストヘッダー、リクエスト本体の3つの部分が含まれます。処理中に必要な値は、リクエストオブジェクトから直接取得できます。サーブレット標準を実装するための利便性を提供します。
応答ジェネレーター
リクエストに対応して、応答オブジェクトジェネレーターが必要です。応答行、応答ヘッダー、応答本体の3つの部分が含まれます。処理結果の関連する値は、応答オブジェクトに直接設定できます。サーブレット標準を実装するための利便性を提供します。
アドレスマッパー
アドレスマッパーは、リクエストとリソースを要求するルーターです。要求されたアクセスは、要求クライアントへの応答のリソースを見つけるためのパスに従ってマッピングされます。
ライフサイクル
さらにモジュール化するために、コンテナ全体に多くのコンポーネントがあり、異なる瞬間に異なるイベントを必要とする場合があり、すべてのコンポーネントを統一された方法で管理するためにライフサイクルが必要になる場合があります。たとえば、すべてのコンポーネントの起動、停止、およびシャットダウンは、これらのコンポーネントのライフサイクルの管理を促進できる統一されたライフサイクルから分離されています。特定の状態で何かが起こる前後に何かをしたいですか?ライフサイクルリスナーを追加して、優雅に達成します。
JMXマネージャー
システム操作ステータスの監視と管理、サーバーパフォーマンス、サーバー関連のパラメーターのコレクション、JVMロード、Web接続番号、スレッドプール、データベース接続プール、キャッシュ管理、構成ファイルの再ロードなど。リアルタイムのパフォーマンスが高いリモートビジュアル管理を提供できます。また、分散システムの管理のためのソリューションも提供します。
ウェブローダー
Webloaderは、Webアプリケーションプロジェクトのロードに使用されます。 Webコンテナには、いくつかのWebアプリケーションが含まれる場合があります。 LIBとサーブレット間の分離を実現するには、異なるクラスローダー、クラスローダーを各Webアプリケーションに使用する必要があり、これらのクラスローダーは親子関係ではなく、クラスの分離効果を達成するために、つまり、WebアプリケーションのLIBは他のWebアプリケーションでは使用されません。
セッションマネージャー
セッションマネージャーは、主にセッションを管理しています。一般に、CookieまたはURLにはjSessionID値がありません。SessionIDはSessionIDとして再生する必要があります。 clientサーバーに多くのクライアントセッションが保存されています。タイムアウトセッションの場合、サーバーのメモリが無駄にならないように定期的にクリーンアップする必要があります。いくつかの重要なセッションの場合、それらはディスクに持続することができ、必要に応じて使用するためにメモリにリロードできます。
ログを実行します
実行時にいくつかの警告、例外、およびエラーを記録します。
アクセスログ
通常、アクセスログは、クライアントのIP、リクエスト時間、リクエストプロトコル、リクエストメソッド、リクエストバイト番号、セッションID、処理時間などを含むクライアントのアクセス関連情報を記録します。アクセスログは、アクセスユーザーの数、アクセス時間分布のルール、個人的な趣味などをカウントできます。
セキュリティマネージャー
Webプロジェクトは、Webコンテナプラットフォームで実行されます。これは、実行するプラットフォームにアプリケーションを埋め込むようなものです。組み込みプログラムを正常に実行するには、プラットフォームは安全かつ正常に実行できる必要があります。また、プラットフォームが埋め込まれたアプリケーションの影響を最大限に発揮しないようにするために、2つはある程度分離の効果を達成します。起動時には、ポリシーファイルは-djava.security.manager -djava.security.policy == web.policyによって指定され、さまざまな権限を定義します。
操作監視とリモート管理
Webコンテナのランニングステータスをリアルタイムで監視できるプラットフォームを提供し、リモートで管理できます。
クラスタ
通常、クラスターには2種類のクラスターがあります。Clustersのロード。通常、特定の分布アルゴリズムを使用して、処理のためにクラスター内の各マシンにアクセストラフィックを均等に配布します。 clusterクラスター、クラスター通信がいくつかのマシンを接続します。この種のクラスターは、クラスター内のマシンが失敗した後、自動スイッチングまたはトラフィック転送を介してクラスター全体の外部可用性を確保することに重点を置いています。
一般的に、Webリクエストはステートレスであり、直接クラスター化することができますが、セッションには状態が含まれ、セッションをコピーするためにクラスター通信技術の使用が必要です。関連技術には、マルチキャストとユニキャストが含まれます。
サーブレットエンジン
サーブレットエンジンは、反射を使用してサーブレットのオブジェクトとWebアプリケーションのJSPを生成し、それらをサーブレットオブジェクトプールに入れ、実際の状況に応じて対応する方法を呼び出します。 Webアプリケーションは、ビジネスロジック処理をDoPostまたはDog Methodに配置します。 Webコンテナがリクエストを処理すると、ここで定義されている処理ロジックに従って処理され、応答クライアントが応答されます。
JSPコンパイラ
仕様によれば、JSPは最終的にサーブレット実行にコンパイルされるため、JSPファイルを仕様に従ってコンパイルする必要があります。 JSPコンパイラは実際にJSP構文を翻訳し、JSP構文に従って処理します。
Webコンテナには、基本的に上記で紹介したコンポーネントの関数が含まれています。各コンポーネントモジュールの実装に応じてWebを実行できるWebコンテナを構築できます。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!