ruby-on-rails – 异步应用服务器与多个阻止服务器
tl; dr许多Rails应用程序或一个Vertx / Play!应用程序吗?
我一直在与我的团队的其他成员讨论使用异步应用服务器(例如Play)的优缺点!框架(基于Netty)与旋转Rails应用服务器的多个实例. 我知道Netty是异步/非阻塞的,这意味着在数据库查询,网络请求或类似的异步调用期间,事件循环线程将允许事件循环线程从被阻止的请求切换到另一个准备好处理/服务的请求.这将使CPU保持忙碌而不是阻塞和等待. 我赞成或使用像Play这样的东西!框架或Vertx.io,非阻塞的东西……可扩展.另一方面,我的团队成员说你可以通过使用Rails应用程序的多个实例获得相同的好处,这些应用程序开箱即用,只有一个线程并且没有真正的并发性,就像JVM上的应用程序一样.他们说只是使用足够的应用实例来匹配一个Play的性能!应用程序(或者我们使用的Play!应用程序),当Rails应用程序阻止操作系统将切换到不同的Rails应用程序.最后,他们说CPU将执行相同数量的工作,我们将获得相同的性能. 所以这是我的问题: >上述论点中是否存在任何逻辑谬误?操作系统是否可以管理Rails应用程序实例以及Netty(它还可以在JVM上运行,它可以很好地将线程映射到内核)在其事件循环中管理请求? 解决方法
这两种方法都可以而且有效.因此,如果转换会产生很高的开发成本和/或时间表,那么它可能不值得努力……当成本变得无法接受时,请进行切换.考虑使用微服务作为渐进式切换策略.
如果您处于开发周期的早期阶段,那么尽早进行切换可能是有意义的.重写是一种痛苦. 或者也许你永远不必切换和rails将适用于你的用例,如魅力.而且你已经非常成功地让你的客户感到高兴,现金正在滚滚而来. 阻塞单服务器方法的一些缺点: >增加内存使用量.来源:多个进程,内存泄漏,缺少共享数据结构(这会增加通信成本并带来一致性问题). 从rails到node.js和golang进行这种切换的人的一些例子: > LinkedIn从Rails迁移到节点:27台服务器切割速度提高了20倍:http://highscalability.com/blog/2012/10/4/linkedin-moved-from-rails-to-node-27-servers-cut-and-up-to-2.html 这些帖子代表了可能说明您的小组正在经历的内容的论据.遗憾的是,这一决定并不明显. 这取决于你正在建设的性质,你的团队的性质,资源的性质,你的技能的性质,你的目标的性质以及你如何重视所有不同的权衡. 成本真的会下降吗?无论服务器数量多少,计算量都不一样吗? 取决于正在进行的工作的类型和规模.通常,Web服务是IO绑定的,等待来自其他服务(如数据库,缓存等)的响应. 如果您使用的是单线程服务器,那么IO上的进程会被阻塞很多,所以它不会做很多事情.相比之下,非阻塞服务器将能够在单线程服务器被阻止时处理许多请求.您可以继续添加进程,但只有一台计算机可以运行这么多进程.非阻塞服务器可以具有相同数量的进程,同时保持CPU尽可能处理请求.在使用非阻塞服务器时,通常可以在更便宜的小型机器上处理更高的负载. 如果您的预期请求率可以通过可接受数量的方框处理,并且您不希望出现巨大的峰值,那么单线程服务器就可以了.非阻塞服务器非常适合吸收负载峰值而无需添加计算机. 如果您的工作是响应延迟并不重要,那么您可以使用更少的节点. 如果你的工作负载是CPU绑定的,那么你无论如何都需要更多的盒子,因为没有相同的并行机会,因为服务器不会阻塞IO. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |