現在、新しい製品/プロジェクトに取り組んでいます。これは、特定の特定の産業/サービス企業向けのクライアント/サーバーアプリケーションです。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の原則に沿っているように見えますが、特に開発が複雑です。並行性を念頭に置いてください。
質問
-各アプローチの長所と短所は何ですか(場合によっては)。
-どちらを使用するか (一般的な質問として解釈することもできます:IPCを使用するタイミング?)
-マイクロカーネルを選択した場合、コアサーバーの一部である必要がある機能とそうでない機能
類似/関連する質問
役立つ情報:
- 見込み客は次の2つのカテゴリに分類できます。
- 大:1分あたり約1,700-2,000リクエスト
- 小:毎分約650-700リクエスト
- 要求サイクル(要求および後続の応答)ごとのデータ量は、平均で約1.20 MB、最悪の場合は約250-300 MBで正規分布していると想定できます。
- 製品のコンセプトは比較的新しいものですが、中核業務に影響を与える能力があるため、顧客の予算は展開後一定のラグ(9-12か月)を過ぎた場合にのみ柔軟になり、クライアントが受け入れるハードウェアの量が制限されます特にコミットする 小さなもの。
- 各顧客には、独自のクライアントサーバースタックがあります。サーバーは顧客のチームが管理する顧客のハードウェア上で実行され、クライアントは職務上の従業員のマシンに展開されます。
- クライアントアプリケーションとサーバーアプリケーションの両方のリモート更新は必須です
PUSH
製品がクリックした場合、サーバーによるリアルタイムサービスが「非常に」望ましい場合があります。