gem“websocket-rails”及其可扩展性
Posted
技术标签:
【中文标题】gem“websocket-rails”及其可扩展性【英文标题】:gem "websocket-rails" and its scalability 【发布时间】:2015-08-23 10:14:56 【问题描述】:我们目前正在开发一个聊天工具(如 facebook,带有存储的消息)。 目前至少有500个在线用户(它是一个约会网站),高峰时最多有3000个用户同时在线。
切换到 websockets 对我们来说是“事情”,但是在使用 gem“websocket-rails”时,我们有点担心性能。阅读像 https://www.igvita.com/2008/11/13/concurrency-is-a-myth-in-ruby/ 这样的文章会引起一些疑问。
所以我们的问题是:
websocket-rails 是否正在杀死我们的应用程序?另一种选择是运行 jsnode 服务器并切换到 faye,这在我们的 scalabitliy 中应该不是问题。有人对 websocket-rails 的可扩展性有任何经验吗?
【问题讨论】:
这可能有点乏味,但最好是创建一个小型模拟,在该模拟中,您有几个虚拟机/客户端以 3000 多个并发连接破坏您的服务器,同时测量真实世界的服务器加载。您发布的文章确实指出了 rails 的一大弱点——阻塞 io——但您可能会发现您的服务器可以正常运行。拥有一个模拟脚本还可以让您测量 Rails 系统上的“断点”,这可能大大高于您的预期客户吞吐量 你能给我任何输入,我可以阅读更多关于如何创建这样一个模拟的信息吗?以前没做过:( 【参考方案1】:GIL 仍然存在,但不应成为主要问题。主要问题是 Rails 方法不适合大量聊天方法。
我的建议是针对这个特定部分切换到事件机,并且仍然使用websocket(或其他推送机制,如pusher),并使用这种WebSocket EventMachine Client。
然后,您将使用单个 ruby 线程进行事件驱动,并且您仍然可以使用所有其他 rails 现有库(即 node.js 模型)
【讨论】:
我们不会使用外部的东西,我们想省钱。所以你建议尝试使用自己的 node.js 服务器? 节点,我推荐你使用EventMachine,这是一个基于ruby事件的方法+一个websocket连接(你可以自己做)。在我看来,在基于 Rails 的环境中进行聊天是最好的方法。以上是关于gem“websocket-rails”及其可扩展性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 websocket-rails gem 创建国际象棋自动匹配器?