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