做者丨魏旸:腾讯高级工程师,具备15年运维经验的专家。负责QQ空间、微云、QQ空间相册等的运维工做。
12月16日,首期沙龙“海量运维实践大曝光”在腾讯大厦圆满举行。沙龙出品人腾讯运维技术总监、复旦大学客座讲师、DevOps专家梁定安,讲师腾讯手机QQ运维负责人郭智文,腾讯高级工程师魏旸,腾讯SNG资深运维专家周小军出席沙龙,并带来精彩的技术分享。为了便于你们学习,特将本次沙龙讲师的演讲内容进行了整理。您也能够在腾讯织云公众号下载本次演讲PPT。后端
腾讯社交业务包括QQ、QQ空间、QQ相册等核心业务。核心业务按深圳、天津和上海三地分布,各支撑华南、华中、华东、华北、西北、西南等大区的用户访问。服务器
你们都知道核心业务多地部署物理容灾,名字服务、负载均衡等手段架构容灾。可是当机房、网络等大范围故障真正发生时,咱们要怎么作才能保证业务持续可用?拿前一段时间腾讯深圳某个机房光纤被挖断的案例来说,业务碰到的问题:网络
带着这些问题,我简单介绍一下空间SET化分布异地多活方案。架构
提高质量,提高速度,提高效率,节约成本。并发
业务经过SET化部署在多个物理机房,当某个机房故障时,咱们能够快速切换服务到其余机房,能够作到物理容灾。同时,多地部署也提供了用户就近接入的能力,提高用户体验。再者,业务关联的服务部署在同一个城市或者机房,可以极大减小业务之间的机房穿越带宽,下降成本。最后,SET的复制结合织云的快速部署能力,咱们可以快速复制并在不一样地域部署多个业务SET。负载均衡
简单来讲,SET是一个包含了多个标准化模块的集合,同时包含了更多的业务属性,好比业务形态,核心指标,柔性策略,地域,调度策略等等。运维
横向分布与条带化的思惟 海量用户按不一样比例被分流到不一样的专区访问。好比用户接入维度,咱们划分了PC、移动端SET,同时在移动端咱们又能够细分为安卓和苹果用户。好比运营商,好比地域分布。每个SET都须要有可度量的指标,空间业务主要根据SET内模块负载、可支撑的用户量、和实时交易量等维度来评估一个SET。异步
在有了可度量的SET标准后,咱们就能够基于本身的业务形态来建立SET模型了。以空间为例,用户登陆进空间首先会看到本身发表的历史说说,相册,好友动态等等信息,咱们把这一类的业务场景划分为读数据SET。用户会在空间上发说说,上传照片或视频,咱们把这一类的业务场景划分为写数据SET。同时深圳的PC或者移动端用户更新了空间,数据须要同步到其余地域的后端存储上,空间有一套专用的同步中心架构来保证数据同步。工具
咱们基于空间的业务场景制定的一个大体的模型就是这样:根据接入层区分用户,单点写,多点读,数据同步模块保证多点读的数据一致性。性能
初步模型制定好之后,咱们须要针对不一样的架构和业务场景来划分不一样的SET。好比空间首屏,主要由空间的信息中心模块来负责数据拉取展示,咱们把信息中心相关联的业务模块都统一划分为I类SET。再根据不一样的
咱们还根据不一样数字表明不一样的地域信息和SET顺序。
1) 名称分为2段,用“_”分割;第1段固定为SET,表示专区;
2) 第二段分为4节,每节占一位,前3位与目前规则一致:
3) SET类型,简写为A、D 、B、I,分别表明接入、数据SET、基础数据,信息中心等;
4) 地域信息,分别有深圳,上海、西安等,用0、一、2分别按序增长,最多到16进制等
5) SET数序号,从一、二、3开始,最多到16进制的F;
6) 业务产品信息,即Qzone为各业务搭建的SET,用一个字母代替,如P、G、U分别表明如PENGYOU、3G、UGC等
同步中心是空间业务SET化能力的一个重要组件,业务数据的同步都依赖同步中心。简单介绍一下同步中心的架构:单写多度的业务讲数据接入同步中心后,同步中心经过多种技术手段保证数据同步到多地的读SET。同步中心架构较复杂,这里主要介绍一下同步中心的有序转发:
许多业务对用户请求处理的前后顺序有很严格的要求,为了实现用户请求的有序转发,同步中心作了三个功能:
SET内部和不一样SET的业务模块都是经过名字服务来相互访问的
用户层GSLB->STGW=TGW+Nginx,Nginx自动获取vip
接入->逻辑:L5,vip->l5名字服务。负载均衡的时候有过载保护
逻辑->存储:L5。Stgw和L5都是腾讯自研的路由、名字服务组件。调度都是基于名字
服务来实施。L5有SET化的标签,可让SET的服务配置文件保持一致的状况下,服务只在SET内调度。能够极大提高SET的部署效率。
指定好的SET,须要经过压测来找出SET内业务模块资源的最优配比。咱们会经过调度现网用户来对SET作压测,经过压测找出SET内某个模块的短板并及时调整资源配比。同时,随着SET内模块服务的升级,服务性能也在变化,咱们会按期作调度演习来压测SET的完整链路,及时更新SET内模块的资源配比,可支撑用户数等SET核心指标。
在制定好SET模型,明确了每一个SET能够支撑多少用户量,对应的业务场景,包含了多少个模块,能够支撑多少用户后,就能够开始着手SET部署了。每一个SET创建一个模板,录入SET内包含的模块,模块内服务、权限、文件等信息保持一致,不一样SET的配置不一样
SET的复制根据SET模板快速部署。这些信息最后会同步到织云,由织云来快速部署服务。一个SET内几十个模块,几百台服务器可在10分钟内完成自动化部署上线 。
针对SET内不一样的业务架构,业务形态,咱们也开发了配套的监控工具。
前面主要说了为何要作SET,怎么作,以及怎么维护和监控,回到深圳机房光纤被挖断的问题上来,咱们是怎么作的?
每一个SET都有可衡量的指标,模块设备的平均负载都在40%左右。
若是网络故障影响到了用户接入W01 SET,咱们会调整stgw将用户转移到部署在另外一个机房的W02 SET。若是W01 访问I01故障,咱们能够把W01的访问切换到W02。若是整个深圳机房都不可访问,咱们则会把请求切换到上海、天津的SET中。
重大活动期间,用户量可能会突增几倍甚至十几倍,靠堆设备不现实。咱们针对这类场景制定了柔性策略,当SET容量达到必定的标准时,好比CPU负载达到70%,咱们就会开启业务的柔性策略,牺牲用户部分非核心功能体验来保证业务总体可持续可用。柔性策略有分级,SET容量没达到一个标准就会自动启用不一样的柔性策略。