2010-09-18 54 views
2

我最近在遇到twitter和linkedin的设计时遇到了SCALA。 twitter和linkedin的一部分正在转向Scala以获得最初在RoR中开发的可扩展性?可伸缩性是否依赖于编程语言?

改变编程语言是否保证可伸缩性?这究竟是如何决定的?在设计系统时如何进行规模预先规划?

任何人都可以请给我一些见解吗?

干杯。

回答

3

这似乎是合并巧合和因果关系的典型例子。 Twitter改变了他们的架构,解决了他们的可扩展性问题。同时,他们也碰巧引入了一种新的编程语言,但这并不意味着这是解决问题的责任。

Twitter最初被设想为一个CMS平台。因此,它被设计为一个CMS,并且以数据库为中心。但是,用户并未将其用作CMS,而是将其用作消息传递平台。数据库几乎是消息传递平台最糟糕的情况:消息传递平台需要一个位于中心的消息队列。所以,Twitter写了一个消息队列来补充他们的数据库,这有助于他们的可伸缩性问题。

该消息队列实际上是用Ruby编写的。所以,那里没有Scala。 (顺便说一句:语言的名称是斯卡拉,不SCALA这不是一个缩写。)

这第一消息队列也有可扩展性问题。不是因为它是用Ruby编写的,而是因为这是任何开发人员第一次编写消息队列。于是,他们写了另一个消息队列。这一次,他们有了第一个消息队列的所有经验,所以这个更好。它碰巧写在斯卡拉。

Twitter之所以在开始时出现可扩展性问题并不是因为Ruby,这是因为以前从未有过推特,也没有人知道如何扩展它。

它现在扩展的原因是因为他们学会了如何扩展它,而不是因为Scala。 (事实上​​,大部分的Twitter仍然是用Ruby实现的,其他的用C++来实现,我相信也有一些Erlang。)

架构尺度。良好的语言可以更容易地找到性能和可伸缩性瓶颈(通过简单地查看更少的代码),并使其更容易进行大规模架构重构(再次:更少的代码),但最终是关于架构。

+0

感谢您的信息。一般来说,在设计软件时,架构师是否考虑可扩展性?这是如何估计的? – JPro 2010-09-18 22:43:03

1

一个简单的反例:在Assembly中编写Web服务器是不可能的。

但是,我怀疑这种转变的原因是因为Scala比Ruby更具可扩展性。我希望这两种语言都具有相似的可扩展性因素。我能想到为什么他们想要转移到Scala的唯一原因可能是受益于Java虚拟机; Java VM非常精心调整,速度非常快。一直以来,Scala的语法都比Java更具表现力,并且通常是更好的语言。

+0

那么,在设计软件时是否考虑到了这一点? – JPro 2010-09-18 15:54:08

0

良好的可扩展性取决于良好的架构(即无共享体系结构),并记住可伸缩性=/=性能。另外,由于我总是可以告诉你如何使用任何语言设计一个不可扩展的系统,因此,没有语言保证可扩展性。

0

性能≠可扩展性。但是,代码执行速度越快,您需要购买的机器/处理器就越少,而且Scala速度更快。因此,我认为你可以原谅某人不精确地说Scala更具可扩展性,因为它的扩展成本较低。