物聯網(M2M)是當前信息化的一個熱點方向。具體到不同的行業就體現為各種不同的解決方案:遠程電力控制系統、智能家居、智能交通、現代物流、遠程可視化醫療系統等等。。。
它們的一些共性是:
1. 系統由前端設備、遠程數據中心、和后端可視化終端組成。
2. 前端由各種各樣的嵌入式系統組成,集成各種專用數據模塊或者傳感器。
3. 系統用戶最多可達到百萬甚至千萬級別,活躍用戶可達到數十萬,並發峰值在C10K級別。
4. 設備實時性高,實時數據可達秒級別,每個數據包一般都經過壓縮或者編碼,內容很小。
5. 遠程設備通過局域網或者移動網絡連接到internet,通過移動網絡的設備對數據量有嚴格要求,比如每月流量最大不超過30M。
6. 因為要做到實時雙向數據同步及反饋,所有的設備幾乎都實時在線。
...
目標
為了實現高並發、多用戶高實時的數據服務器,決定基於開源框架,開發一個可兼容特定http請求和sock服務的混合服務器,主要面向物聯網分布式場景。
風險評估
優點:
1. 目前網站的用戶雖然多,但業務邏輯和數據處理相對簡單和單一,定制的服務器可以有更優化的邏輯。
2. 基於優秀的開源框架,可以體現更好的並發性。
3. 通過可定制的網絡數據處理邏輯將提供更好的實時性和用戶體驗。
4. 定制的服務器可方便地應用於其他類似行業以及解決方案中。
挑戰:
1. 新系統短期很難穩定,增加運維風險
2. 增加開發代價
3. 要求有較高的系統架構能力和實現能力
參考模型
1)基於libev庫
2)參考nginx
3)參考lighttpd
4)參考libebb
系統概要框架
系統詳細設計
關於架構的詳細設計,可參看這篇文章 http://www.cnblogs.com/inteliot/archive/2012/04/21/2461031.html ,包括細節都已經很詳細了
實現
現在基本通訊框架已經ok了。master-worker模式,短連接模式下普通機器配置能達到20K。
下來開始整合業務邏輯,和mysql了。
mysql部分架構准本參考篇帖子:http://www.cnblogs.com/inteliot/archive/2012/04/19/2457108.html
整個過程希望只對cache操作,調高寫數據庫的瓶頸,最終的方案,要看研究結果,沒准還是用Redis呢。。。
優化方向
1)分層 、集群
2)優化memcache層 ,分析數據流程和業務邏輯,希望整合 no-sql 等適合大數據量高性能的哈希數據庫,進一步提高系統速率。
3)可靠性、熱備、容災
方案調研的過程中,發現已經有人在嘗試類似的方案了,想法何其相似啊:
http://www.cnblogs.com/inteliot/archive/2012/04/21/2461042.html
持續更新中。。。