從Scala進(jìn)駐Twitter看多語言混雜系統(tǒng)的未來
51CTO編輯推薦:Scala編程語言專題
Twitter是目前最熱的“微博客(Micro Blog)”應(yīng)用,據(jù)說前幾天拒絕了Google出價(jià)10億美元的收購意向。Twitter最早是幾個(gè)工程師為了快速共享AIM(美國排名第一,二的IM,前身是ICQ,被AOL收購后更名為AIM)的狀態(tài)(Status)而開發(fā)的一個(gè)應(yīng)用,使用的是RoR (Ruby on Rail)框架,直到今天Twitter仍然是一個(gè)以Ruby為主要開發(fā)語言的網(wǎng)站,在Twitter服務(wù)器上后臺運(yùn)行著很多進(jìn)程做異步處理。但Ruby的局限性也逐漸暴露出來了,RoR很適合做前端的開發(fā),但對于比較Heavy的后臺處理,Ruby的運(yùn)行性能還是有些問題,然后Twitter將目光轉(zhuǎn)向了Scala。
下面是一些對話的總結(jié):
1)Ruby不太合適開發(fā)長時(shí)間運(yùn)行(Long-Live)的服務(wù)器端程序,但JVM很合適,因?yàn)镴ava有10年的經(jīng)驗(yàn)教訓(xùn)和優(yōu)化,Scala是運(yùn)行在JVM上的,所以天生就有了這個(gè)優(yōu)點(diǎn);
2) Ruby沒有很好的線程(Thread)支持,Ruby多線程會限制在一個(gè)CPU上(新的Ruby應(yīng)該會改善這點(diǎn)吧)且Ruby VM的垃圾收集支持也沒有Java先進(jìn),就造成每個(gè)Ruby進(jìn)程長時(shí)間運(yùn)行后使用的內(nèi)存月來越大;
3) 為什么不是JRuby? JRuby缺乏使用廣泛的Rem支持(很多優(yōu)秀的Ruby包都需要C擴(kuò)展,它們并沒有移植到Java),而且性能也不太理想,比MRI(C實(shí)現(xiàn)的Ruby VM)要慢;
下面是幾點(diǎn)Scala的Concerns:
1) IDE支持還不全面,支持得最好的是IntelliJ IDEA 8.1(自從5年前我殘忍的拋棄JBuilder后,就一直用IntelliJ的IDEA了),Mac 上的Textmate支持的較差, Emacs還行;
2) Scala的構(gòu)建(Build)環(huán)境還是要比Ruby, Python, PHP等動(dòng)態(tài)語言多一回事;
3)一開始就要注意Immutability(不變性),為了穩(wěn)定壓倒一切,當(dāng)然Scala會保證性能底線, JIT compiler對不變對象還有一些性能優(yōu)化,所以盡量用吧;
4) Scala的Actors對處理客戶端連接很合適,(Erlang也是這樣的)大量的連接也是小菜一碟。
最后Twitter的計(jì)劃是到09年底,大部分的流量將Powered by Scala!
我再說一次,未來的系統(tǒng)會是多語言的混雜系統(tǒng),讓專業(yè)的語言(Domain Specific Language , DSL)來實(shí)現(xiàn)系統(tǒng)的某個(gè)部分,比用一種語言到處實(shí)現(xiàn)更現(xiàn)實(shí)。
【相關(guān)閱讀】


























