從Scala進駐Twitter看多語言混雜系統的未來
51CTO編輯推薦:Scala編程語言專題
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)來實現系統的某個部分,比用一種語言到處實現更現實。
【相關閱讀】