マイクロvsモノリシックサーバーアーキテクチャ
現在、新しい製品/プロジェクトに取り組んでいます。これは、特定の特定の産業/サービス企業向けのクライアント/サーバーアプリケーションです。Javaフロントエンドを備えたTCP上でカスタムプロトコルを実行するサーバー(C言語およびLinuxのみ)を構築しています。私たちはコーディング作業に約20%取り組んでおり、マイクロカーネルアーキテクチャまたはモノリシックカーネルアーキテクチャを選択する必要がある状況に直面しています。 Micro vs. Monolithicは通常カーネルアーキテクチャに関連していることは承知していますが、具体的にはサーバーについて話しています。 既存のサーバーではなく、カスタムサーバーが必要な理由 UIのニーズは非常に大きく、非常に動的であるため、Web / Webブラウザーベースのソリューションは適切ではありませんでした。 統計処理はクライアント側で重要であるため、ブラウザーもほとんど役に立ちませんでした。(もちろん、サーバー側で処理を実行し、処理されたデータをクライアントに渡すこともできますが、これはサーバーの負荷が大きくなり、クライアントリソースが浪費されることを意味します)。 さらに、少なくとも3つのテクノロジー(JS / HTML / CSS)で1つのイベントを管理することで、砂漠の嵐の中で家を一掃するような全体の体験ができます。 マイクロサーバーとモノリシックサーバーはどうですか?あなたは何をしゃべってますか? 次の(仮想の)クライアント要求を検討してください。 request-id: 123 request-service: HistoricDataSets request-message: Fetch all records upto the year 2010 そのようなリクエストを受信すると、サーバーは通常、次のことを行います(簡単にするために、スレッドやフォークなどの同時実行技術は無視しています)。 リクエスト文字列を解析する アクションを特定する(HistoricDataSets LIMIT Year (2010)この場合はフェッチ) 永続化レイヤー(この例ではOracle、と言うことができます)と対話して、データをフェッチします。 プロトコルに従ってデータをフォーマットします。例: response-id:123 success:true response-text:DataSets このようにフォーマットされたデータでクライアントに応答します。 これは、モノリシックサーバー(すべてのOSの動作がカーネル空間で行われるモノリシックカーネルに似ています)と呼ばれるものです。 再度、同じリクエストを受け取り、今回はサーバーを考慮します(簡単にするため、共有メモリのみをIPCと仮定しました)。 Parserプロセスの共有メモリに要求を入れます Parserタスクを特定し、文字列を解析し、指示するExecutionerタスクを実行するためのプロセス。 次にExecutioner、Fomatterプロセスにデータを渡し、データをプロトコル文字列にフォーマットした後、サーバーに戻ります。 サーバーはそれをクライアントにディスパッチします(応答)。 もちろん、代わりのParser、ExecutionerそしてFormatterそれは、単一のが、別のプロセスだったかもしれません。これは、私たちがマイクロサーバーと呼んでいるものです(マイクロカーネルが最低限必要なことをやっていることに似ています)。サーバーは実質的にリスニングと応答のみを行いますが、すべてのステップは異なるプロセスによって処理されます。 どれを選ぶべきですか?混乱しています!モノリシックサーバーは試行およびテストされていますが(ほとんどのHTTP-Webサーバー?)、プログラミングが容易であり、同時実行性を非常にうまく処理できます。マイクロサーバーは、一見、迅速で、1つのタスクを実行する1つのプログラムというUNIXの原則に沿っているように見えますが、特に開発が複雑です。並行性を念頭に置いてください。 質問 -各アプローチの長所と短所は何ですか(場合によっては)。 …