- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QQ高效团队开发实践:开源毫秒服务引擎的设计与实现课案
开源毫秒服务引擎的设计
与实现
QQ团队开发运营实践
毫秒思路
目录
毫秒亮点
QQ后台团队演进
毫秒功能
毫秒思路
目录
毫秒亮点
QQ后台团队演进
毫秒功能
QQ后台团队演进
黄金时代
对美好的追求让我们创造了毫秒
青铜时代
约50人的开发团队,开发运营高度依赖
开发和运维
白银时代
约200人的开发团队,重点服务集
中化,开发运营流程规范化
模块B的一个实例
模块A的一个实例
后端模块B
基于Tag-Length-Value
的二进制协议
模块B路由Agent
定期获取模块
B路由配置更新
青铜时代
模块A
多进程异步框架
获取后端B的可用实例
模块B路
由配置中心
名字发现和路由服务
每个后端模块提供自己的Agent
Agent标准化:目录/配置/共享内存id冲突
各个Agent容错能力不一
当模块需要调用10+个后端模块时
开发/运维集体跳起来了
模块A
多进程异步框架
模块B0路由
Agent
模块B1路由
Agent
...
模块Bn路由
Agent
模块A的一台服务器
Tag-Length-Value协议
根据Tag进行扩展,如获取用户的简单资料
请求:dwQQ + wTagNum + wTag1 + … + wTagN
回包:wTagNum + (wTag1 + wLen1 + sValue1) + …+(wTagN + wLenN + sValueN)
没有IDL化,无法自动生成打解包代码
重复代码
无法体现程序员的“价值”
各种奇葩的bug
Tag-Length-Value协议
char
buf[64]={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 UserBasicInfo
{
std::string sNick;
uint16_t wFaceId;
uint32_t dwBirthDate;
};
…
for (uint16_t i = 0; i wTagNum; i++) {
PACK_GET_TLV(tlv, p);
switch(tlv.tag) {
//依据Tag反填UserBasicInfo里的字段
}
}
请求
根据Tag进行扩展,如获取用户的简单资料
请求:dwQQ + wTagNum + wTag1 + … + wTagN
回包:wTagNum + (wTag1 + wLen1 + sValue1) + …+(wTagN + wLenN + sValueN)
回包
异步IO
发送
//新建一个上下文,用户自行放入更多信息
Context* ctx = new Context();
//生成唯一seq
ctx-seq = gen_seq();
//后端模块B请求打包,填入seq
PackModuleB(ctx-seq, req_str);
//通过Agent API获取后端模块B的地址
GetAddr(ModuleB_ID, (ctx.srvaddr));
//框架异步发包API
AsyncSend(ModuleB_ID, ctx, req_str);
回包继续处理
//框架异步回包处理流程
int HandleResponse(Context* ctx, int iID, void* pPkg, int
iPkgLen) {
if(iID == ModuleB_ID) {
UnPackModuleB(pPkg, iPkgLen);
//逻辑继续处理...
}
DelContext(ctx);
}
//框架异步超时处理流程
int HandleTimeout(Context* ctx, int iID) {}
当一个业务逻辑需要调用10+个后端模块时,代码复杂度成几何倍数上升!
优点
缺点
名字发现服务和路由服务
服务容错
可运维性差;Agent容错能力参差不
齐
TLV协议
可扩展强
重复编码
异步IO远程调用
高性能
随业务流程复杂度增加,代码可读性
和可维护性随成倍数下降
监控和告警
业务定制上报;短信和邮件告警
监控点、告警点设置依赖开发意识;
告警多运维累
日志
有本地和远程日志;有染色能力
定位问题效率低
您可能关注的文档
- 初级汉语口语_第九课.ppt
- QC小组活动(提高混凝土面板质量)-2014.doc
- 初级统计及回归分析.ppt
- 初设结构以及建筑节能计算课件.doc
- 初设变更修改课件.doc
- 初识c语言课件.ppt
- QC成果-提高水泥稳定碎石路面基层质量课案.docx
- QC新旧7大手法课案.ppt
- 初设变更说明书(修改后)课件.doc
- 初级技能操作新.ppt
- 2024年学校党总支巡察整改专题民主生活会个人对照检查材料3.docx
- 2025年民主生活会个人对照检查发言材料(四个带头).docx
- 县委常委班子2025年专题生活会带头严守政治纪律和政治规矩,维护党的团结统一等“四个带头方面”对照检查材料四个带头:.docx
- 巡察整改专题民主生活会个人对照检查材料5.docx
- 2024年度围绕带头增强党性、严守纪律、砥砺作风方面等“四个方面”自我对照(问题、措施)7.docx
- 2025年度民主生活会领导班子对照检查材料(“四个带头”).docx
- 国企党委书记2025年度民主生活会个人对照检查材料(五个带头).docx
- 带头严守政治纪律和政治规矩,维护党的团结统一等(四个方面)存在的问题整改发言提纲.docx
- 党委书记党组书记2025年带头增强党性、严守纪律、砥砺作风方面等“四个带头”个人对照检查发言材料.docx
- 2025年巡视巡察专题民主生活会对照检查材料.docx
文档评论(0)