erlang應用

alexanderkenndy發表於2012-08-17
.
考慮到現有的專案使用erlang重寫的複雜性和erlang對於某些資料庫支援的弱點,想結合erlang的分散式、程式碼熱載入、處理高併發方面的優勢,和C++在效能上以及大量現有專案上的優勢,實現叢集部署。

考察了erlang和C進行互動的幾種方式,ports受限於物理伺服器分佈,port_driver沒測試成功,應該也是受限於本機,最後選定C nodes方式。

測試了c server和c client兩種方式,感覺如果是server方式,還得用C寫一套處理高併發的網路模組,也不方便升級,erlang的優勢完全沒發揮上,所以選定client方式。

大致的想法是這樣的:
* erlang監聽一個本地埠和一個對外的埠,本地的用於和c node通訊,對外的通過協議和客戶互動。
* c node連線到本地埠後,就在erlang裡面註冊一個名字,這時候對外的埠上收到的資料就根據這個名字發給c node。
* c node上接收到資料以後就放佇列,給執行緒池去消化,執行緒池處理完以後就通過埠發回給erlang節點,當然是使用erl_send (問題1)。
* erlang上面當然是由process“阻塞”處理,它收到結果以後,就發回給客戶端,這個阻塞當然是假的,也正是利用erlang程式設計的便利。
* c node升級,只需要另開一個程式,註冊另一個名字,比如名字加上版本號,連到erlang節點,再使用熱載入把erlang程式碼更新,就可以在不停機的情況下更新伺服器。更新完了再停掉舊版本的c node。
* 增加協議格式等操作都交給erlang了,C node保持不變。

相關文章