1

このビデオでは、キャッシュせずに数十万人のユーザーをスケーリングすることについて、Erlangステートフルサーバーについて話しています。Rubyステートレスを使用する前。

ステートフルサーバーは実際にはどういう意味ですか?ユーザーのセッションとサーバー上のステートフルオブジェクトの違いは何ですか?

そして、なぜRuby、PHP、Java、またはASP.NETがErlangと同じことを実行できないのでしょうか?

更新:結局、彼はアーランとルビーを組み合わせる義務があると言ったので、それは彼がルビーだけではそれを行うことができなかったことを意味します。

4

2 に答える 2

3

私はまだプレゼンテーションを見ていませんが、要約からはゲームプラットフォームのように見えます。これは、標準のビジネスアプリケーションとはまったく異なります。標準のビジネスアプリは、少量のセッションローカル状態を維持し、その状態は通常、スレッド間で共有する必要はありません。当社の標準的なビジネスアプリは、ビジネスデータを共有するためにデータベースとキャッシュに大きく依存しています。

これらのマルチプレイヤーゲームシステムでは、多くのスレッドがアクセスする必要がある状態をほぼリアルタイムで操作する必要があります。これがErlangが優れているところです。これを他の言語で実行できないわけではありませんが、安全または効率的に実行することはできません。

  • Rubyとは異なり、Erlangの並行性モデルにはロックがありません。Erlangはメッセージパッシング同時実行モデル(アクターモデルとして知られています)を使用します。共有の可変メモリはないので、見つけにくいプログラミングのバグをたくさん避けてください。
  • Erlangランタイムは、わずかなオーバーヘッドで作成および破棄できる数十万の軽量「プロセス」をサポートできます。
  • Erlangのプロセスごとのヒープにより、ガベージコレクションが迅速になり、ほぼリアルタイムのアプリケーションが可能になります。
  • 分散コンピューティングに対するErlangのサポートは優れているため、ハードウェアを追加してスケールアップするのは比較的簡単です。
  • Erlangの例外処理とその監視パターンにより、ネットワーク上のノード間でもアプリケーションエラーの管理が容易になります。
于 2012-04-09T17:55:00.320 に答える
2

ステートフルサーバー/アプリは、ユーザーのリクエスト間で何らかの状態を維持するサーバー/アプリです。通常のWebアプリはステートレスです。新しいリクエストはそれぞれ、完全に新しいものとして扱われます。一部の情報を保持したい場合は、セッション(通常はCookieに保存されます)を使用します。

これにより、Webワーカーの無料スケーリングが可能になります。必要な数のワーカーを起動するだけです。

ステートフルサーバー/アプリを使用すると、操作をより迅速に実行でき(毎回データベースからデータをフェッチする必要がありません)、送信される情報を節約できます(Cookieをやり取りする必要はありません)が、スケーラビリティが低下します。これで、空いているワーカーに着信リクエストをスローするだけでなく、ユーザーの状態を持つワーカーにリクエストを送信する必要があります。

確かに、Rubyでは両方の方法でプログラミングできます。ステートレスWebアプリ用のRails/Sinatra、ステートフルデーモン用のEventMachine。

于 2012-04-08T17:02:35.617 に答える