このドキュメントで説明されているベストプラクティスについて質問したいと思います。
http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf
複数のクエリルーターを使用します。複数のサーバーにまたがる複数のmongosプロセスを使用します。一般的な展開は、アプリケーションサーバー上のmongosプロセスを同じ場所に配置することです。これにより、アプリケーションとmongosプロセス間のローカル通信が可能になります。mongosプロセスの適切な数は、アプリケーションと展開の性質によって異なります。
展開についてのほんの少しの背景。多くのアプリケーションサーバーノードがあります。それらはそれぞれ、ステートレスRESTful WSで1つのJVMベースのプロセスを実行します。このベストプラクティスが示唆するように、すべての単一のアプリケーションサーバーノードは独自のmongos
プロセスを実行します。つまり、JVMプロセスの数は常にプロセスの数に等しくなりmongos
ます。
すべてのmongos
プロセスは、3つの構成サーバーと複数のmongo断片(各断片内にレプリカセットがある)に接続します。シャード展開を使用している場合でも、実際にはコレクションをシャーディングしていません。実際、作成時にすべてのシャードに分散する多数のデータベースがあります(これが現時点でのシャーディングの主な使用例です)。
ベストプラクティスでは「適切なmongosプロセスの数はアプリケーションとデプロイメントの性質に依存する」ことも示唆しているので、私たちの使用mongos
が実際に適切かどうか、または複数の専用mongos
ノードを用意して、アプリサーバーはmongos
ローカルで実行せずに接続します。
mongos
アプリケーションサーバーのインスタンス数またはMongoDBクラスターのサイズに関連して適切なインスタンスの数を決定するための最適なアプローチについて、あなたはどう思いますか?
最近、ステートレスWebサービスのクラスター管理を検討し始めました。つまり、Docker、Apache Mesos、Kubernetesなどのツールを意味します。Dockerを使用している場合、一般的にコンテナ内で複数のプロセスを実行することは推奨されません。この事実を考慮すると、アプリケーションサーバーコンテナとmongos
コンテナを常に同じ物理ノードに配置し、同じ量のプロセスを確保することは非常に困難になります。これは、このベストプラクティスが今説明したクラスターアーキテクチャにまだ当てはまるのかと思います。そうでない場合は、mongos
このアーキテクチャでプロセスを見つけて展開するためのより良い方法を提案してください。