- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
新浪微博中的周期性爆发流量
新浪微博中的周期性爆发流量
架构之路(系列二) 卫向军 新浪微博
业务背景
最近,微博平台的群发业务增长迅速,一个月内业务量暴涨70%,出现两次前端机负载
过高后台扛不住流量的小故障,两次都是通过紧急扩容解决,仔细思索,这一类业务场景在
移动互联网中非常普遍,值得深入探讨。
在微博通讯系统中,有两种常见的模式,一种是单点对单点的私信通讯方式,另一种是
单点对多点的群发通讯方式,后面一种主要使用在粉丝服务平台,最近几年通讯内容趋向富
媒体,包含图片、网络文章、音视频文件等,微博统一将各类资源抽象为卡片 (Card ),平
台负责Card 数据的存储与处理,前端和客户端根据不同的模板渲染Card 。
微博服务号基本都是每天早上向所有粉丝推送一条消息,这就是群发场景,同一时段高
并发的请求访问给后端系统带来巨大压力。
问题挑战
对于群发业务,增加缓存能挡住大多数的流量,但这里还有诸多挑战:
1. 缓存大小规划,如果所有内容都缓存,成本直线上升,虽然可以抗住峰值时段流量,
但是非峰值时端,资源严重浪费。
2. 缓存资源有状态,很多Card 并非完全是静态资源,根据请求参数不同返回数据不
同。
3. 同一资源集中访问间隔时间非常短,经常维持在几分钟内,还有一个特点,5%的
资源占据了80% 以上的访问请求。
弹性计算 or CDN?
问题一:能否使用云服务中的弹性计算解决?
如果业务爆发周期为一年中的某一季节或者某些节日,弹性计算可以较好的解决这个问
题,如果业务爆发周期为一天中的某一时段,弹性计算从运维管理层面来讲,可实施性非常
低。
问题二:能否使用CDN 技术缓存Card 资源?
Card 资源为后台动态生成,有些Card 是无状态的,有些是有状态的,CDN 网络可以
处理无状态的Card 资源,对于有状态的,目前还没有成熟的 CDN 解决方案,同时 Card
资源的使用方式也与传统的CDN 资源使用方式不太相同。
技术方案
针对这种每天粒度周期性爆发的业务模型,团队总结出三种技术方案。
方案一:针对业务的定制化方案
这种方案分析业务特点,提出解决方案,不具有通用性,目前平台的 Card 服务使用方
包含各个端的 Feed 组以及通信系统,而周期性爆发流量,目前仅有通讯系统中的群发和群
聊会产生,针对这种情况,Card Service 改进点:
1. 区分有状态和无状态的Card 请求,有状态的不缓存。
2. 无状态的Card 请求,结合业务特点,判断是否是群发以及群聊业务。
3. 对于群发和群聊业务,将Card 资源缓存在分布式缓存中。
分布式缓存有一个问题,虽然可以按照服务号水平分区在不同的节点,克服缓存容量问
题,但是不能处理瞬时的千万级流量高峰,这种情况需要在每台前端机上做本地缓存,大小
受前端机内存大小限制,我们根据业务特点进一步做优化。
4 对于群发和群聊业务,使用L1 本地缓存和L2 分布式缓存。
4.1 L1 本地缓存处理服务号粉丝规模超过20 万的,通过众多的前端处理机L1 缓存抗峰
值。
4.2 L2 分布式缓存处理粉丝规模较小的服务号,处理从L1 缓存穿透过来的访问。
方案二:简单的数据挖掘策略
通用方案基于实时的流量统计分析,运用数据挖掘算法,统计出资源请求中最频繁
的 K 个,同时本地缓存大小不能太大,计算性能要求也较高,方案二将高频资源请求
检测模块放在前端机本地缓存,使用类蓄水池采样算法,适合微博的群发场景。
首先介绍一下蓄水池问题:在不知道文件总行数的情况下,如何从文件中随机的抽取一
行?
首先想到的是我们做过类似的题目吗?当然,在知道文件行数的情况下,我们可以很容
易的用C 运行库的rand 函数随机的获得一个行数,从而随机的取出一行,但是,当前的情
况是不知道行数,这样如何求呢?我们需要一个概念来帮助我们做出猜想,来使得对每一行
取出的概率相等,也即随机。
有了这个概念,我们便有了这样一个解决方案:定义取出的行号为choice,第一次直接
以第一行作为取出行choice ,而后第二次以二分之一概率决定是否用第二行替换choice ,
第三次以三分之一的概率决定是否以第三行替换choice
您可能关注的文档
最近下载
- 2016尔雅文化遗产概览【参考】.docx VIP
- 2025年江西省上饶市辅警协警笔试笔试真题(附答案).docx VIP
- 国开《学位论文指南》形考作业1-2答案.docx
- 和谐社会视野下中国基层行政伦理建设.doc VIP
- 股骨头骨骺炎胫骨结节骨骺炎.ppt VIP
- 和谐社会视野下中国基层行政伦理建设的论文.doc VIP
- 国际篮联的最新规则 .pdf VIP
- 辽宁省重点高中联合体2024-2025学年高一下学期期末考试语文试题及答案.docx VIP
- 儿童生存质量测定量表PedsQL4.0中文版的信度和效度分析.pdf VIP
- NB∕T 10877-2021 水电工程建设征地移民安置补偿费用概(估)算编制规范.pdf
原创力文档


文档评论(0)