5

ユーザーを組織ごとに分割するシステムに取り組んでいます。各ユーザーは組織に属しています。各組織は、データベースサーバーマシン上にある独自のデータベースにデータを保存します。dbサーバーは、1つ以上の組織のデータベースを管理できます。

既存の(レガシー)システムは組織が1つしかないことを前提としていますが、アプリケーションの「インスタンス」を実行して(1つの組織に関連付けて)アプリケーションを「スケーリング」し、サーバーマシンで複数のインスタンスを実行したい(つまり、複数のインスタンスを実行したい) 「単一組織」アプリケーションの-組織ごとに1つのインスタンス)。

サーバーで実行されているインスタンスごとにRESTfulAPIを提供します。これにより、シンクライアントを使用して、サーバーマシンで実行されているインスタンスによって提供されるサービスにアクセスできます。

関係を示す簡単な回路図を次に示します。

サーバー1->Nデータベース(各組織には1つのデータベースがあります)

組織1->Nユーザー

私の質問は、クライアントからのRESTfulリクエストを、その組織のユーザーからのリクエストを処理している適切なインスタンスに「転送」する方法に関するものです。

より具体的には、RESTfulリクエストを受信すると、ユーザー(組織に属する)から、サーバー上で実行されている適切なアプリケーションインスタンスにリクエストを「ルーティング」する方法(または実際に最善の方法)が返されます。 ?

4

4 に答える 4

1

私が収集できることから、これは本質的にシャーディングの問題です。ハードウェアレベルでインスタンスを分割する方法に関係なく(VM、複数のサーバー、すべて1つの強力なサーバーなどを使用)、アーキテクチャ全体に中央レジストリとブローカリングレイヤーが必要です。これにより、特定のユーザーをリクエストごとに正しい宛先インスタンスにマッピングできます。 。

もちろん、これを実装する方法はたくさんあります。そのため、すべての要求が通過するので、知っていて高速で、拡張可能なものを選択するだけです。適切なクライアント識別子->インスタンスマッピングを実行する単純な読み取り専用データベースに裏打ちされた軽量のステートレスWebアプリケーションをお勧めします。これは、メモリ/キャッシュにロードされます。ハードウェアとインスタンスの場所に柔軟性を追加するには、(Javaを想定して)JNDIを使用して各インスタンスのハードウェア/ポートなどの情報を格納し、識別子マッピングでクライアント識別子を適切なJNDIルックアップキーにマップします。

于 2010-07-22T00:02:27.697 に答える
1

パブリックAPIにユーザーのみを指定させることは、私には少し壊れやすいように思えます。リクエストが組織とユーザーを指定するようにパブリックAPIを変更し、組織をインスタンスにマップする簡単なサーバー側を作成します(たとえば、組織foo->ポート7331でリッスンしているインスタンス)。

于 2010-07-22T01:22:36.263 に答える
0

それは確かに非常に難しい質問です。考えられる答えがたくさんあり、どれが最良かはあなたとあなたの環境によってのみ決定できるからです。

それを行うには、C++でapacheモジュールを作成します。この本を使って、私はなんとか非常に効率的なモジュールを書き始めることができました。

より多くのソリューションを提供できるようにするには(おそらくSquidプロキシを設定するだけですか?)、クライアントをリダイレクトする必要があるサーバーを決定する方法を指定する必要があります。IPで実行できる場合は、GET param、POST XML param(SOAPなど)を使用します。等。

于 2010-07-21T22:40:12.753 に答える
0

他の答えが言うように、この問題に取り組むには多くの方法があります。レガシーソフトウェアのソースコードにアクセスできないと仮定しましょう。つまり、さまざまなインスタンスのさまざまなポートでリッスンするように変更することはできません。

Apacheモジュールを書くことは、この問題を解決するために非常に極端に思えます(そして、実際に本番のapacheモジュールを書き終えたばかりの人として、あなたが深刻なお金を稼いでいない限り、それを避けることをお勧めします)。

アプローチは、好きなだけ難解にすることができます。たとえば、レガシーソフトウェアが通常のIntelアーキテクチャで実行され、ハードウェア容量がある場合、VMソリューションがあり、シン仮想マシンを作成できます。1つはソフトウェアの単一インスタンスを実行し、マルチプレクサはそれらすべてを結び付けます。

一方、HPUXのようなものをうまく実行している場合は、他のアプローチがあります:-)。もう少し詳しく教えてください。

アーメド。

于 2010-07-21T22:50:50.747 に答える