資源描述:
《開源毫秒服務(wù)引擎的設(shè)計(jì) 與實(shí)現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、開源毫秒服務(wù)引擎的設(shè)計(jì)與實(shí)現(xiàn)QQ團(tuán)隊(duì)開發(fā)運(yùn)營實(shí)踐楊宇毫秒服務(wù)引擎技術(shù)負(fù)責(zé)人目錄QQ后臺團(tuán)隊(duì)演進(jìn)毫秒思路毫秒功能毫秒亮點(diǎn)目錄QQ后臺團(tuán)隊(duì)演進(jìn)毫秒思路毫秒功能毫秒亮點(diǎn)QQ后臺團(tuán)隊(duì)演進(jìn)青銅時(shí)代約50人的開發(fā)團(tuán)隊(duì),開發(fā)運(yùn)營高度依賴開發(fā)和運(yùn)維白銀時(shí)代約200人的開發(fā)團(tuán)隊(duì),重點(diǎn)服務(wù)集中化,開發(fā)運(yùn)營流程規(guī)范化黃金時(shí)代對美好的追求讓我們創(chuàng)造了毫秒青銅時(shí)代模塊A基于Tag-Length-Value多進(jìn)程異步框架的二進(jìn)制協(xié)議后端模塊B獲取后端B的可用實(shí)例定期獲取模塊模塊B路模塊B路由AgentB路由配置更新由配置中心模塊A的一個(gè)實(shí)例模塊B的一個(gè)實(shí)例名字發(fā)現(xiàn)和路由服務(wù)模塊A多進(jìn)程異步框架每個(gè)后端模
2、塊提供自己的AgentAgent標(biāo)準(zhǔn)化:目錄/配置/共享內(nèi)存id沖突各個(gè)Agent容錯(cuò)能力不一模塊B路由0Agent模塊B路由當(dāng)模塊需要調(diào)用10+個(gè)后端模塊時(shí)1Agent開發(fā)/運(yùn)維集體跳起來了...模塊B路由nAgent模塊A的一臺服務(wù)器Tag-Length-Value協(xié)議根據(jù)Tag進(jìn)行擴(kuò)展,如獲取用戶的簡單資料請求:dwQQ+wTagNum+wTag1+…+wTagN回包:wTagNum+(wTag1+wLen1+sValue1)+…+(wTagN+wLenN+sValueN)沒有IDL化,無法自動生成打解包代碼重復(fù)代碼無法體現(xiàn)程序員的“價(jià)值”各種奇葩的bugTag-Len
3、gth-Value協(xié)議根據(jù)Tag進(jìn)行擴(kuò)展,如獲取用戶的簡單資料請求:dwQQ+wTagNum+wTag1+…+wTagN回包:wTagNum+(wTag1+wLen1+sValue1)+…+(wTagN+wLenN+sValueN)請求回包c(diǎn)harbuf[64]={0};structUserBasicInfochar*p=buf;{PACK_PUT_UINT32(p,dwQQ);p+=4;std::stringsNick;PACK_PUT_UINT16(p,Tags.size());p+=2;uint16_twFaceId;for(autoit=Tags.begin();it
4、!=uint32_tdwBirthDate;Tags.end();it++)};{…PACK_PUT_UINT16(p,*it);p+=2;for(uint16_ti=0;i5、一seqiPkgLen){ctx->seq=gen_seq();if(iID==ModuleB_ID){//后端模塊B請求打包,填入seqUnPackModuleB(pPkg,iPkgLen);PackModuleB(ctx->seq,req_str);//邏輯繼續(xù)處理...//通過AgentAPI獲取后端模塊B的地址}GetAddr(ModuleB_ID,&(ctx.srvaddr));DelContext(ctx);//框架異步發(fā)包API}AsyncSend(ModuleB_ID,ctx,req_str);//框架異步超時(shí)處理流程intHandleTimeout(Cont
6、ext*ctx,intiID){}當(dāng)一個(gè)業(yè)務(wù)邏輯需要調(diào)用10+個(gè)后端模塊時(shí),代碼復(fù)雜度成幾何倍數(shù)上升!青銅時(shí)代反思優(yōu)點(diǎn)缺點(diǎn)可運(yùn)維性差;Agent容錯(cuò)能力參差不名字發(fā)現(xiàn)服務(wù)和路由服務(wù)服務(wù)容錯(cuò)齊TLV協(xié)議可擴(kuò)展強(qiáng)重復(fù)編碼隨業(yè)務(wù)流程復(fù)雜度增加,代碼可讀性異步IO遠(yuǎn)程調(diào)用高性能和可維護(hù)性隨成倍數(shù)下降監(jiān)控點(diǎn)、告警點(diǎn)設(shè)置依賴開發(fā)意識;監(jiān)控和告警業(yè)務(wù)定制上報(bào);短信和郵件告警告警多運(yùn)維累日志有本地和遠(yuǎn)程日志;有染色能力定位問題效率低服務(wù)路徑/命名/配置/工具/開發(fā)自由發(fā)揮J運(yùn)維低效文檔等沒有統(tǒng)一標(biāo)準(zhǔn)白銀時(shí)代模塊AProtobuf協(xié)議多進(jìn)程協(xié)程框架后端模塊B獲取后端服務(wù)的可用實(shí)例名字發(fā)現(xiàn)和路由
7、Agent后端服務(wù)擴(kuò)模塊A的一個(gè)實(shí)例縮容更新路由模塊B的一個(gè)實(shí)例定期更新后端服務(wù)的路由配置名字發(fā)業(yè)務(wù)樹發(fā)布管理現(xiàn)和路統(tǒng)一監(jiān)控統(tǒng)一日志由服務(wù)集中化服務(wù)白銀時(shí)代反思RPC!RPC!RPC!標(biāo)準(zhǔn)化開發(fā)運(yùn)營體系積重難返黃金時(shí)代模塊A多進(jìn)程協(xié)程RPC框架ProtobufRPC協(xié)議后端模塊B獲取后端服務(wù)的可用實(shí)例名字發(fā)現(xiàn)和路由Agent后端服務(wù)擴(kuò)模塊A的一個(gè)實(shí)例縮容更新路由模塊B的一個(gè)實(shí)例定期更新后端服務(wù)的路由配置名字發(fā)集中化業(yè)務(wù)樹發(fā)布管理現(xiàn)和路統(tǒng)一監(jiān)控統(tǒng)一日志控制臺由服務(wù)集中化服務(wù)目錄QQ后臺團(tuán)隊(duì)演進(jìn)毫秒思路毫秒