唯品会双11大促技术保障实践

每年双11是国内各大电商贴身肉搏,激烈交锋的时刻,同时也是把几十天的交易量浓缩到一天释放的日子。为了准备双11的大促,各家都会在营销、促销、技术保障、物流、售后、客服等各个环节付出相当大的努力。唯品会作为中国第三大电商公司,自然也会在这场盛宴中付出自己的努力,收获应有的成绩。

第一章:夯实基础,梳理业务

唯品会是一家专注于特卖闪购的电商公司。业务系统为了支撑特卖的场景,在业务架构上有一些鲜明的特点:购物车库存扣减,特卖专场作为营销和流量的入口,优惠活动设置在专场维度,营销触达的周期性峰值明显,自建物流系统支持分区售卖等。图1给出了整个业务架构的概览。

图1 唯品会业务架构示意图

随着业务量的迅速增长,原有的PHP服务逐渐无法应对高并发大流量的网络请求。为了支撑增长迅速的业务,唯品会在过去2年中启动了大规模的重构。在服务Java化过程中,基础架构部开发了的OSP RPC框架,采用带Sidebar的Local Proxy + Zookeeper作为整个框架的核心组成部分,提供了去中心化的服务注册、发现、治理的能力。

OSP框架还内嵌服务追踪机制,将服务调用路径抽样展示,便于监控服务调用中发生的4xx/5xx错误,及时发现拥塞、调用错误等情况。

图2 唯品会基础架构示意图

由于唯品会特卖的特点,特卖专场集中在早上10点和晚上8点推出,特卖模式下流量峰值变化极大。业务特点决定了弹性云平台对唯品会有极大的价值。唯品会搭建的Noah云平台,在Kubernetes的基础上,开发了与现有生产系统流程集成的一系列组件。其中包括支撑运维自动化的Noah API Server, DevOps使用的管理平台Noah Portal,与S3存储系统类似的分布式镜像仓库,以及自主研发的网络方案、磁盘网络隔离方案。

为了应对双11的峰值,唯品会借鉴HPA的思想,开发了自动扩缩容功能。所有容器均自动跨机器跨机架部署,纯容器域在双机房部署并自动邻近路由,混合域(物理机+容器)则支持一键切换物理机和容器流量,以及一键跨机房迁移等功能。

2017年双11是Noah云平台经历的首次大促考验。共有52个业务域运行在云平台上,其中在5个核心域上云平台承担了30%-50%的流量。

图3 云平台Noah架构示意图 第二章:容量预估,适当扩容

唯品会历年大促峰值数据都会进行妥善的整理,核心业务系统按照不同的促销等级,预估了不同的峰值流量。双11按照去年12.8店庆的2倍来估算系统峰值容量。以用户鉴权系统举例,单台服务器压力测试约为25000QPS,全域提供约25万QPS的服务能力,可以满足2倍峰值量,本次大促就无需扩容了。

对于一些需要扩容的服务,如类目服务、库存规则服务等,优先选择容器扩容。使用Noah云平台进行扩容后,广告、风控等系统的容器使用占比都达到了50%以上。起到了节省机器和弹性扩容的目的。

第三章:线上压测,心中有底

有了上述的基础服务能力,线上压力测试就有了基本的技术储备。双11来临前,核心系统按照预估的容量进行了线上压力测试。下面我们就以收藏系统作为例子,来展示的具体实践经验。

收藏是唯品会会员应对特卖闪购模式的重要工具,收藏量的多少和收藏展示分类的数量,直接决定了整个大促的销售成绩,因此收藏系统的稳定至关重要。在双11到来之前,商品收藏和品牌收藏都进行了大面积的改版,业务从前到后均做了比较大的改动,并在双11前1个月部署到生产环境。那么如何检验新版的收藏系统可以顶住大促的洪峰流量呢?下图展示了收藏系统线上压力测试的系统部署图。

图4 双11大促收藏系统压测示意图

线上压测的具体步骤分为以下几个步骤:Top 10接口筛选,线上回放脚本准备,nGinder压测集群搭建,压测指标确认。

找到收藏系统日常Top 10访问量的接口抓取线上日志(约占总流量的80%以上),生成线上回放脚本,按照去年店庆12.8的峰值流量的2倍给出了压测目标值。线上压测安排在凌晨流量最低的时刻,当达到压测目标值的过程中,监控系统情况,看看系统有没有超时、异常,应用服务器的CPU、I/O、内存等资源消耗情况。在整个压测过程中,先后发现了物理机和容器流量不均匀的问题,若干接口请求到达1w QPS时,出现200ms超时等问题。通过调整权重以及分片数量等方法加以解决。

核心系统都通过类似的线上压测的方法,发现了大量的潜在隐患,有力的保障了大促的顺利进行。

第四章:丢卒保车,降级求生

核心系统对于依赖系统都准备了降级和灾备方案。对于容易被黑产攻击的脆弱部位,以及非重要业务都做了降级处理。大促降级分为以下四个方面:

1. 系统设计层面需要考虑兼容依赖系统服务不可用的情况

“Design for Failure”是一个非常好的设计原则,在系统设计中我们需要充分考虑依赖服务的可靠性,在依赖服务不可用时,需要有对应的策略。在核心系统梳理上面,着重梳理了对外部系统依赖部分,确定可以降级的依赖,以及无法降级的依赖。对于可以降级的依赖,在出现异常时,尽量保证服务的可用性,必要时果断降级。对于无法降级的依赖,如核心数据库宕机,直接启动系统预案,避免错误的扩大化。

我们总结了一些实践经验:

  • 调用下游系统服务接口或者访问缓存/数据库时,需要设置超时时间

  • 超时设定,打破部门墙,尽量不要在客户端直接设定

  • 对只读方法设置重试

  • 不是每个方法都适合熔断,可单独关闭,比如:支付的捞单接口,同一个接口处理多个银行,权衡熔断的利弊

  • 主动降级,不依赖于客户端开关,主动关闭某个方法,某个来源域

2. 非核心流程可使用开关关闭

非核心流程一般提供一些系统增强服务,如复购推荐,时效标识展示等。由于唯品会业务的特殊性,新专场上线有固定的时间点,所以峰值流量可以预计。在峰值流量到达的前后,关闭非关键路径的业务,可以有效的降低系统的负荷,保障核心业务的可用性。

  • 对于计算复杂,QPS不高的服务,会提前关闭,保障服务器的核心服务接口的可用性。比如促销活动的试算开关。

  • 对于非核心系统的大量数据同步,在峰值前后进行关闭。如自动促销系统的数据抓取行为。

    我们的服务框架OSP提供了一个非常好的功能,可以有选择性的关闭某些服务或者服务接口。

3. 核心业务降级预案

核心系统通过线下压测,可以确认峰值的服务能力,在大促前进行扩容。并且按照测试峰值配置开关,当出现峰值告警时,打开开关,启动限流,提供有损服务,保障数据库平稳渡过峰值。风控系统在峰值来临前,会清理高危账户的登录状态,降低被攻击的风险。

第五章:多机房部署,异地容灾

为应对容灾需求,核心系统需要分别部署在全国范围内多个机房中,避免单机房出现故障情况下服务不可用。多机房部署带来一些挑战,如机房之间的服务调用延时、数据同步不一致性、专线的稳定性等等,需要对应用系统以及所依赖的数据库/服务系统做规划设计。

对于一些基础服务如用户标签,个性化推荐等,访问量非常大。这些服务位于多个关键路径上,一旦瘫痪,无法降级求生,因此需要多机房部署,做异地容灾,才能保证核心系统的稳定运行。

下图展示了核心系统 – 个性化推荐系统的同城双机房部署的架构。Guard模块可以调用同机房的Scheduler流量调度模块,也可以调用其他机房的Scheduler模块,具体的调用路由配置中心下发。具体的触发时机,可以是由配置中心手动下发,也可以由底层框架检查出错误比例自动触发。流量执行模块也是多机房部署,在灾难发生时,可以保证一键切换,仅增加跨机房的毫秒级时延,对用户无感知。

Guard模块冗余的本地缓存,也会存储一份保底数据,这部分数据在后端系统服务不可用时,起到保底作用。保证极端情况下展示页面不留白,防止同城机房光纤全部被挖断的情况。

图5 个性化推荐系统同城双机房容灾 第六章:秒级监控,迅速反应

为了提高故障响应速度,引入了Hummer系统。Hummer是一个秒级监控工具,会实时统计生产环境发生的生产日志,在发生系统异常情况下,更快的发出报警,方便技术人员、运维人员迅速排查问题,采取行动,降低损失。Hummer解决了下列几个问题:

  • 现有Metric统计结果延迟较大,分钟级统计只能在分钟结束后得到结果,不能实时更新分钟内的结果。

  • 问题发生时,影响了运维的响应速度,会造成较大的损失。

  • 秒级监控之前都是独立开发,不能通用。

  • 不能高并发的访问统计结果。

核心系统目前大部分都接入了秒级监控Hummer系统。下图展示了秒级监控的监控台。可以清晰的看到出故障的环节。

图6 用户系统秒级监控展示 总结

大促技术保障是多部门的技术协作,从双11前2个月各系统就开始了梳理和准备,经历了几轮的系统梳理,压测,问题总结和修复,核心代码审查等工序,最终圆满的完成了大促的保障任务,在这个过程中,团队得到了锻炼,系统问题得到了总结,加深了对系统的理解。

大型网站架构技术

程序员修炼之道

大型web系统数据缓存设计

基于 Redis 实现分布式应用限流

Cache缓存技术全面解析

京东到家库存系统分析

Nginx 缓存引发的跨域惨案

浅谈Dubbo服务框架

数据库中间件架构 | 架构师之路

MySQL优化精髓



看完本文有收获?请转发分享给更多人


欢迎关注“畅聊架构”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构!打造最有价值的架构师圈子和社区。


长按下方的二维码可以快速关注我们


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值