3

誰かがサービスをスケールアップする方法を非常に簡単な言葉で説明できますか (サービスが非常に単純で、関数 X() であると仮定しましょう)。

これをスケーラブルにするには、X を実行したいクライアントごとに (ハードウェアに応じて最大数まで) 新しいノードを起動するだけですか?

したがって、ハードウェア ボックスが 4 つある場合、サービス X() を実行するために最大 4 つのノードを起動できます。5 番目のクライアント要求では、最初のノードで X() を実行し、2 番目のノードで 6 番目のクライアントを実行します。

これに続いて、プロセスをローカルで生成する方法を知っていますが、1 番目と 5 番目のクライアントの両方に同じノード 1 を使用させるにはどうすればよいでしょうか? クライアントのノードで毎回プロセスをリモートで生成することでしょうか?

どんな簡単な例でも大歓迎です!

4

1 に答える 1

3

これはXが何であるかに大きく依存します。たとえば、Xが完全に独立している場合x() -> 37.は、ノードを接続する必要もありません。システムの前に標準のロードバランサー(HAProxy、Varnishなど)を配置するだけで、あらゆる種類の分散通信を忘れることができます。実際、そのためにErlangを使用する必要はありません。Erlangを他の言語に置き換えてください。それも同様に良いです。

Erlangが優れているのは、いくつかのX関数が相互に依存している場合と、Xが別の物理マシン上に存在する場合です。その場合、Erlangは別のノードにある場合でも他のXとシームレスに通信できます。

Erlangでラウンドロビン方式を実装する場合、最も簡単な方法は、単一のエントリポイントを用意してから、リクエストを複数のノードに転送することです。しかし、特定のノードがすべての長時間実行プロセスで終わるパターンがある場合、これは悪いことです。ラウンドロビンキューに重みを付ける方法を理解できるように、フィードバックのメカニズムを構築する必要があります。

于 2012-07-06T09:32:38.620 に答える