【SDCC 2016】Erlang 編程語言專題:Erlang 在數據鏈路、分佈式系統的落地實踐

【CSDN現場報道】2016年11月18日-20日,由CSDN重磅打造的年終技術盛會 —— 「2016中國軟件開發者大會」(Software Developer Conference China 2016,簡稱SDCC 2016)在北京京都信苑飯店隆重舉行。本屆大會雲集了100多位國內外頂尖專家和技術大牛,共設新趨勢和新實踐2大主題會場,14個技術專題。面向國內外的中高端技術人員,聚焦最前沿技術及一線的實踐經驗,助力企業的技術升級和改造、全面提升技術人員的綜合實力。


11月18日,在上午 Keynote 上,首次到訪中國的 Erlang 之父 Joe Armstrong 以《如何設計高可靠的分佈式並行系統》爲主題,切身分享了自身深厚的並行編程經驗。更在下午的 Erlang 編程語言專題論壇上,以詼諧的語言分享了自己從「Young Me」到「Dr Me」 的多彩程序人生,以及 Erlang 的設計、開源、使用。並和以阿里雲 RDS 技術專家黃大鵬(武藏)、環信首席架構師兼IM技術總監梁宇鵬、Yunba 雲巴 CEO 張虎爲代表的國內 Erlang 企業開發團隊代表一起圍繞着 Erlang 與編程語言設計實踐以及並行編程進行了深度的交流與探討。本次會議由火幣網 CTO 程顯峯主持。

Erlang 語言設計者 Joe Armstrong

Erlang 之父 Joe Armstrong:Erlang 和我的編程人生

Armstrong 先生的分享主要分爲兩部分,一部分包含他是如何思考和解決問題的,另一部分是 Erlang 語言的演進。不過,用 Armstrong 先生在現場的原話來說,則是這樣的:

今天我總共有兩個話題要與大家分享,第一個是我的頭髮是怎麼白的,還有我和我的博士生們交流研究過的諸多問題。另外一個就是我們在編程的時候經歷過哪些失誤與失敗,以及這些方面實實在在的例子。

出生於1950年的 Armstrong 先生在他數十年的生命中所發生的種種事蹟讓我們津津樂道,而在他原本的人生設想裏是1972年到75年攻讀物理學博士,1985年成爲教授,2000左右的時間獲得諾貝爾獎。即使是總會有各種俗事紛擾,包括從「Smal stuff」到「Big stuff」在內的各式各樣甚至於無關緊要的小事情,但這長期的計劃卻未變過。

然而,萬萬沒想到,在1975年出現了「(Really)Run out of money」的窘境,而他也由此轉向了計算機科學領域。從1986年希望有一個不錯的容錯處理系統創造了 Erlang,到愛立信暫時禁用 Erlang,繼而 Erlang 開源,自己被 Fired、成爲教授,認爲「PPT 總是會摧毀人們的創造力」的 Armstrong 先生用手繪圖裏的哭和笑表情帶過了箇中曲折。

而在編程方面,Armstrong 先生分享到:

  1. 人們總認爲產品開發流程是這樣:Specify→Build→Test→Sell→$$$,然而實際上卻是這樣的:start→??????????→Product;
  2. 學習語言從一個問題開始,比如 Xcode:How can we confuse people? Erlang:How can we program telephony?
  3. 關於文檔:Read the code;
  4. 關於性能:Wait 10 years for x1000 improvement,在未來二十年,所有與關鍵性能相關的軟件將與硬件相融合。

阿里雲 RDS 技術專家黃大鵬(武藏):Erlang 在雲上數據鏈路的應用

阿里雲 RDS 技術專家 黃大鵬(武藏)

PPT 下載:《Erlang 在雲上數據鏈路的應用

當今雲上數據鏈路面臨着數據庫服務極其嚴苛的可用性要求、雲上業務多樣性帶來的困難、超高併發帶來的問題、運維實體從幾十到幾十萬帶來的問題、資源傾斜、低成本與高效率的矛盾等挑戰。作爲高性能、高可用的平臺,Erlang提供了相關的基礎設施,負責任務調度、內存管理、應用隔離、網絡框架、高可用框架、代碼熱替換,由此武藏與其團隊開始了 Erlang 在雲上數據鏈路的應用實踐探索。比如在高可用方面,當硬件、操作系統故障,內部邏輯 Bug 造成假死,可在檢查到異常後,採取將 SLB 路由摘掉、流量導走的措施。而在熱升級方面,武藏建議:

  1. 儘量有soft_purge,purge不成功不要強行替換;
  2. 數據與應用邏輯的兼容,寫好code_change;
  3. 避免模塊間循環依賴;
  4. 動態啓動的進程可能不會執行code_change。

環信首席架構師兼 IM 技術總監梁宇鵬:Erlang 在大規模分佈式系統中的問題與應對

環信首席架構師兼 IM 技術總監 梁宇鵬

首先,在架構實踐方面,以會話存儲層設計爲例,Mnesia 能處理麼?在沒有持久存儲的情況下能,但是節點宕機時會遇到全局鎖,從而導致所有節點都會阻塞引發整體集羣無法訪問,以自帶的分區功能減少每個節點數量。隨後,梁宇鵬對 Erlang 在大規模分佈式系統中的運用進行了具體分享,包括分佈式設計、全連接網絡、進程調度等方面,他表示:調度的本質是計算資源的分配,公平才能保障系統的實時性,開發者需謹慎使用進程組,比如 Erlang的 Kafka client——Ekaf會把 pg2 把所有的調用方綁在一起,導致在網絡閃斷或 Kafka Server 端出問題時,全集羣的鎖定,對此,可將進程信息改爲本地存儲,該方案已開源。

Yunba 雲巴 CEO 張虎:實時系統 Erlang 實踐

Yunba 雲巴 CEO 張虎

PPT 下載:實時系統 Erlang 實踐

在面臨支持億級用戶、線性擴容、高可用、軟實時等方面的挑戰時,有着異步 IO(Libev/epoll、Node.js)、輕量級進程(Erlang、Golang、Akka)等可選方案,而 Erlang 可公平調度、支持分佈式、進程獨立的 GC、OTP,基於此張虎具體分享了其團隊在 Erlang 的實踐,主要爲:

  1. OTP Applications:每一個 模塊封裝一個 Application(Supervisor),業務邏輯由 Worker 實現,對外提供 RPC 接口;
  2. 接入負載均衡模塊:實時監控,動態添加、移除接入點,每一個接入點用一個 Erlang 進程監控;
  3. 主邏輯模塊:每個 Worker 每次處理一個業務請求;
  4. 大規模 publish:目標客戶端數在200+,Worker 把 publish 分片,每個分片由一個 Erlang 進程處理;
  5. 離線消息性能問題:無線網絡抖動頻現,需保證離線消息送達率,一次 publish 有可能大量離線消息。

最後,張虎還就「爲什麼 Erlang‘難學’」這個問題分享了自己的經驗,Erlang並不難學,首先,學習者對於函數式語言需要有幾天的適應期,但還是有很多人都在工具鏈處放棄了。而云巴團隊之所以會選擇 Erlang 是因爲其所帶來的便利性,但工具鏈的確是阻礙 Erlang 普及的一大因素。

社區交流:關於 Erlang 你最關心的問題

最後,在火幣網CTO程顯峯的主持下,Erlang設計者Joe Armstrong、阿里雲RDS技術專家黃大鵬(武藏)、環信首席架構師兼IM技術總監梁宇鵬、Yunba雲巴CEO張虎一起圍繞着 Erlang 與編程語言設計實踐以及並行編程進行了深度的交流與探討。

直至今日,Armstrong 先生依然會寫代碼,也在現場分享了他的一天,從起牀、看新聞,彈1小時左右的鋼琴這些技術之外的事情,到突然之間迸發的靈感並將之付諸實踐。對於編程語言,Armstrong 先生認爲「編程語言該生而簡單,語言需要保持簡約性,必須簡單好用,才能方便開發者的學習」。


更多精彩內容,請關注圖文直播專題:SDCC 2016中國軟件開發者大會,微博:@CSDN研發頻道,訂閱CSDN官方微信公衆號(ID:CSDNnews),即時獲取大會動態。