1

这个关于在不缓存的情况下扩展数十万用户的视频中,这个人正在谈论 Erlang 状态服务器。在他们使用 Ruby Stateless 之前。

有状态服务器实际上是什么意思?用户的会话和服务器上的有状态对象有什么区别?

为什么 Ruby、PHP、Java 或 ASP.NET 不能像 Erlang 那样做呢?

更新:最后那家伙说他不得不将 Erlang 和 Ruby 结合起来,所以这意味着他不能单独使用 Ruby。

4

2 回答 2

3

我还没有看过演示文稿,但从总结来看,它看起来像是一个游戏平台。这与您的标准业务应用程序完全不同。您的标准业务应用程序维护少量会话本地状态,并且该状态通常不需要在线程之间共享。我们的标准业务应用程序严重依赖数据库和缓存来共享业务数据。

这些多人游戏系统需要对需要由许多线程访问的状态进行近乎实时的操作。这是 Erlang 擅长的地方。并不是说你不能用其他语言做到这一点,而是你不能做到安全或高效。

  • 与 Ruby 不同,Erlang 的并发模型中没有锁。Erlang 使用消息传递并发模型(称为 Actor 模型)。没有共享的可变内存,因此避免了很多难以发现的编程错误。
  • Erlang 运行时可以支持数十万个轻量级“进程”,只需很少的开销即可创建和销毁这些“进程”。
  • Erlang 的 per-process heap 使垃圾收集快速并允许近乎实时的应用程序。
  • Erlang 对分布式计算的支持非常好,因此通过添加硬件进行扩展相对容易。
  • Erlang 的异常处理和它的监督模式使管理应用程序错误变得容易,即使在网络上的节点之间也是如此。
于 2012-04-09T17:55:00.320 回答
2

有状态的服务器/应用程序是在用户请求之间维护某种状态的服务器/应用程序。您的普通 Web 应用程序是无状态的。每个新请求都被视为全新的。如果你想持久化一些信息,你可以使用 session(通常存储在 cookie 中)。

这允许自由扩展网络工作者:您只需启动所需数量的工作者。

有状态的服务器/应用程序允许更快地执行操作(无需每次都从数据库中获取数据)并保存传输的信息(您不需要来回传递 cookie),但您付出的代价是降低了可伸缩性。现在您不能只将传入的请求扔给任何空置的工作人员,您需要将其定向到具有用户状态的工作人员。

当然,您可以使用 Ruby 以两种方式进行编程。Rails/Sinatra 用于无状态 Web 应用程序,EventMachine 用于有状态守护进程。

于 2012-04-08T17:02:35.617 回答