首页>会议文档 >

微博 胡忠想 - 微博应对突发热点事件的弹性调度实践

page:
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践
微博 胡忠想 - 微博应对突发热点事件的弹性调度实践

微博 胡忠想 - 微博应对突发热点事件的弹性调度实践

所属会议:ArchSummit全球架构师峰会北京站2017会议地点:北京


下载

手机看
活动家APP客户端

扫二维码下载
或点击下载
Android iOS

2830次
浏览次数
ArchSummit全球架构师峰会北京站2017所有文档 宜信 张军 - 信贷业务持续创新当中的大数据风控架构_部分1 宜信 张军 - 信贷业务持续创新当中的大数据风控架构_部分2 翼启云 孙鹰 - 守住Fintech这扇门 — 高可用测试平台演进之路 优酷 张云锋 - 优酷广告投放引擎优化实践_部分1 优酷 张云锋 - 优酷广告投放引擎优化实践_部分2 优酷 李玉 - 视频推荐中用户兴趣建模、识别的挑战和解法 郑建军 - PaxosStore:微信高可用、强一致存储系统 知乎 姚钢强 - 知乎 feed 流架构演进 中兴通讯首席架构师 钱煜明 - 打造金融级分布式数据库服务_部分1 中兴 钱煜明 - 打造金融级分布式数据库服务_部分2 诸葛越 - 算法无处不在 转转 张相於 - C2C电商平台推荐系统架构演进 亚马逊 代闻 - Cloud Native 架构的演进之路 亚马逊 郑斌 - 工程师文化与文化中的工程师 腾讯 陈宁国 - 腾讯海外计费系统架构演进 腾讯 黄斯亮 - 全民K歌从零到千万在线后台服务的演进之路与黑产对抗 腾讯 王旻 - 腾讯云大规模任务调度系统的架构蜕变 腾讯 闫二辉 - 腾讯企业级消息中间件DevOps实践 王秀刚 - 京东金融多业务集成解决方案 微博 崔建兴 - 微博社交广告系统架构实践 吴惠君 - 实时流系统Heron的异常检测和恢复 清华大学 张宇韬 - 大规模异构网络数据融合 趣店 尹茂君 - 砥砺前行:趣店同城双活高可用架构实践 沈悦时 - 超高密度游戏直播转码架构 滴滴出行平台技术部 王涛 - 滴滴出行跨地域 iOS 构建优化与持续集成 滴滴出行 李培龙 - 滴滴出行海量数据场景下的智能监控与故障定位实践 丁宇 - 阿里巴巴云化架构创新之路 饿了么 胡彪 - 饿了么移动性能可视化之路 付钱拉 石伟 - 从零到一,构建灵活、高性能的金融账务系统 复旦大学 邱锡鹏 - 深度学习在自然语言处理中的应用 瓜子二手车 魏旋 - 机器学习中的人机互动 杭州谐云 苌程 - 容器环境下基于APM的海量日志全链路跟踪分析 恒丰银行 赵宏伟 - 恒丰银行基于大数据技术重塑数据仓库及应用的探索_部分1 恒丰银行 赵宏伟 - 恒丰银行基于大数据技术重塑数据仓库及应用的探索_部分2 恒丰银行 赵宏伟 - 恒丰银行基于大数据技术重塑数据仓库及应用的探索_部分3 京东 李维 - 自动深度语法分析是自然语言应用的核武器 京东 周光 - 京东虚拟业务系统高可用性设计 京东 刘峻桦 - 京东国际独立站系统演进 陆金 卢峻 - 凤凰涅磐:陆金所金融平台的架构大升级 美丽联合 张振华 - 美丽联合容器云平台建设的实战分享 美丽联合 赵懿 - 时尚的产品化和商业化_部分1 美丽联合 赵懿 - 时尚的产品化和商业化_部分2 美团点评 孙业锐 - 美团点评用户行为分析系统的构建与优化 美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分1 美团点评 梁士兴 - 从分层复用到自动化测试—看美团客户端架构的演变_部分2 摩拜 范同祥 - 摩拜国际化架构演进_部分1 摩拜 范同祥 - 摩拜国际化架构演进_部分2 拍拍贷 杨波 - 拍拍贷基础架构的DevOps演进之路 青云 张雁飞 - RadonDB:新一代分布式关系型数据库 滴滴出行 陈宜明 - 滴滴出行平台的高可用实践 百度 牟宇航 - 百度MPP数据仓库Palo开源架构解读与应用 百度 马艳军 - 人工智能驱动的内容生产与分发_部分1 百度 马艳军 - 人工智能驱动的内容生产与分发_部分2 百度 马晋 - 成就成长-工程师团队前进的驱动力 百度 于洋 - PaddlePaddle:Towards a Deep Learning Compiler for the Cloud 北京木仓科技(驾考宝典) 谢呈 - 技术人转身创业的坑和坡 菜鸟网络 朱君标 - 菜鸟技术团队全栈化(开发全栈前端)之路 Reddit 陈晨 - 从Instagram到Reddit,浅谈西方工程师文化和管理 tutorabc 张明 - tutorabc微服务平台架构实践_部分1 tutorabc 张明 - tutorabc微服务平台架构实践_部分2 Yuanchi Ning - UberEats Discovery:Food Recommendation 阿里UC 顾辉 - UC浏览器客户端容器化架构演进 阿里巴巴 吕奇 - 阿里混部技术最佳实践 阿里巴巴 张瓅玶 - 阿里巴巴调度与集群管理系统Sigma 阿里巴巴 林轩 - Pouch和阿里容器技术演进 阿里巴巴 余锋 - MySQL数据库架构的演化观察 阿里巴巴 张佶 - 阿里小蜜中的机器阅读理解技术揭秘_部分1 阿里巴巴 张佶 - 阿里小蜜中的机器阅读理解技术揭秘_部分2 阿里巴巴 张娟 - 弹性容量管理探索 爱奇艺 邢常亮 - 与狼共舞 - 爱奇艺移动业务后台系统架构设计与优化实践 爱因互动 王守崑 - 创业,永远在路上 Tumblr 李北涛 - 相关性反馈在推荐系统中的应用 PayPal 曹若沈 - 高可用低延时的PayPal风控数据平台 TalkingData 宋净超 - 从Kubernetes到Cloud Native——云原生应用之路_部分1 TalkingData 宋净超 - 从Kubernetes到Cloud Native——云原生应用之路_部分2 TalkingData 宋净超 - 从Kubernetes到Cloud Native——云原生应用之路_部分3 58速运 沈剑 - 分还是合?58到家订单中心架构演进 bilibili 王昊 - 技术、产品、管理,选择和平衡 FreeWheel 宋一玮 - FreeWheel在微服务架构下的前端改造实践 FreeWheel 姜冰 - FreeWheel OLAP实践 musical-ly 杜鹏 - musical-ly基于社交关系的Smart Feed架构 OnVideo 刘歧 - 大闹天宫:悟空在FFmpeg社区从入门到出家

文档介绍

微博作为当今中文社交媒体的第一品牌,拥有超过3.6亿的月活用户,也是当前社会热点事件传播的最主要平台。而热点事件往往具有不可预测性和突发性,10分钟内可能带来流量的翻倍增长,甚至更大。如何快速应对突发流量的冲击,确保线上服务的稳定性,是一个非常巨大的挑战。 传统的人工值守,手工扩容的运维手段,显然无法满足这一需求。为此,我们的目标是做到系统的自动扩容,在流量增长达到系统的警戒水位线时自动扩容,以应对任意时刻可能爆发的流量增长,确保服务的高可用性。

演讲实录

微博作为当今中文社交媒体的第一品牌,拥有超过 3.6 亿的月活用户,也是当前社会热点事件传播的最主要平台。热点事件的发生具有不可预测性和突发性,以 9 月 26 日上午“谢娜宣布怀孕”事件为例,从图 1 可以看出微博评论的流量在短短 10 分钟内迅速上涨,并在 20 分钟后达到了日常晚高峰的 2 倍之多。可见,为了应对突发事件带来的流量冲击,确保线上服务的稳定性,能够进行随时随地的快速弹性扩容十分重要。

传统的面对而传统的人工值守,手工扩容的运维手段,显然无法满足这一需求。为此,我们的目标是做到系统的自动扩容,在流量增长达到系统的警戒水位线时自动扩容,以应对任意时刻可能爆发的流量增长,确保服务的高可用性。

微博 Web 弹性调度演进
接下来,将为大家介绍微博 Web 系统如何从人工值守的手工扩缩容一步步演进到无人值守的自动扩缩容。

第一代:人为触发扩缩容
人工根据监控系统的 QPS、AvgTime、load 等判断是否扩容;

根据经验值人为预估扩容机器数;

支持 PC、手机等多渠道触发。

问题:需要人为介入确认扩容时机和扩容数量。

第二代:无人值守定时扩缩容
每天晚上 8 点定时扩容,12 点前定时缩容;

Web 与依赖的 RPC 可以依赖扩容。

问题:只能解决晚高峰问题,无法应对突发事件。

第三代:智能触发自动扩缩容
自动压测评估线上服务池最大承载量

实时评估线上服务池冗余度

冗余度不足则触发扩容,充足则触发缩容

下图展示了在 # 薛之谦与前期复合 # 事件中,智能触发自动扩缩容的实际效果。

下面对智能弹性调度系统进行详细介绍,图 6 展示了这一系统包括的几个主要组成部分。

全数据日志分析 Profile,生成业务系统的各种指标并采集汇报给实时监控系统 Graphite。

实时监控功能系统 Graphite,实时汇聚并计算多维度业务指标数据,并提供 API 给在线容量评估以及智能弹性调度系统已作决策。

在线容量评估系统 Diviner,对在线服务池进行压测,以评估服务池的最大承载能力。

智能弹性调度系统 DCOS,根据系统实时的水位线情况,决策是否需要进行扩容以及扩容机器数。

混合云平台 DCP,向私有云和公有云申请机器,进行弹性扩容。

Profile- 全数据日志体系
在实际的扩容决策中,需要以一些关键指标如 QPS、AvgTime 或多种指标叠加作为判断依据,所以自动扩缩容系统首先要解决的问题就是关键指标的生成和采集。

指标的生产
一般情况下,指标的生产有两种方式:一种是在业务代码里以特定格式打印各业务关心的业务指标日志,如 API 的 QPS、AvgTime 等,但这种方式对业务代码的侵入性强,不建议采纳;一种是在框架的关键路径上埋点,统一打印 metric 日志,不侵入业务代码,对业务开发更加友好。我们就采用了这种方式,如在 motan 服务化框架上埋点,来记录 RPC 调用的 QPS、AvgTime、P99 等指标。

指标的采集
指标的采集主要涉及两个问题,一个是如何规范 metric 日志,便于在不同系统间传递,一个是如何传输的问题,有多种途径如 scirbe、kafka、udp 等。为了解决第一个问题,我们制定了规范的 profile 日志格式,各种 metric 信息均以标准的格式记录,如下图 7 所示。为了简化系统和传输效率,我们通过 udp 方式将各种 metric 信息传递给监控系统。

实时监控系统
有了关键业务指标的 Profile 日志,就可以对它们进行实时监控,其工作原理如图 8 所示。

从上图可以看出,实时监控系统的核心就是 Graphite。它主要包含两方面的功能:

将实时传输的 profile 日志进行聚合计算,产生各种维度的数据存储到时序数据库中。

还需要提供 API 接口,以提供 dashboard 展示,压测系统以及智能调度系统调用以用于扩缩容决策。下面将对 Graphite 进行详细介绍,其架构如图 9 所示。

为了减少延迟,我们对 graphite 系统中的关键模块进行了优化,主要包括两个方面:

用 go 重写了 statsd-proxy 和 statsd 模块

carbon 中添加缓存,7 天的数据存储在缓存中,7 天以外的数据存到 SSD。

在线容量评估系统
有了关键业务指标的实时监控,就可以对系统进行压测,以评估系统的最大支撑能力。而如何对系统进行压测,以合理评估系统的承载能力主要取决于两个方面:

合理选择业务指标来衡量系统健康度;

精确定位性能拐点以确定系统临界值。

下面分别就上面两个问题进行阐述。

合理选择业务指标来衡量系统健康度

常见的可作为衡量系统健康度的指标有 avgTime、load、5xx、连接数等,对于单一业务模型的系统来说,选取其中一个指标即可。但对于复杂的业务系统,以微博 web 系统为例,既包含了 CPU 和带宽消耗较高的 feed 接口,又包含了低延迟和高并发的计数器接口,单一接口健康并不能代表整个系统健康。除此之外,单一指标正常也不能代表系统正常,比如我们经常遇到 feed 接口 avgTime 正常,但延迟大于 1s 的比率超过了 1%,这时候会直接造成 1% 用户刷新失败,影响了用户体验。

为此,我们建立了多接口多指标的健康度评估模型。

多接口,是指选取服务池中多个具有代表性的接口,并且还会考虑整体服务池中接口的情况,比如我们在微博 web 系统中不仅选取了 feed 接口,还选取了计数器接口等。

多指标,是指不仅仅选取单一指标作为参照,比如我们在实际压测过程中,会考虑接口的平均耗时、5XX 以及慢速比(延迟超过 1s 的比率)。

精确定位性能拐点以确定系统临界值

常用的系统压测方案主要包括两种:

在线缩减机器数量以增加单机承载量,从而压测到单机承载能力的最大值。

模拟洪峰,对服务池进行全链路压测,以模拟出峰值流量下系统的承载能力。

目前,我们主要采用方案 1 进行压测。通过减少在线机器数,以增加单机承载量来压测,直到服务池的健康度到达临界点时暂停压测,待系统恢复后,继续缩减在线机器数,否则则停止压测并记录服务池的临界值。

智能弹性调度系统
有了系统的最大承载能力,就可以根据实时监控系统中服务池当前的流量,来决定是否需要扩缩容以及扩容机器数。智能弹性调度的智能主要体现在两个方面:

快。

智能弹性调度并不等到系统的承载量已经濒临临界值时才进行扩容,因为此时可能流量很快上涨超过水位线,在扩容完成之前就已经把系统压垮了。为此,我们给系统设置了三条线:致命线、警戒线、安全线,如图 10 所示。

致命线。从字面意义上即可理解,当服务池的流量一旦触及致命线,就应当立即扩容。通常致命线的设定与业务的重要程度有关,一般核心系统的致命线设定要高一些,保证足够的冗余度,目前微博核心 web 系统的致命线设定为 1.6 倍冗余。

警戒线。当服务池的流量到达警戒线时,再结合业务指标综合考量是否需要扩容。以微博核心 web 系统为例,如果流量到达警戒线,并且 1s 的慢速比超过了 1%,也需要进行扩容。

安全线。主要用于决策缩容,当服务池的流量在安全线以上,则可以进行缩容。

准。

主要体现在两个方面:防抖动和合理扩容。

防抖动。当系统的承载量到达临界值时,理论上要进行扩容。但还要考虑在实际线上系统运行时,经常出现系统偶发的抖动现象,避免因为偶发抖动触发临界值进行扩容带来不必要的机器成本。为此,我们在智能弹性调度系统中,设定了 1min 的采集周期,并设置了 5min 的滑动窗口。在这个滑动窗口内采集的 5 个点中,任意满足 3 个点即判断需要扩容。

合理扩容。智能弹性调度系统会根据系统当前的水位线,以及系统当前机器数评估出合理的扩容机器数,按需扩容,避免浪费机器成本。

混合云平台 DCP
混合云平台 DCP 主要职能是向内部私有云和外部公有云申请机器,并部署服务扩容到线上服务池。目前微博混合云 DCP 平台,具备 15 分钟内扩容 1000+ 服务器的能力,关于这部分的介绍不是本文的重点,感兴趣的童鞋关注微博 OpenDCP 的 github 主页:

https://github.com/weibocom/opendcp

×

打开微信扫一扫,分享到朋友圈