工做中主要使用C/C++做爲開發語言。網絡
也曾在PHP,JAVA,JS,LUA上逗留過,但對它們,我沒有花費過多的精力。部分緣由多是因爲工做不能實際使用這些語言來開發項目,而個人理解是它們對個人吸引力還不夠。多線程
可是,當我偶趕上了Erlang,一見如故人,居然能徹底知足我在夢中試圖用C++無數次勾勒的形象,甚至是讓我驚豔的。併發
因而,藉着Armstrong先生的《面對軟件錯誤構建可靠的分佈式系統》和《Erlang程序設計》,與這一故人已暢談兩星期有餘。負載均衡
Erlang爲何吸引我?現作一理性總結:分佈式
1. Erlang的動態類型,模式匹配,基於消息,面向併發的純函數式開發範式( 由這些特性直接導出如下幾點);函數
2. 聽說,Erlang開發效率是C/C++的9倍(待驗證);編碼
3. 用C/C++開發服務端,我須要糾結於採用什麼網絡庫,或是重頭造輪子本身搞一套,還要對數據解包打包等等其餘一些基礎設施作封裝,而後才能開始業務代碼的編寫,而Erlang把這一切都搞定了(IO能力已獲得個人驗證),我能夠一開始就編寫業務相關代碼;spa
4. 用C++編碼,我要用層層的try-catch塊包裹正常的功能代碼,而這樣看起來老是讓人厭煩,Erlang倡導的速錯哲學讓我徹底不用關心什麼地方會有未捕獲的異常拋出把個人程序弄崩了;線程
5. 用C++,有N多個類都有Init(),Start(),Stop(),Restart()方法,最上層的應用有,下層模塊有,模塊中的功能類可能也有這些方法,可怕的重複,而Erlang用監督樹把這個問題完美的抽象了;設計
6. 用C++,我要操心模塊與模塊之間的通訊,採用什麼格式?效率有損失嗎?夠靈活嗎?Erlang的進程間消息通訊立刻就將我解脫了;
7. 用C++開發系統,我要考慮到系統的水平伸縮性,各個功能模塊怎麼部署,還有負載均衡等,而Erlang語言就已經提供了多節點能力,我只須要操心怎樣將系統的全部進程分配在分佈式的多個節點上就能夠了;
8. 用C++開發多線程程序,我要時刻想着同步問題,同時還要絞盡腦汁減小鎖的使用以最大並行化,而用Erlang我只用順序化寫代碼就能夠了;
9. 熱部署,聽起來就讓人頭腦發燙,激動人心,而這用C++來作該有多麻煩(不是不能夠辦到)!
10. 傳說中六個9的可靠性,你信嗎,反正我信。
而事實上,在工做中,我仍是得用C/C++來開發項目,我想不可能說服現有項目組採用Erlang來開發的。可行的方案是,用Erlang快速開發一個demo版本出來,以事實說話。
接下來,應該研究一下Erlang的優秀開源項目了,就從RabbitMQ開始吧。
下載源代碼,找到入口點{mod, {rabbit, []}},先找到那棵樹。。。