网站大量收购闲置独家精品文档,联系QQ:2885784924

QQ高效团队开发实践:开源毫秒服务引擎的设计与实现.pptx

QQ高效团队开发实践:开源毫秒服务引擎的设计与实现.pptx

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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远程调用 高性能 随业务流程复杂度增加,代码可读性 和可维护性随成倍数下降 监控和告警 业务定制上报;短信和邮件告警 监控点、告警点设置依赖开发意识; 告警多运维累 日志 有本地和远程日志;有染色能力 定位问题效率低

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档