2010-09-18 41 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更具可擴展性,因爲它的擴展成本較低。