我最近遇到了SCALA
,同时经历了twitter和linkedin的设计。 twitter和linkedin的一部分正在转向scala以获得最初在RoR中开发的可伸缩性?
更改编程语言是否可以保证可扩展性?这到底是怎么决定的?在设计系统时,是否可以预先规划如何扩展?
有人可以给我一些见解吗?
干杯。
答案 0 :(得分:3)
这似乎是将巧合和因果关系混为一谈的典型例子。 Twitter改变了他们的架构,解决了他们的可扩展性问题。与此同时,他们也碰巧引入了一种新的编程语言,但这并不意味着这有助于解决他们的问题。
Twitter最初被设想为CMS平台。因此,它被构建为CMS,中心有一个数据库。但是,用户并未将其用作CMS,而是将其用作消息传递平台。数据库几乎是消息传递平台最糟糕的情况:消息传递平台需要中心的消息队列。因此,Twitter编写了一个补充其数据库的消息队列,这有点帮助了他们的可伸缩性问题。这个消息队列实际上是用Ruby编写的。所以,那里没有Scala。 (顺便说一句:该语言的名称是 Scala ,而不是 SCALA 。它不是首字母缩略词。)
此第一个消息队列也存在可伸缩性问题。不是因为它是用Ruby编写的,而是因为这是任何开发人员第一次编写消息队列。所以,他们写了另一个消息队列。这一次,他们拥有第一个消息队列的所有经验,所以这个更好。它碰巧是用Scala写的。
推特在开始时遇到可扩展性问题的原因不是因为Ruby,而是因为之前从未有过Twitter,也没有人知道如何扩展它。
它现在扩展的原因是因为他们学会了如何扩展它,而不是因为Scala。 (实际上,Twitter的很大一部分仍然在Ruby中实现。其他的都是用C ++实现的,而且我相信也有一些Erlang。)
架构规模。良好的语言可以更容易地找到性能和可伸缩性瓶颈(通过简单地查看更少的代码),并使更容易进行大规模的体系结构重构(同样:更少的代码),但最终,它是关于体系结构的。
答案 1 :(得分:1)
一个简单的反例:在Assembly中编写Web服务器实际上是不可能的。
但是,我怀疑转变的原因是因为Scala比Ruby更具可扩展性。我希望这两种语言都有类似的可扩展性因素。我能想到他们为什么要迁移到Scala的唯一原因可能是从Java虚拟机中受益; Java VM调整得非常好,速度很快。一直以来,Scala的语法都比Java更具表现力,而且通常是一种更好的语言。
答案 2 :(得分:0)
良好的可扩展性取决于良好的架构(即不共享任何架构),并牢记可扩展性= / =性能。
此外,由于我总能向您展示如何使用任何语言设计不可扩展的系统,因此,没有语言保证可扩展性。
答案 3 :(得分:0)
性能≠可伸缩性。但是,代码执行速度越快,您需要购买的机器/处理器就越少,Scala的速度就越快。因此,我认为您可以原谅某人不精确地说Scala更具可扩展性,因为它的扩展成本更低。