参考another SO question我得到了this article关于Twitter从Rails迁移到Scala的问题,在文章中就是这个评论:
到今年年底,佩恩说, Twitter希望拥有它的全部 中间件基础架构及其API 移植到新语言。 Ruby会 保持,但只在前端。 “我们仍然对Rails感到高兴 构建面向用户的功能...... 性能方面,这对人们来说很好 点击网页。就是这样 繁重的,异步处理 我们搬走了的东西 从“
中间件在这里意味着什么? Ruby在前端到底意味着什么?这是否意味着前端的轨道使用的ORM非常少?它如何与scala“见面”?这个评论意味着什么?
试图了解架构。谢谢。
答案 0 :(得分:5)
这是N-Tier Architecture的一种形式。最初,大多数站点将以2层架构开始,具有Web服务器和数据库。 Web服务器将提供用户看到的页面,而数据库则由这些动态页面访问。
当一个体系结构被分成多个层时,通常,您将在前面有一个Web应用程序,其中包含Web应用程序将调用的某种应用程序服务器。此应用程序服务器包含业务逻辑并使应用程序正常运行。应用程序的“面部”只是使事物看起来很漂亮,并将其格式化以便向用户显示。
应用程序服务器或“中间件”只是Web服务器可以调用的函数集合。对于像twitter这样大多数活动都在发送消息的网站,中间件必须是强大的,并且访问网站的人没有那么多活动。
层之间的互连可能是标准的Web服务技术,但它可能是一个自定义的东西,可能是REST或其他类型的Web服务,其中Web应用程序(Ruby on Rails)可以访问应用程序数据。
在这种类型的架构中,Rails肯定已将所有ORM和数据管理降级为中间件。
中间件也是一个模糊的术语,可以包含许多层,因此他们称之为N-Tier。我敢打赌,Twitter的中间件不同部分用于消息传递,而另一部分用于管理帐户,提取消息等。
我们的想法是通过添加硬件来扩展,您可以在其中拥有一个服务于网页的服务器群集,另一个群集处理消息传递,然后是支持所有服务器的数据库服务器群集。这不是一门精确的科学,每种架构都不同,但一般来说,这就是它的思考方式。
答案 1 :(得分:1)
尝试谷歌搜索“ruby twitter scala payne”,你将获得超过你可能需要的主题。
我的(可能是不完整的)理解是,很多Twitter的“后端”编码不是特别好(请参阅Obie Fernandez' post选择一些Alex Payne报价)。这似乎至少部分源于应用程序的最初快速入侵性质,它被事件所取代,随着应用程序的使用开始呈指数级增长,它们经历了相当大的痛苦。 Twitter(以及协会Rails)指出任何数量的手指在当时“未能扩展”。
Twitter在很大程度上依赖于消息排队,我理解这部分内容是用Scala编写的,这可能(没有个人经验)是一种非常好的语言选择。答案 2 :(得分:1)
我的理解是他们迁移到Scala的消息是“队列”:从Ruby-ORM-DB支持的解决方案到使用Scala的分布式消息传递系统。 具有Twitter量的服务具有特殊要求,并且他们已经创建了自己的消息解决方案。被称为“红隼”
答案 3 :(得分:-1)
此情况下的消息传递基础结构。他们可能从一些基于定制ruby的解决方案切换到JMS解决方案。