天天看點

Scala在Twitter的應用

Twitter是目前最熱的“微部落格(Micro Blog)”應用,據說前幾天拒絕了Google出價10億美元的收購意向。Twitter最早是幾個工程師為了快速共享AIM(美國排名第一,二的 IM,前身是ICQ,被AOL收購後更名為AIM)的狀态(Status)而開發的一個應用,使用的是RoR (Ruby on Rail)架構,直到今天Twitter仍然是一個以Ruby為主要開發語言的網站,在Twitter伺服器上背景運作着很多程序做異步處理。 但Ruby 的局限性也逐漸暴露出來了,RoR很适合做前端的開發,但對于比較Heavy的背景處理,Ruby的運作性能還是有些問題,然後Twitter将目光轉向了Scala。

下面是一些對話的總結:

1) Ruby不太合适開發長時間運作(Long-Live)的伺服器端程式,但JVM很合适,因為Java有10年的經驗教訓和優化,Scala是運作在JVM上的,是以天生就有了這個優點;

2)  Ruby沒有很好的線程(Thread)支援,Ruby多線程會限制在一個CPU上(新的Ruby應該會改善這點吧)且Ruby VM的垃圾收集支援也沒有Java先進,就造成每個Ruby程序長時間運作後使用的記憶體月來越大;

3)  為什麼不是JRuby? JRuby缺乏使用廣泛的Rem支援(很多優秀的Ruby包都需要C擴充,它們并沒有移植到Java),而且性能也不太理想,比MRI(C實作的Ruby VM)要慢;

下面是幾點Scala的Concerns:

1) IDE支援還不全面,支援得最好的是IntelliJ IDEA 8.1(自從5年前我殘忍的抛棄JBuilder後,就一直用IntelliJ的IDEA了),Mac 上的Textmate支援的較差, Emacs還行;

2) Scala的建構(Build)環境還是要比Ruby, Python, PHP等動态語言多一回事;

3) 一開始就要注意Immutability(不變性),為了穩定壓倒一切,當然Scala會保證性能底線, JIT compiler對不變對象還有一些性能優化,是以盡量用吧;

4) Scala的Actors對處理用戶端連接配接很合适,(Erlang也是這樣的)大量的連接配接也是小菜一碟。

最後Twitter的計劃是到09年底, 大部分的流量将Powered by Scala!

我再說一次,未來的系統會是多語言的混雜系統,讓專業的語言(Domain Specific Language , DSL)來實作系統的某個部分,比用一種語言到處實作更現實。

繼續閱讀