2011-12-27 7 views
2

です。私は物事を展開する経験はあまりありません。私は、永続性のためにmongodbを使用し、メタキャッシュのためにredisを使用し、ページを提供するために再生するプロジェクトを作成しています。私は、専用サーバーを購入するか、アマゾン/リノードから複数の小さな/中規模のインスタンスを購入するか(それぞれ、mongo、redis、play用に1つ)を購入するかどうかを決定しています。私は以下のようなトレードオフを考えましたが、誰かがリストに追加したり、さらなる洞察を提供できるのだろうかと思います。私はlinodeとamazonからインスタンスの2つのセットを購入することに傾いているので、そのうちの1つが停止していると、もう一方のプロバイダにフェールオーバーします。また誰かがscala/mavenクラスタやツールを配備するためのヒントを持っていれば、非常に感謝しています。データベースとページサーブレット(同じホスト)との間に
コードを書く経験が豊富ですが、サービス/データ/キャッシュ用に複数のインスタンスをデプロイする利点は

  1. 速いスピード:

    A. 1つのインスタンス
    専門家にすべてをかけます。

  2. 安いです。
  3. 保護するエンドポイントが少なくなります。短所


  1. 困難を管理します。 (私の意見では)
  2. 単一のモジュールをアップグレードするのが難しい。インストール上の問題がある場合は、システム全体が停止する可能性があります。

    1. シャーディングは簡単です:

  3. B.は異なるインスタンス
    長所で各モジュール(モンゴ、Redisの、遊び)を置きます。
  4. 単一の目的のためにクラスタを簡単に作成できます。 (すなわち、赤色のクラスタ)
  5. モジュール間でリソースを割り当てるのが簡単です。
  6. すべてが一度に失敗する可能性は低いです。

短所:モジュール間の

  1. 帯域幅 - > $
  2. がそれぞれ接続し、エンドポイントを保護。私は技術的な側面についてコメントすることができ

答えて

2

は、専用のインスタンスは、物理ボックス、または単に大きなVMであるかどうか言及されていない

(...など、保守の費用がかかりません)。アプリケーションがMongoDBまたはRedisへの多くのラウンドトリップを生成する場合、その差はかなり重要になります。

VMでは、I/O、OSスケジューリングおよびシステムコールのコストが高くなります。これらの要素は、MongoDBやRedisのような効率的なリモートデータストアのパフォーマンスコストの重要な部分を占める傾向があり、仮想化料金はそれよりも高くなります。

システムの観点からは、MongoDBデータベースが使用可能なメモリよりも大きいと予想される場合は、MongoDBとRedis/Playを同じボックスに入れません。 MongoDBはメモリ内のデータファイルをマップし、OSに依存してメモリスワップを実行します。これのために設計されています。他のプロセスはそうではありません。 MongoDBによって引き起こされたスワッピングは、それらがすべて同じボックスにある場合、RedisとPlay応答時間に致命的な結果をもたらします。ですから、私は少なくともMongoDBをRedis/Playから分離するでしょう。

キャッシュにRedisを使用する予定の場合は、Playサーバーと同じボックスに保持することが理にかなっています。 Redisはメモリを使用しますが、CPUは少なくなります。 PlayはCPUを使用しますが、メモリはそれほど多くありません。それで良いフィット感があるようです。また、Playからは可能かどうかはわかりませんが、TCPループバックの代わりにUnixドメインソケットを使用してRedisに接続すると、無料で約50%のスループットを達成できます。

関連する問題