騰訊QQ團隊開源分布式后臺服務引擎msec
毫秒服務引擎(msec, 取英文名Mass Service Engine in Cluster的首字母組合)是騰訊的一個開源框架(將于12月左右開源),適用于在廉價機器組成的集群上開發和運營分布式后臺服務。毫秒服務引擎集RPC、名字發現服務、負載均衡、業務監控、灰度發布、容量管理、日志管理、key-value存儲于一體,目的是提高開發與運營的效率和質量。
毫秒服務引擎的創作沖動和構建經驗,來自QQ后臺團隊超過10年的運營思考。它是一整套解決方案,但也可以拆分的來使用其中的監控、key-value存儲單品。
架構
如下圖,整個系統由下面幾部分組成。
web console:整個系統的運營管理中心。主要是:
-
Tomcat提供web管理界面,管理的數據保存在MySQL里。
-
LB是名字發現服務和負載均衡,remote_shell是遠程文件傳輸與遠程命令執行服務。
log服務器:提供業務log的存儲和查詢服務。Log存儲在MySQL表里。
monitor服務器:提供業務上報信息的存儲和查詢服務。業務上報信息存儲在內存里,推薦內存8G~16G。定時dump到磁盤的方式防止數據掉電丟失。
業務運營服務器:部署開發框架和業務邏輯代碼,處理業務請求。
key-value存儲服務:相對整個框架比較獨立,按需選用。
典型用戶群體
使用毫秒服務引擎,用戶可以快速擁有一套具備監控、名字發現服務、負載均衡、灰度發布、配置管理、日志、kv存儲等功能的系統化的開發與運營框架,特別適合互聯網初創公司。
10年的海量服務開發運營經驗和教訓使得我們深刻的認識到:
-
要盡早規范團隊的開發服務框架,避免到了后期,各種開發語言混雜、各類存儲組件充斥、重復編碼、每個模塊形態不統一、文檔缺失、監控癱瘓、人員離職造成大量信息丟失,最后積重難返、痛苦不堪。
-
沒有框架來規范,團隊的隨意性就太大,合作效率就大打折扣,甚至于內耗、反復的挖坑填坑,系統的成敗過于依靠人的意識和水平。
-
規范,不能靠文檔、不能靠勞動紀律、不能靠苦口婆心、不能靠人員意識、不能靠運動式的整頓,要靠技術框架上切實的限制與貼心保護。
特點與優勢
-
模塊間訪問采用RPC的方式,開發者不用關注網絡與報文格式,像寫單機程序一樣開發分布式服務。
-
負載自動均衡與容錯,對于單機故障、局部網絡波動等狀況自動應對,服務高可用性。
-
支持C/C++與Java語言,后續還將繼續豐富;如果選擇C/C++語言,支持協程,兼具開發和運行效率。
-
Web化的管理界面,在web界面完成配置、發布、監控、日志、Key-value存儲集群管理等所有操作。
-
需要復雜部署的服務器都采用Docker鏡像的方式安裝,使得部署與上手非常容易。
-
相比使用其他開源組件拼湊起來的解決方案,毫秒服務引擎更加的體系化,對團隊的規范更加到位。
功能初探
1. 服務標準化
在毫秒服務引擎里,每個服務的配置都被web化的集中管理起來,每個服務都“長”的一樣,使得開發和運維的效率大大提高,包括:
-
該服務部署在哪些IP上?
-
一個服務有且只有一個配置文件
-
該服務提供的接口通過Protocol buffer文件來定義
-
引用了哪些外部庫?例如OpenSSL
-
業務邏輯和基礎框架分離,業務邏輯以插件形式提供
每個服務部署的目錄結構都是確定的:
如上圖所示。
-
部署的目錄都是/msec/一級業務名/二級業務名
-
都包含bin etc log 等幾個目錄
-
bin里面是啟停腳本、業務插件msec.so和外部庫(如果有)
-
etc里面是配置文件config.ini
-
log里面是本地的日志文件
另外,程序員不能隨意打破上面的方式。例如臨時的另外搞一個自己配置文件什么的,他如果這樣做,那下次發布的時候目錄會被覆蓋,個性化的東西會被刪除掉。
2. RPC
在毫秒服務引擎里,服務間的調用都是統一的RPC方式,統一采用CallMethod()函數的方式,避免代碼千奇百怪;按服務名字調用和接口名調用。
RPC背后的路由算法對于單機故障、網絡局部波動等異常,自動容錯。簡單的說,路由算法按一定的規則輪轉的選擇被調用模塊的接口機,并統計過去一段時間的調用成功率、時延信息,根據這些信息調整該接口機被選擇到的比例。如果某個接口機故障了,那么就不會發送請求給它,從而實現自動容錯。
毫秒引擎框架本身,在RPC執行的時候,就上報了很多基礎屬性和日志,這樣保證了服務監控和告警等運營措施不依賴與人的意識。下圖是叫做getMP3List這樣一個RPC調用的請求數和成功數,這些是不需要業務開發者工作就自動上報。
每個請求有唯一ID來標識,通過該ID,毫秒引擎可以在框圖中直觀的呈現該請求經過的模塊、模塊間的RPC名字等信息,這個同樣不需要業務開發者的工作就自動實現:
3. 灰度發布與監控
在毫秒服務引擎里,可以輕松做到灰度發布和監控。
在服務配置管理頁點擊“制定發布計劃”
選擇這一次灰度要發布的目標機器和發布類型:
在接下來的向導中選擇正確版本的配置文件、外部庫、業務插件等,這樣就完成了發布計劃的制作:
接著,點擊菜單 “運維->發布”,可以查詢所有發布計劃,對于已經發布的計劃,可以做回滾操作。點擊詳情可以查看發布計劃更詳細信息,并執行發布:
除了前面提到的RPC和框架本身自動上報的一些信息,還支持業務自定義上報信息(例如我想上報第28級VIP用戶登錄的次數),且支持對于關鍵指標的波動、最大值、最小值設置告警:
4. KV存儲系統
KV存儲幾乎是互聯網后臺服務必備的服務。 毫秒服務引擎在redis cluster的基礎上提供了一個運維簡單的KV存儲服務,實現了運維web化,并加上了集群的監控。
集群概要狀態查看:
可以在web上方便的完成日常的運維操作:新搭集群、擴縮容、故障機器的恢復:
請求量、內存使用、CPU等各種狀態信息可直觀監控,也可以按IP粒度查看。
來自:http://mp.weixin.qq.com/s?__biz=MzA5Nzc4OTA1Mw==&mid=2659598197&idx=1&sn=d32f74909ad70c1841f9fa5637cd893f&scene=0#wechat_redirect