腾讯大讲堂24 qq show2.0重构历程
DESCRIPTION
TRANSCRIPT
QQShow2.0QQShow2.0 重构历程重构历程
QQQQ 秀开发组秀开发组
QQQQ 秀秀 1.01.0 的技术架构的技术架构
存储层DB/Files
接口层数据存取、操作 API/ 接口 Server/File Server/ 流程 Server…
应用层ITEM 显示 / 商城 / 用户换装 / 用户个人形象管理 /QQ Client 表现 /Ch
at Room 表现 /Web 表现 / 内部管理系统…
系统层数据缓存 / 图片合成 Server/ 数据
维护 Daemon…
系统 / 存储
层
Web 应用 QQ Client 应用 Chat Room 应用
数据存取、操作 API
UDP File Server HTTP File Server
User DB Item Info DB Item/Image Files
DB Cache Server File Cache Server图片处理 Server
接口层
应用层
数据维护 Daemon
各层细化的结构图及数据流 各层细化的结构图及数据流
只能提供只能提供 GIFGIF 图片服务图片服务 , , 限制了应用的进一步发展限制了应用的进一步发展QQQQ 秀服务抛开商城应用秀服务抛开商城应用 , , 简单而言其实就是给应用提供一套图片下载简单而言其实就是给应用提供一套图片下载展示的系统展示的系统 , , 在互联网应用初期在互联网应用初期 , , 由于带宽以及用户机器性能原因由于带宽以及用户机器性能原因 , , 我我们只能提供们只能提供 GIFGIF 图片展示用户个性化的形象图片展示用户个性化的形象 , , 而且也能吸引用户来玩而且也能吸引用户来玩 , , 但是随着但是随着 QQQQ 秀业务的发展秀业务的发展 , , 用户也不再满足于简单的图形化形象的展用户也不再满足于简单的图形化形象的展示示 ..
商城应用性能存在一定的瓶颈商城应用性能存在一定的瓶颈作为公司最早最成熟产品作为公司最早最成熟产品 , , 原有的商城设计承受了大于设计容量很多倍原有的商城设计承受了大于设计容量很多倍的考验的考验 , , 存在重新规划的需求以满足后续业务的新生存在重新规划的需求以满足后续业务的新生 ..
服务可运营性不足服务可运营性不足我们提供的服务在运行期缺少跟踪的手段我们提供的服务在运行期缺少跟踪的手段 , , 来了投诉也没有个清晰的渠来了投诉也没有个清晰的渠道来获取相应的信息道来获取相应的信息 , , 在容灾建设方面也缺少快速恢复的手段在容灾建设方面也缺少快速恢复的手段 . . 整个服整个服务缺少必要的实时化监控务缺少必要的实时化监控 . IDC. IDC 分布等分布等 ..
运营的一些数据缺少数据支撑运营的一些数据缺少数据支撑 不能满足业务精细化运行的需要不能满足业务精细化运行的需要
前台用户交互部分和用户数据逻辑部分耦合度过高前台用户交互部分和用户数据逻辑部分耦合度过高
QQQQ 秀秀 1.01.0 技术架构的一些技术架构的一些 "" 困困惑惑 ""
QQQQ 秀秀 2.02.0 要解决的要解决的 "" 困惑困惑 ""
在提供一套图形形象的基础上在提供一套图形形象的基础上 , , 提供基于提供基于 flashflash 的的形象展示形象展示 , , 并且把并且把 flashflash 形象作为形象作为 QQQQ 秀形象的主秀形象的主要应用要应用 , , 为业务后续的发展提供更丰富的展示平台为业务后续的发展提供更丰富的展示平台
在用户数快速增长的环境下解决商城性能问题在用户数快速增长的环境下解决商城性能问题
提高服务的可运营性提高服务的可运营性 , , 提高服务的质量提高服务的质量
支撑业务发展所必需了解的运营数据支撑业务发展所必需了解的运营数据商城前后台逻辑实现用户交互以及数据逻辑的分离商城前后台逻辑实现用户交互以及数据逻辑的分离 ,, 方便后续业务的扩展以及简化开发方便后续业务的扩展以及简化开发
QQQQ 秀秀 2.02.0 商城子系统商城子系统Web Server/CGI
TTC-cache
商城 DB
TTC-cache
社区 DB
TTC-cache
活动 DB
批价发货 Server
商城管理端 /Daemons
{UIND/USD 等非逻辑层并且有状态服务 } 应用容灾机制实现 IP 的
可替换 , 但不能热备
通 过 Agent动 态 获 取 DBC 服务接口信息
{GD Server/ OIDB/ 消息中转 Server// 搜索引擎等无状态逻辑层服务 } 属于逻辑层服务 , 应用
容灾备份机制实现 N+1 互备{DataProxy} 属于逻辑层服务 , 应用容灾
备份机制实现 N+1 互备
各类底层服务 /TCP 服务 /UDP 服务 / 文件储存服务 /DB 储存服务
通 过 Agent获 取 相 应 服务接口信息
通 过 Agent动 态 获 取 相应 服 务 接 口信息
Web Server/CGI
TTC-cache
商城 DB
TTC-cache
社区 DB
TTC-cache
活动 DB
批价发货 Server
商城管理端 /Daemons
{UIND/USD 状态服务 } 应用容灾机制实现 IP 的可替换 , 但不
能热备
通 过 Agent动 态 获 取 DBC 服务接口信息
{GD Server/ OIDB 无状态逻辑层服务 } 属于逻辑层服务 ,
应用容灾备份机制实现 N+1互备
{DataProxy} 属于逻辑层服务 , 应用容灾备份机制实现 N+1 互备
底层服务 /TCP 服务 /UDP 服务 / 文件储存服务 /DB 储存服
务
通 过 Agent获 取 相 应 服务接口信息
通 过 Agent动 态 获 取 相应 服 务 接 口信息
QQQQ 秀秀 2.02.0 商城子系统商城子系统面向面向 QQQQ 秀用户访问后台秀用户访问后台 DBDB 全部通过全部通过 DBC/TTCDBC/TTC 层代理,层代理, DBCDBC 屏蔽屏蔽TTCTTC 的分布,的分布, TTCTTC屏蔽屏蔽 DBDB 的分布,既有的分布,既有 cachecache 能力,又能有效的能力,又能有效的屏蔽后台屏蔽后台 DBDB 物理分布信息,给后台数据的扩容以及迁移带来很大的物理分布信息,给后台数据的扩容以及迁移带来很大的便利。另外便利。另外 DBCDBC 按业务按业务 DBDB 细分成细分成 1010种类型(当前实际部署种类型(当前实际部署 55种类种类型),部署在一台服务器上为一组,一共型),部署在一台服务器上为一组,一共 33 组提供中转服务。组提供中转服务。
面向管理端面向管理端 /daemon/daemon,考虑到,考虑到 TTCTTC对部分对部分 SQLSQL功能的支持不能满足功能的支持不能满足业务的需求,这部分时直连业务的需求,这部分时直连 DBDB 解决。后续持续对管理端解决。后续持续对管理端 /daemon/daemon 部部分功能直连分功能直连 DBDB 部分做进一步改造,达到部分做进一步改造,达到 IPIP 的全部配置化,进一步完的全部配置化,进一步完善善 TTCTTC 等等。等等。
对公司对公司 // 部门的公共接口服务采用无状态逻辑部门的公共接口服务采用无状态逻辑 serverserver 进行中转进行中转 //避免避免用户接入层的频繁变更,采用用户接入层的频繁变更,采用 N+1N+1 的方式进行热备的方式进行热备
对文件存储的服务做到接口服务对文件存储的服务做到接口服务 IP/PORTIP/PORT 的可配置,可以方便的迁的可配置,可以方便的迁移这类服务部署到其他位置(类似移这类服务部署到其他位置(类似 TTCTTC对对 DBDB 的物理分布配置功能) 的物理分布配置功能)
前台模块前台模块采用采用 FlashFlash 引擎,引擎, FlashFlash 负责交互,封装了独立的换装负责交互,封装了独立的换装 jsjs 库负责和库负责和FlashFlash 通讯通讯
采用采用 AJAXAJAX 技术,用技术,用 XMLXML 作为前后台的通讯媒介,方便调试和自动作为前后台的通讯媒介,方便调试和自动化测试化测试
前台采用了统一的出错处理机制以及页面填充函数,简化了页面的前台采用了统一的出错处理机制以及页面填充函数,简化了页面的开发开发
前台相关交互部分尽量都模块化,形成互补干扰的子模块, 比如换前台相关交互部分尽量都模块化,形成互补干扰的子模块, 比如换装系统、菜单模块、专区模块、一些业务线经常变更的特性做成可装系统、菜单模块、专区模块、一些业务线经常变更的特性做成可以管理的模块方便更新以管理的模块方便更新
前台模块的基本思路和前台模块的基本思路和 QzoneQzone 的前台优化思路一致的前台优化思路一致 , , 降低流量降低流量 , , 提提高用户体验速度以及提高交互的感受高用户体验速度以及提高交互的感受
逻辑模块逻辑模块CGI逻辑
通用逻辑层 /公共接口
存储层
DB TTC C4A
采用三层架构,使得存储采用三层架构,使得存储 -- 通用逻辑通用逻辑 -- 业务逻辑解藕。业务逻辑解藕。
数据储存模块数据储存模块
QQShow2.0QQShow2.0 商城现在全部采用商城现在全部采用 DBC+TTCDBC+TTC 的方的方式实现数据存储。式实现数据存储。
定义了定义了 55 类类 DBCDBC 分别中转不同级别的分别中转不同级别的 TTCTTC请请求,避免非核心功能的频繁更改影响核心业务求,避免非核心功能的频繁更改影响核心业务
每类每类 DBCDBC 分别部署到分别部署到 55 台不同机器,实现了负台不同机器,实现了负载均衡和容灾载均衡和容灾
数据储存模块数据储存模块
对于核心数据,例如用户信息和用户物品对于核心数据,例如用户信息和用户物品分布了在分布了在 100100 个库个库 1000010000 表,这样可以表,这样可以减少减少 DBDB 写操作时的锁表情况,提高写操作时的锁表情况,提高 DBDB写效率写效率
尽量将核心数据的尽量将核心数据的 TTCTTC 部署在其部署在其 DBDB 的同的同台服务器上,可以大大提高台服务器上,可以大大提高 TTCTTC 的读写的读写速度。速度。
数据储存模块数据储存模块
数据存储模块定义了统一的接口基类,用数据存储模块定义了统一的接口基类,用模板的方式实现了分别针对模板的方式实现了分别针对 DbDb 、、 TTCTTC 、、C4AC4A 的三个派生类,使得底层存储和上层的三个派生类,使得底层存储和上层逻辑独立。逻辑独立。
容灾建设容灾建设Configserver/AgentConfigserver/Agent 服务服务 , , 保证服务故障的时候保证服务故障的时候能快速切换到正常提供服务的备用服务上(主要能快速切换到正常提供服务的备用服务上(主要应用在逻辑层无状态服务上)应用在逻辑层无状态服务上)
数据层容灾主要靠数据层容灾主要靠 BUBU 公共组件提供支持公共组件提供支持
业务侧暂时保证对核心数据层服务提供业务侧暂时保证对核心数据层服务提供 N+MN+M 热热备备 , , 结合结合 Configserver/AgentConfigserver/Agent 服务能快速恢复服服务能快速恢复服务务
对非核心数据层服务提供冷备服务对非核心数据层服务提供冷备服务 , , 结合冷备数结合冷备数据以及据以及 LOGLOG 恢复数据恢复数据 , , 再借助再借助 AgentAgent 能快速恢能快速恢复服务复服务
日常运营监控模块日常运营监控模块利用返回码系统实现了关键调用的情况以及调用时间的利用返回码系统实现了关键调用的情况以及调用时间的上报,而开发人员只需维护关键调用映射表。(模块间上报,而开发人员只需维护关键调用映射表。(模块间调用监控)调用监控)
返回码系统记录关键调用路径,并将错误和调用时间超返回码系统记录关键调用路径,并将错误和调用时间超过过 1s1s 的调用集中以的调用集中以 UDPUDP 的方式发送到的方式发送到 logserverlogserver集中集中管理管理
CGICGI 服务的自动化测试监控服务的自动化测试监控
页面级测速监控页面级测速监控
运营数据统计接入运营数据统计接入
QQQQ 秀秀 2.02.0 后台子系统后台子系统Web 商城
应用层
QQ Client 应用
逻辑层
系统 /存储层
http_ifsd
Item 后台管理网站
tcp
Fileserver商城ITEM
Nfs_server
qqshow_nfsd
用户形象xml文件
Ts_Server
时间戳文件
FasSvr
Image_Exchange_Server
UDP
UDP
UDP
GD Server
qqshow_gd
TCP
Tcp_Item
TCP
nfs
切 CDN
切 CDN
QQQQ 秀秀 2.02.0 后台后台 itemitem 系统系统商城子系统中的展示商城子系统中的展示 8484 图图 , , 换装换装 flashflash 文件文件的拉取都是通过的拉取都是通过 qqshow2-item.qq.comqqshow2-item.qq.com 来拉来拉取取
ClientClient 应用中拉取应用中拉取 flashflash 文件来显示形象也是文件来显示形象也是通过通过 flash2-item.qq.comflash2-item.qq.com 来拉取来拉取
这两个域名外包这两个域名外包 CDNCDN 实现分布实现分布 , , 内容部分是内容部分是通过业务管理段实现上传和管理通过业务管理段实现上传和管理
QQQQ 秀秀 2.02.0 后台后台 GDGD 系统系统GDGD 服务是商城服务和后台服务的一个接口服务是商城服务和后台服务的一个接口
GDGD 生成了用户形象的生成了用户形象的 XMLXML配置信息,供配置信息,供clientclient 来拉取,并由来拉取,并由 clientclient 来负责解析,在来负责解析,在通过通过 clientclient 主影片负责显示主影片负责显示 qqshowqqshow 形象形象
GDGD 负责负责 NFSDNFSD 以及时间戳服务上相应数以及时间戳服务上相应数据的更新工作据的更新工作 ..
QQQQ 秀秀 2.02.0 后台快照系统后台快照系统负责生成负责生成 flashflash 形象对应的形象对应的 GIFGIF 形象形象
通过通过 linuxlinux 系统下的系统下的 firefoxfirefox 进程挂载进程挂载 flashflash 进程来进程来生成快照生成快照
GDGD负责通知快照服务负责通知快照服务
快照服务生成快照之后需要通知原有的快照服务生成快照之后需要通知原有的 GIFGIF 形象形象系统系统 , , 更新相应的接口更新相应的接口 , , 保证保证 GIFGIF 形象能正常显形象能正常显示出来示出来
谢谢谢谢