【问题标题】:What does middleware mean for Twitter and Scala?中间件对 Twitter 和 Scala 意味着什么?
【发布时间】:2010-10-31 00:44:36
【问题描述】:
参考 another SO question 我收到了 this article 关于 Twitter 从 Rails 迁移到 Scala 的信息,文章中有这样的评论:
到今年年底,佩恩说,
Twitter希望拥有它的全部
中间件基础设施及其 API
移植到新语言。红宝石将
仍然存在,但仅在前端。
“我们仍然对 Rails 感到满意
构建面向用户的功能...
性能方面,对人们来说很好
点击网页。这是
繁重的,异步处理
我们搬走的东西
来自。”
中间件在这里是什么意思?在前端使用 Ruby 到底意味着什么?这是否意味着前端的导轨很少使用 ORM?它如何与 scala“相遇”?这条评论是什么意思?
只是想了解架构。谢谢。
【问题讨论】:
标签:
ruby-on-rails
ruby
architecture
scala
twitter
【解决方案1】:
它是N-Tier Architecture 的一种形式。最初,大多数站点将作为 2 层架构开始,具有 Web 服务器和数据库。网络服务器将提供用户看到的页面,而数据库由这些动态页面访问。
当一个架构被分成多层时,通常你会在前端有一个 Web 应用程序,并带有某种 Web 应用程序将调用的应用程序服务器。此应用程序服务器包含业务逻辑并使应用程序正常运行。应用程序的“面孔”只是让事物看起来很漂亮,并对其进行格式化以显示给用户。
应用程序服务器,或“中间件”,只是 Web 服务器可以调用的函数的集合。对于像 twitter 这样的网站来说,中间件必须是强大的,因为大部分活动都在发送消息,访问该网站的人没有那么多活动。
层之间的互连可能是一种标准的 Web 服务技术,但也可能是一种自定义的东西,可能是 REST 或其他类型的 Web 服务,其中 Web 应用程序(Ruby on Rails)可以访问应用程序数据。
在这种类型的架构中,Rails 无疑将所有 ORM 和数据管理都交给了中间件。
中间件也是一个模糊的术语,可以由许多层组成,因此他们称之为 N-Tier。我敢打赌,Twitter 的中间件有一个不同的部分专门用于消息传递,而另一部分则用于管理帐户、获取消息等。
这个想法是能够通过添加硬件来向上扩展,您可以在其中拥有一个服务器集群来提供网页服务,另一个集群处理消息传递,然后是一个支持所有这些的数据库服务器集群。这不是一门精确的科学,每种架构都不同,但一般来说,可以这样想。
【解决方案2】:
尝试在谷歌上搜索“ruby twitter scala payne”,您将获得比您可能需要的更多信息。
我(可能不完整)的理解是,Twitter 的大部分“后端”编码都不是特别好(请参阅Obie Fernandez' post,其中挑选了一些 Alex Payne 引用)。这似乎至少部分源于该应用程序最初的快速破解性质,该性质已被事件所取代,随着该应用程序的使用开始呈指数增长,他们正在经历相当大的痛苦。当时有很多人指责 Twitter(以及关联的 Rails)“未能扩展”。
Twitter 严重依赖消息队列,据我了解,这部分是用 Scala 编写的,这可能是(没有个人经验)工作的一个非常好的语言选择。
【解决方案3】:
我的理解是,他们迁移到 Scala 的是消息“队列”:从 Ruby-ORM-DB 支持的解决方案到使用 Scala 的分布式消息传递系统。
具有 Twitter 量的服务有特殊要求,他们创建了自己的消息解决方案。叫“红隼”
【解决方案4】:
本例中的消息传递基础架构。他们可能从一些基于 ruby 的自定义解决方案切换到了 JMS 解决方案。