




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、開源毫秒服務(wù)引擎的設(shè)計與實現(xiàn)QQ團隊開發(fā)運營實踐毫秒思路目錄毫秒亮點QQ后臺團隊演進毫秒功能毫秒思路目錄毫秒亮點QQ后臺團隊演進毫秒功能QQ后臺團隊演進黃金時代對美好的追求讓我們創(chuàng)造了毫秒青銅時代約50人的開發(fā)團隊,開發(fā)運營高度依賴開發(fā)和運維白銀時代約200人的開發(fā)團隊,重點服務(wù)集中化,開發(fā)運營流程規(guī)范化模塊B的一個實例模塊A的一個實例后端模塊B基于Tag-Length-Value的二進制協(xié)議模塊B路由Agent定期獲取模塊B路由配置更新青銅時代模塊A多進程異步框架獲取后端B的可用實例模塊B路由配置中心名字發(fā)現(xiàn)和路由服務(wù)每個后端模塊提供自己的AgentAgent標(biāo)準(zhǔn)化:目錄/配置/共享內(nèi)存id
2、沖突各個Agent容錯能力不一當(dāng)模塊需要調(diào)用10+個后端模塊時開發(fā)/運維集體跳起來了模塊A多進程異步框架模塊B0路由Agent模塊B1路由Agent.模塊Bn路由Agent模塊A的一臺服務(wù)器Tag-Length-Value協(xié)議根據(jù)Tag進行擴展,如獲取用戶的簡單資料請求:dwQQ + wTagNum + wTag1 + + wTagN回包:wTagNum + (wTag1 + wLen1 + sValue1) + +(wTagN + wLenN + sValueN)沒有IDL化,無法自動生成打解包代碼重復(fù)代碼無法體現(xiàn)程序員的“價值”各種奇葩的bugTag-Length-Value協(xié)議charb
3、uf64=0;char *p=buf;PACK_PUT_UINT32(p, dwQQ);p+=4;PACK_PUT_UINT16(p, Tags.size();p+=2;for (auto it = Tags.begin(); it !=Tags.end(); it+)PACK_PUT_UINT16(p, *it);p+=2;struct UserBasicInfostd:string sNick;uint16_t wFaceId;uint32_t dwBirthDate; for (uint16_t i = 0; iseq = gen_seq();/后端模塊B請求打包,填入seqPackMo
4、duleB(ctx-seq, req_str);/通過Agent API獲取后端模塊B的地址GetAddr(ModuleB_ID, &(ctx.srvaddr);/框架異步發(fā)包APIAsyncSend(ModuleB_ID, ctx, req_str);回包繼續(xù)處理/框架異步回包處理流程int HandleResponse(Context* ctx, int iID, void* pPkg, intiPkgLen) if(iID = ModuleB_ID) UnPackModuleB(pPkg, iPkgLen);/邏輯繼續(xù)處理.DelContext(ctx);/框架異步超時處理流程int H
5、andleTimeout(Context* ctx, int iID) 當(dāng)一個業(yè)務(wù)邏輯需要調(diào)用10+個后端模塊時,代碼復(fù)雜度成幾何倍數(shù)上升!優(yōu)點缺點名字發(fā)現(xiàn)服務(wù)和路由服務(wù)服務(wù)容錯可運維性差;Agent容錯能力參差不齊TLV協(xié)議可擴展強重復(fù)編碼異步IO遠程調(diào)用高性能隨業(yè)務(wù)流程復(fù)雜度增加,代碼可讀性和可維護性隨成倍數(shù)下降監(jiān)控和告警業(yè)務(wù)定制上報;短信和郵件告警監(jiān)控點、告警點設(shè)置依賴開發(fā)意識;告警多運維累日志有本地和遠程日志;有染色能力定位問題效率低服務(wù)路徑/命名/配置/工具/文檔等沒有統(tǒng)一標(biāo)準(zhǔn)開發(fā)自由發(fā)揮J運維低效青銅時代反思集中化服務(wù)白銀時代模塊A多進程協(xié)程框架后端模塊BProtobuf 協(xié)議名字
6、發(fā)現(xiàn)和路由Agent模塊A的一個實例定期更新后端服務(wù)的路由配置獲取后端服務(wù)的可用實例名字發(fā)現(xiàn)和路由服務(wù)發(fā)布管理統(tǒng)一監(jiān)控統(tǒng)一日志業(yè)務(wù)樹后端服務(wù)擴縮容更新路由模塊B的一個實例白銀時代反思RPC!RPC!RPC!標(biāo)準(zhǔn)化開發(fā)運營體系積重難返集中化服務(wù)后端模塊BProtobuf RPC 協(xié)議定期更新后端服務(wù)的路由配置獲取后端服務(wù)的可用實例名字發(fā)現(xiàn)和路由服務(wù)發(fā)布管理統(tǒng)一監(jiān)控統(tǒng)一日志業(yè)務(wù)樹后端服務(wù)擴縮容更新路由集中化控制臺黃金時代模塊A多進程協(xié)程RPC框架名字發(fā)現(xiàn)和路由Agent模塊A的一個實例模塊B的一個實例毫秒思路目錄毫秒亮點QQ后臺團隊演進毫秒功能毫秒的設(shè)計思路標(biāo)準(zhǔn)化開發(fā)運營集中化管理立體化引擎自由與
7、相互傷害過度自由=相互傷害?模塊提供獨立的名字發(fā)現(xiàn)服務(wù)路由agent公共邏輯沒有抽象或組件化服務(wù)目錄、配置、工具、文檔沒有統(tǒng)一標(biāo)準(zhǔn)關(guān)鍵的監(jiān)控/日志項上報依賴開發(fā)意識從控制臺下載業(yè)務(wù)開發(fā)代碼實現(xiàn)具體業(yè)務(wù)邏輯毫秒標(biāo)準(zhǔn)化開發(fā)rpc GetList(GetListRequest) returns (GetListResponse);制定IDL協(xié)議int CMainLogicServiceMsg:GetList(constGetListRequest* request, GetListResponse* response)/* TODO 業(yè)務(wù)邏輯實現(xiàn),request/response為業(yè)務(wù)業(yè)務(wù)定義的pr
8、otobuf協(xié)議格式* 業(yè)務(wù)可使用框架自帶的監(jiān)控系統(tǒng)ATTR_REPORT(test), 詳見monitor.h*業(yè)務(wù)可使用框架自帶的日志系統(tǒng)NGLOG_DEBUG(test),詳見srpc_log.h*/return 0; 毫秒標(biāo)準(zhǔn)化開發(fā) RPC調(diào)用int CMainLogicServiceMsg:GetList(const GetListRequest* request,GetListResponse* response):crawl:GetListRequest req;:crawl:GetListResponse resp;req.set_type(request-type();/后端
9、模塊請求包/后端模塊返回包/后端模塊請求包設(shè)置int ret = CallMethod(VOA.Crawl,/*后端模塊路由名字*/crawl.CrawlService.GetList,/*RPC函數(shù)名*/req, resp, /*請求包和返回包反填*/20000, PORT_TYPE_TCP); /*超時時間和網(wǎng)絡(luò)類型*/ret非0為后端模塊收包異常;為0進行后續(xù)業(yè)務(wù)邏輯/return 0;毫秒標(biāo)準(zhǔn)化部署上傳新的業(yè)務(wù)插件版本制定發(fā)布計劃進行發(fā)布頁面展示發(fā)布結(jié)果#服務(wù)標(biāo)準(zhǔn)化部署根目錄#C+服務(wù),一級業(yè)務(wù)名|- MainLogic|- bin#二級業(yè)務(wù)名#框架、工具及業(yè)務(wù)插件路徑|- lib#框
10、架依賴庫及業(yè)務(wù)外部代碼庫/資源文件#配置文件路徑#日志路徑#PHP服務(wù),一級業(yè)務(wù)名| |- etc| - log|- VOA_php|- MainLogic|- bin|- lib- php#PHP插件路徑|- etc| - log- agent#集中化服務(wù)Agent路徑業(yè)務(wù)服務(wù)路徑示例/msec|- VOA_cpp集中化管理配置管理協(xié)議管理(IDL)外部代碼庫/資源文件業(yè)務(wù)版本容量管理服務(wù)IP列表擴容/縮容管理發(fā)布管理發(fā)布版本管理及一鍵回滾發(fā)布列表運營層面業(yè)務(wù)層面監(jiān)控集中業(yè)務(wù)監(jiān)控單機監(jiān)控機器基礎(chǔ)監(jiān)控日志集中日志上報立體化引擎立體化引擎 毫秒RPC調(diào)用CallMethod(VOA.Crawl,
11、 crawl.CrawlService.GetList, req,resp, 20000, PORT_TYPE_TCP);通過名字發(fā)現(xiàn)和路由服務(wù)獲取可用實例,并自動容錯通過協(xié)程發(fā)起網(wǎng)絡(luò)請求,獲得和異步調(diào)用接近的性能監(jiān)控上報:請求量,失敗率,超時率,平均時延,請求時延區(qū)間抽樣日志上報,用于展示服務(wù)調(diào)用關(guān)系鏈RPC調(diào)用流程毫秒思路目錄毫秒亮點QQ后臺團隊演進毫秒功能毫秒服務(wù)引擎架構(gòu)名字發(fā)現(xiàn)和路由服務(wù)遠程命令數(shù)據(jù)傳輸服務(wù)集中化服務(wù)管理頁面遠程agentC+/Java/PHP毫秒開發(fā)框架路由agent開發(fā)&運維Rediscluster數(shù)據(jù)服務(wù)#1Rediscluster數(shù)據(jù)服務(wù)#2.Redisclus
12、ter數(shù)據(jù)服務(wù)#NWeb運維管理服務(wù)基于redis cluster 的k-v集群監(jiān)控agent日志agent其中一臺業(yè)務(wù)實例監(jiān)控服務(wù)日志服務(wù)集中化控制臺毫秒服務(wù)引擎展示1. 創(chuàng)建新模塊,定義IDL2. 獲取開發(fā)代碼3. 開發(fā)并生成插件4. 上傳插件及外部代碼庫/資源文件5. 制定發(fā)布計劃6. 觀察監(jiān)控和日志毫秒服務(wù)引擎展示1. 創(chuàng)建新模塊,定義IDL2. 獲取開發(fā)代碼3. 開發(fā)并生成插件4. 上傳插件及外部代碼庫/資源文件5. 制定發(fā)布計劃6. 觀察監(jiān)控和日志毫秒服務(wù)引擎展示1. 創(chuàng)建新模塊,定義IDL2. 獲取開發(fā)代碼3. 開發(fā)并生成插件4. 上傳插件及外部代碼庫/資源文件5. 制定發(fā)布計劃
13、6. 觀察監(jiān)控和日志int CMainLogicServiceMsg:GetTitles(const GetTitlesRequest*request, GetTitlesResponse* response):crawl:GetTitlesRequest req;:crawl:GetTitlesResponse resp;req.set_type(request-type();int ret = CallMethod(VOA.Crawl, crawl.CrawlService.GetMP3List, req, resp, 20000,PORT_TYPE_TCP);/ret非0為后端模塊收包異
14、常;為0進行后續(xù)業(yè)務(wù)邏輯,組response包返回response.set_msg(resp-msg();return 0;毫秒服務(wù)引擎展示1. 創(chuàng)建新模塊,定義IDL2. 獲取開發(fā)代碼3. 開發(fā)并生成插件4. 上傳插件及外部代碼庫/資源文件5. 制定發(fā)布計劃6. 觀察監(jiān)控和日志毫秒服務(wù)引擎展示1. 創(chuàng)建新模塊,定義IDL2. 獲取開發(fā)代碼3. 開發(fā)并生成插件4. 上傳插件及外部代碼庫/資源文件5. 制定發(fā)布計劃6. 觀察監(jiān)控和日志毫秒服務(wù)引擎展示1. 創(chuàng)建新模塊,定義IDL2. 獲取開發(fā)代碼3. 開發(fā)并生成插件4. 上傳插件及外部代碼庫/資源文件5. 制定發(fā)布計劃6. 觀察監(jiān)控和日志毫秒思路
15、目錄毫秒亮點QQ后臺團隊演進毫秒功能毫秒服務(wù)引擎亮點? 高性能協(xié)程RPC框架? 服務(wù)容錯? 過載保護? 調(diào)用鏈框圖? 多開發(fā)語言? KV管理平臺高性能協(xié)程 微線程框架? 微線程狀態(tài)機初始化可運行運行中等待? 上下文管理部分寄存器(callee save)、調(diào)用棧,私有棧幀? 事件調(diào)度Epoll I/O事件驅(qū)動無搶占,無優(yōu)先級結(jié)束服務(wù)容錯模塊A模塊B實例B1IDC1模塊B實例B3IDC3模塊B實例B2IDC2模塊A輪詢調(diào)用模塊B:如果沒有容錯:成功率降至66.7%網(wǎng)絡(luò)中斷或?qū)嵗惓DKA模塊B實例B1IDC1模塊B實例B3IDC3模塊B實例B2IDC2模塊A輪詢調(diào)用模塊B:如果實施了容錯:成功率
16、維持99.9%+網(wǎng)絡(luò)中斷或?qū)嵗惓U埱笊蠞q50%,那么模塊B如果要做到IDC容災(zāi),需要冗余50%實例服務(wù)容錯策略? 快速屏蔽實例? 通過探測包緩慢增加權(quán)重,恢復(fù)屏蔽實例? 后端容量計算及過載保護從socket接收緩沖區(qū)接收用戶請求進行本地邏輯處理發(fā)送請求到后端模塊B,等待后端模塊B返回接收后端模塊B的應(yīng)答應(yīng)答前端用戶,回到步驟1處理下一個請求模塊A的處理流程前端用戶過載介紹什么是過載?為什么要保護?系統(tǒng)接收緩沖區(qū)業(yè)務(wù)處理邏輯模塊B系統(tǒng)發(fā)送緩沖區(qū)模塊A超時時間1s超時時間100ms峰值請求量30/s平均時延20ms過載場景前端用戶業(yè)務(wù)處理邏輯模塊B系統(tǒng)接收緩沖區(qū)系統(tǒng)發(fā)送緩沖區(qū)模塊A超時超時時間1
17、s超時時間100ms峰值請求量200/s1.? 模塊B進行了新特性發(fā)布,請求平均處理時延從20毫秒延長至50毫秒2.? 操作失敗的用戶往往會重試,socket接收緩沖區(qū)一直保持滿的狀態(tài)3.? 當(dāng)一個用戶請求被追加到緩沖區(qū)里后,要等待50秒才能被進程A取出來處理平均時延50ms緩沖區(qū)平均緩存1000個請求沒有過載保護的服務(wù)1009080706050403020100業(yè)務(wù)成功率在此刻過載9080706050403020100實施了過載保護的服務(wù)業(yè)務(wù)成功率100在此刻過載過載保護策略及早拒絕拒絕無效超時請求(T2-T0T超時間隔)處理中繼續(xù)拒絕超時請求(T2.X-T0T超時間隔)控制向后端模塊重試的
18、頻率系統(tǒng)緩沖區(qū)T0操作系統(tǒng)接收框架請求隊列工作進程處理回包給請求端T1框架接收T2工作進程接收T3完成處理T4回包給請求端請求包時序調(diào)用鏈框圖客戶端FriendListSvc.GetFriendList上報量:352平均耗時:53msIMSvc.FriendListSvcFriendDBPxySvc. GetFriendList上報量:352平均耗時:21msIMSvc.FriendDBPxySvc12調(diào)用鏈框圖示例IMSvc.FriendListSvc客戶端FriendListSvc.GetFriendList上報量:352平均耗時:53msIMSvc. UserInfoSvcIMSvc.FriendDBPxySvcIMSvc. StatusSvcUserInfo.GetBasicInfo上報量:343平均耗時:23msStatusSvc.GetUserStatus上報量:343平均耗時:18msFriendDBPxySvc. GetFriendList上報量:352平均耗時:21ms1332調(diào)用鏈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 裝修打折合同協(xié)議書
- 防塵網(wǎng)施工合同協(xié)議書
- 藥店入股合同協(xié)議書圖片
- 財務(wù)成本中的邏輯誤區(qū)分析試題及答案
- 實戰(zhàn)演練2025年VFP考試試題及答案
- 重要稅法考點試題及答案
- 2025論合同法上的任意性規(guī)范
- 母嬰代理分銷合同協(xié)議書
- MySQL數(shù)據(jù)庫安全考點的試題及答案
- C語言在工程管理中的應(yīng)用討論試題及答案
- 2025至2030年中國全身螺旋CT掃描系統(tǒng)行業(yè)投資前景及策略咨詢研究報告
- 1、人教部編版二年級下冊語文看拼音寫詞語(一類生字和書后詞語)
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級下學(xué)期期末試卷(含答案)
- 增材制造在虛擬現(xiàn)實輔助機械制造中的應(yīng)用-洞察闡釋
- 重慶金太陽2025屆高三5月聯(lián)考英語及答案
- 醫(yī)院新建門急診醫(yī)技綜合樓工程施工組織設(shè)計
- 外籍人員雇傭合同(中英文對照)6篇
- 《不可或缺的醫(yī)療保障:課件中的健康險》
- 裝飾裝修三級安全教育培訓(xùn)考試
- 人教版數(shù)學(xué)四年級下冊7、8、9單元綜合測試卷
- 微震監(jiān)測系統(tǒng)課件
評論
0/150
提交評論