翻訳者から :
MeteorJS-オープン(MIT)フルスタックJavaScriptフレームワーク(クライアントとサーバーの両方)。 現在のバージョン0.7.0-バージョン1.0は2014年初頭にリリースされる予定です。 ハブの出版物:
1、2、3 。
スケーリングの準備
コンポーネントチャート:

ロードバランサーとして、3つのMeteorサーバー、1つのMongoDbサーバーとHaProxyサーバーがあります。 SSLをサポートするには、
スタッドをHaProxyの前に置きます。
コンポーネントとその構成について説明しましょう。
MongoDbを構成する
単一サーバーoplog
レプリカセットを使用しています。 もちろん、マルチサーバーを使用することをお勧めしますが、わかりやすくするために少し簡略化しました。
単一サーバーのレプリカを構成する
まず、MongoDbを起動して、レプリカを認識させる必要があります。 次のコマンドを使用して、
流星のレプリカセットを構成します。
mongod --replSet meteor
その後、Mongo-shellを開き、単一サーバーレプリカに次の設定を入力します。
var config = {_id: "meteor", members: [{_id: 0, host: "127.0.0.1:27017"}]} rs.initiate(config)
アクセス制御
専用のMongoDbサーバーを使用しているため、サーバーへの不正アクセスを防止する必要があります。 ファイアウォールを構成するか、MongoDb自体で役割ベースのアクセスを使用できます。 構成を簡素化するために、ファイアウォールが正しく構成されていると仮定するか、
MongoDbの役割ベースのアクセスドキュメントを参照してください。
Meteorアプリケーションのデータベースは
appと呼ばれます。
oplogと統合するために、oplog自体が配置される
localというデータベースを使用します。
流星の設定
スケーラブルなMeteorアプリケーションの展開を計画する場合、いくつかの点を考慮する必要があります。 それらについてお話します。
Oplogサポート
前の記事で、oplogが流星のスケールアウトにどのように役立つかについて既に説明しました。 2つのオプションがあります。
SmartCollectionsまたは
予備バージョンのMeteorをoplogで使用できます(
OpLogを完全にサポートする
UPDリリースバージョンMeteor 0.7.0。使用する必要があります)。
MongoDb oplogをMeteorに統合する方法の詳細については、David GracerのDevShop 10トークを参照してください。
どちらの場合でも、追加のMongoDB接続URLをoplogログ(先ほど述べた
ローカルデータベース)に指定する必要があります。 SmartCollectionの場合、Meteorでoplogを事前に実装するために、環境変数
OPLOG_URLを設定する必要があります(変数
MONGO_OPLOG_URL) 。
(そしてもちろん、いつものように、
MONGO_URLを設定することを忘れないでください)
IE 8および9でのスティッキーセッションのサポート
IE 8および9
は AJAXリクエストで
Cookieを
送信しません。これにより、ロードバランサーが破損します。これについては後で説明します。 幸いなことに、SockJSにはこの問題に対する組み込みソリューションがありますが、Meteorではデフォルトでオフになっています。 有効にするには、次の環境変数をエクスポートする必要があります。
export USE_JSESSIONID=1
Meteorバージョン0.6.6以降を使用してください。このオプションはこのバージョン以降に登場しています。
サーバーの選択
Meteorに同じサーバーを選択することは非常に重要です。 それらは同じデータセンターにあり、同じパフォーマンス、OS、アーキテクチャを持っている必要があります。そうでない場合、負荷のバランスが不適切になります。
現在の設定では、サーバーごとに1つのプロセスのみを使用しているため、マルチコアサーバーは役に立ちそうにありません。 サーバーにシングルコアのハードウェア環境を使用してみてください。 次の記事では、これについてさらに詳しく説明します。
展開
サーバーを適切に構成して、Meteorサーバーを正しく展開することが非常に重要です。 可能であれば、これに導かれる人に助けを求めてください。 または、私が作成した
Meteor-Upを使用して、産業用にすぐに使用できるMeteorアプリケーションをデプロイできます。
ロードバランサーの構成(HaProxy)
Meteorアプリケーションの負荷分散には、HaProxyを使用します。 これは非常に安定しており、多くの企業によって産業運用でテストされています。 HaProxyはスティッキーセッションもサポートしており、他にも便利な設定がいくつかあります。
スティッキーセッションのサポート
sticky-sessionにはいくつかの実装オプションがあります。 それらは、Cookieを使用して実装され、IPクライアントをハッシュするか、URLを変更します。 まだオプションがありますが、これらは最も一般的です。
クライアントのIPアドレスをハッシュ化するのが最も簡単な方法ですが、負荷を適切に分散させることはできません。 IP情報を信頼できず、透過プロキシ(ほとんどがプロバイダーによって使用されます)が元のIPを隠すため、サーバーの1つの負荷が増加します。
URLの変更は適切なオプションであり、SockJSで非常によくサポートされています。 ただし、ロードバランサーとMeteorに追加のロジックを実装する必要があります。
クッキーベースのソリューションは、私たちにとって最適に機能します-バランスがよく、設定が簡単です。
負荷分散アルゴリズム
適切な負荷分散アルゴリズムを選択することは非常に重要です。 HaProxyにはそれらのいくつかがあります。
ラウンドロビンアルゴリズム
は 、ドキュメントで推奨されています。 RoRやPHPなどで作成されたステートレス状態を含まないアプリケーションに最適です。
ただし、Meteorは状態アカウンティングと長期接続に基づいているため、
leastconnアルゴリズムを使用することをお
勧めします。 その中で、接続の数が最も少ないサーバーに新しい接続が与えられます。 これにより、サーバーが一時的にシャットダウンした場合でも、均一な負荷分散が実現します。
ラウンドロビンの場合
、負荷は不均等になります。
カスタマイズ
HaProxyの構成方法をご覧ください。これは構成ファイルです。
defaults mode http timeout connect 5s timeout client 10s timeout server 10s frontend public
わかりやすくするために、構成ファイルの一部を削除しました。 完全版は
こちらから入手でき
ます 。
スタッド付きSSL
私の意見では、産業運用でのSSLの使用は必須です。 残念ながら、HaProxyの安定バージョンはSSLをサポートしていません。 ただし、SSL接続の2番目のエンドとしてHaProxyの前にスタッドを使用できます。 そしてもちろん、スタッドをHaProxyと同じサーバーにデプロイする方が良いでしょう。
必ずソースからスタッドをインストールしてください。 apt-getが受け取ったバージョンは非推奨です。
次の設定ファイルを使用できます。
これが設定ファイルの完全版です。
Studでは、SSL証明書と秘密キーが同じ.pemファイルにある必要があります。
このマニュアルの詳細。
追伸 ハブに新しいハブ
Meteor.JSが登場しました-サインアップ。