0

API のみを使用して Heroku の無料利用枠にデプロイした小さな Rails アプリがあり、ブックを作成し、ブックのジャンルを返し、データベースからすべてのブックを削除するためのビューはありません。次のようになります。

APOST request to site.herokuapp.com/add_book?name=harrypotter&genre=fantasyさんは本を追加します。

AGET request to site.herokuapp.com/find_book?name=harrypotterはジャンルを返します。

POST request to site.herokuapp.com/reset clears the database of all books

これを 1 つのサーバーで動作させたので、3 つのサーバーのいずれかに呼び出しを送信し、すべてのデータベースに同じ Book エントリを含めることができるように、それぞれが一意の URL を持つ 3 つのサーバーに複製したいと考えています。

たとえば、私が

POST request to site1.herokuapp.com/add_book?name=harrypotter&genre=fantasy

次に送信します

POST request to site2.herokuapp.com/add_book?name=littlewomen&genre=fiction

送信できます

GET request to site3.herokuapp.com/find_book?name=littlewomen.

しかし、サーバーにリセット呼び出しを送信しても、他のサーバーはリセットされません。

OctopusData Fabricという 2 つの gem を見つけましたが、これらは異なるサーバーではなく、同じサーバー上のデータベース間で複製されているようです。また、3 つの異なるサイトを呼び出す予定ですが、これらの gem は機能しますか?

Railsでこのタイプのデータベース/サーバーのレプリケーションを行うにはどうすればよいですか?

4

1 に答える 1

0

あなたの完全なユースケースを完全に理解しているかどうかはわかりません。異なる API 呼び出しに対して異なるデータベース間で読み取り/書き込みを分散したいだけですか?

小規模なアプリケーションの場合、サイト 1、サイト 2、サイト 3 の 3 つのアプリケーションすべてを同じデータベース インスタンスに接続しないのはなぜですか?

次のオプション:

  1. マスター スレーブ レプリケーション

    あなたの場合、1 つのマスター データベースと 2 つのスレーブ データベースがあります。データはマスター データベースに対して読み書きされますが、スレーブにレプリケートされます。次に、選択したデータベース全体で読み取りを行うように Rails アプリケーションを構成できます。

    Octopusを使用して、スレーブとマスターの間で書き込み/読み取りを分散できます。

    レプリケーションを使用する場合、すべての書き込みクエリはマスターに送信され、読み取りクエリはスレーブに送信されます。

  2. MySQL クラスター

    MySQL クラスターはまだ使用していませんが、すぐに使用する必要があります。すべてのノード間でデータの一貫性を維持しながら、すべてのデータベースに読み取り/書き込みを分散することが要件である場合、MySQL クラスターが適切な候補のように見えます。データは、データ ノードのプール全体に分散されます。すべての MySql サーバーはすべてのデータ ノードにアクセスできるため、クラスター内のサーバーが行を挿入してデータを変更した場合、この新しいデータはすぐにアクセス可能になり、クラスター内の他の MySql サーバーによって表示されます。

    詳細はこちらMySql Cluster

于 2013-02-09T22:29:57.847 に答える