4

参考我遇到的另一个 SO 问题,我收到了这篇关于 Twitter 从 Rails 迁移到 Scala 的文章,文章中有这样的评论:

佩恩说,到今年年底,Twitter 希望将其整个中间件基础设施及其 API 移植到新语言。Ruby 将保留,但仅限于前端。“我们仍然对 Rails 构建面向用户的功能感到满意……在性能方面,它对人们点击网页来说很好。这是我们已经摆脱的繁重的异步处理类型的东西。”

中间件在这里是什么意思?在前端使用 Ruby 到底意味着什么?这是否意味着前端的导轨很少使用 ORM?它如何与 scala“相遇”?这个评论是什么意思?

只是想了解架构。谢谢你。

4

4 回答 4

5

它是N-Tier Architecture的一种形式。最初,大多数站点将作为 2 层架构开始,具有 Web 服务器和数据库。网络服务器将提供用户看到的页面,而数据库由这些动态页面访问。

当一个架构被分成多层时,通常,你会在前面有一个 Web 应用程序,以及 Web 应用程序将调用的某种应用程序服务器。此应用程序服务器包含业务逻辑并使应用程序正常运行。应用程序的“面孔”只是让事物看起来很漂亮,并对其进行格式化以显示给用户。

应用程序服务器或“中间件”只是 Web 服务器可以调用的函数的集合。对于像 twitter 这样的网站来说,中间件必须是强大的,其中大部分活动都在发送消息,访问该网站的人没有那么多活动。

层之间的互连可能是一种标准的 Web 服务技术,但它可能是一种自定义的东西,可能是 REST 或其他类型的 Web 服务,Web 应用程序(Ruby on Rails)可以在其中访问应用程序数据。

在这种类型的架构中,Rails 无疑将所有 ORM 和数据管理都交给了中间件。

中间件也是一个模糊的术语,可以由许多层组成,因此他们称之为 N 层。我敢打赌,Twitter 的中间件有一个不同的部分专门用于消息传递,而另一部分则用于管理帐户、获取消息等。

这个想法是能够通过添加硬件来向上扩展,你可以让一个服务器集群提供网页服务,另一个集群处理消息传递,然后是一个支持所有这些的数据库服务器集群。这不是一门精确的科学,每种架构都是不同的,但总的来说,这是可以想到的。

于 2009-06-03T15:32:13.850 回答
1

尝试用谷歌搜索“ ruby twitter scala payne ”,你会得到比你可能需要的更多的东西。

我(可能不完整)的理解是,大部分 Twitter“后端”的编码都不是特别好(请参阅Obie Fernandez 的帖子,其中挑选了一些 Alex Payne 的名言)。这似乎至少部分源于该应用程序最初的快速破解性质,该性质已被事件所取代,随着该应用程序的使用开始呈指数增长,他们正在经历相当大的痛苦。当时有很多人指责 Twitter(以及关联的 Rails)“未能扩展”。

Twitter 严重依赖消息队列,据我了解,这部分是用 Scala 编写的,这可能是(没有个人经验)工作的一个非常好的语言选择。

于 2009-06-03T15:43:29.370 回答
1

我的理解是,他们迁移到 Scala 的是消息“队列”:从 Ruby-ORM-DB 支持的解决方案到使用 Scala 的分布式消息传递系统。具有 Twitter 量的服务有特殊要求,他们创建了自己的消息解决方案。被称为“红隼”

于 2009-06-03T22:04:49.577 回答
-1

在这种情况下,消息传递基础设施。他们可能从一些基于 ruby​​ 的自定义解决方案切换到了 JMS 解决方案。

于 2009-06-03T15:27:16.107 回答