找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

如何支撑上亿用户尖峰流量?微博服务架构超高可用性的秘密 ...

行云流水| 2019-10-16 10:40 阅读 100 评论 0

如今随着互联网的快速发展,各大社交媒体也占据了,网友们主要生活之一,而要说到目前国内最经常用的,就不得不说微博了。微博是目前中国最大的微网志的服务平台,用户只要透过订阅"关注"别人,就能看到对方发布的简短评论或内容,也可以说是中国版的推特(Twitter)。而且不只能订阅内容,后来,该服务也加入了许多新功能,例如兴趣推送,或热搜功能等,持续增加用户黏着度,使得该服务使用人数逐年增长,光是最近短短4年,每月活跃用户就有翻倍成长,从2016年的2.82亿户,到了2019年第2季,成长更达到4.86亿户。

除了普通的用户,有将近3万的娱乐明星也活跃在微博平台。而一些高人气的明星们在发布某条动态时,往往会引发亿万吃瓜群众同时围观。

比如去年的10月16日,赵丽颖她在微博上大方地发布了了与冯绍峰的结婚证书,并配文“官宣”正式宣布了结婚的消息,消息一经发布就被大量网友和粉丝转发和评论,一小时内转发了330000条消息和620000条评论。赵丽颖和冯绍峰的结婚话题更是直接达到了5.6亿阅读量。

如何支撑上亿用户的尖峰流量?微博服务器超高可以用性的秘密!

还有今年6月6日,一则林志玲微博上的闪婚消息,震撼了娱乐圈,这则婚讯发布不到3小时,经过网友疯狂转贴、评论,相关的讨论文章,在不到3小时内达到了45万则,浏览量更超过6亿次,立刻登上热搜榜第1位。

如何支撑上亿用户的尖峰流量?微博服务器超高可以用性的秘密!

这些高人气的明星动态,尖峰时间甚至一度造成微博服务短暂瘫痪。因此面对微博全球多达2.1亿日活跃用户,单日评论、转发量超过数亿条,平均每日新增"关注"订阅数更达到上千万,更有上百个服务、多套系统同时运作,微博IT团队如何支撑上亿用户带来的突发尖峰流量?

新浪微博研发总监李庆丰点出技术关键,在于打造一套高可用的微服务(Microservices)架构体系,并且搭配容器(Container)技术、分布式储存架构与混合云,才能做到支撑上亿用户每天内容发布需求,甚至遇到突发尖峰流量也不怕。李庆丰在近日在台参加Modern Web 2019大会时,也揭露了更多技术细节。

如何支撑上亿用户的尖峰流量?微博服务器超高可以用性的秘密!


微博目前自建一套超大型网络服务高可用架构体系,来提供每日数亿用户讯息发布,与上百服务功能的使用。该体系主要是由多个重要核心元件组成,并分4层,最上层是海量数据储存架构,接下来一层则是分布式快取架构,前2层都是用于资料储存与请求之用,微服务与容器化则是第3层,负责建构一个可灵活伸缩的弹性网络服务,还有最底层则是备援用的多机房架构。整个架构外围还有搭配监控、服务治理、服务水准协议(SLA),来分别解决4大高可用性的挑战,也就是容量、性能、服务依赖,以及容灾问题。

靠建置超高可用性的微服务架构,来迎战爆量用户增长挑战

首先,是服务依赖的挑战。李庆丰表示,微博内容,从原本最简单的订阅发布模式,最近几年变得越来越复杂,因应用户数快速增,不只有各式各样的资讯流模式,还有越来越多服务与新功能加入,累计至今已有上百个服务推出,例如发现、搜寻、Feed流、串流直播等,这么多新服务,也导致服务相互之间依赖关系更复杂,需要有一个非常高度的服务治理能力,这也成为了微博IT所要面对的第一个技术挑战。

"我们解决服务依赖问题的关键,就是微服务与容器化。”他表示,微博服务之间容易存在高度依赖的原因,在于不论核心业务或非核心业务提供的Web服务,以往都放在同一个解析Java程序的Tomcat容器执行环境里,用来执行Web应用,尤其,早期的任务分组,每个核心团队同时要负责核心与非核心服务,并将这些服务执行程序部署在Web服务器里,所以,服务之间彼此相互关联非常紧密,只要这里面的其中一个非核心服务发生故障,也容易连带影响到另一个核心服务的正常运作。

不只同一团队里的各别服务,会有依赖问题,不同团队之间也会有相同问题。例如,当A团队负责的其中一个非核心服务发生异常,另一个B团队的核心服务,也容易受到牵连,因为透过http调用而向另一边A团队服务发送请求而产生间接依赖,严重甚至造成整个服务的中断,因此,就会产生很高的风险。

为了让各服务之间能够遵行高内聚,低耦合(high cohesion、low coupling)的原则,李庆丰表示,他们先是导入微服务架构,先将原本同一Tomcat容器里的不同服务拆分到各自独立的容器里,让不同服务都用各别容器来承接,以改善服务依赖情形。

不过,这样子的作法,也使得原先服务因为拆分造成架构变得更为复杂且庞大,进而衍伸出各服务调用效率及性能变差的情形。最後,他们是靠采用远端程序呼叫(Remote Procedure Call,RPC)机制来解决这个问题。

因为RPC的连线反应速度更快、调度、管理能力与自动化程度较高,李庆丰说明,比起一般http发送请求方式,更适合用于网络上不同服务之间的调用,甚至他们还因此开发出一个跨语言的RPC服务化框架,称为Motan,能通过RPC的方式,让服务之间的调用实现低延迟与改善性能问题。"这也是微服务化带来的问题之一,我们用RPC的方式来解决。"他说。

如何支撑上亿用户的尖峰流量?微博服務架構超高可用性的秘密

采用容器解决大量微服务不易管理难题

另一个微服务带来的新挑战则是管理难题。李庆丰指出,微服务虽然解决了服务依赖耦合的问题,但也带来了维运复杂度的急遽增大,例如原先系统可能就只有4到5个服务之间存有依赖,维运管理相较简单,但是当单一应用服务拆成多个小型独立服务,服务拆分成越来越细,一次同时可能要维护管理上百个服务时,管理变得极为复杂,"甚至成为微博IT团队在服务维运上的一大恶梦,”他坦言,直到更轻量化的Docker容器的问世,才替他们解决了这个难题。

李庆丰说明,Docker容器的好处,不只在服务开发、维运两端可进行统一管理,也很容易隔离容器环境,还能协助IT团队缩短服务开发及上线时间,例如,原来100台传统服务器要部署完成并且推出上线得要花一整天,改采用容器後,平均每5分钟就能布建百台虚拟机器,从24小时缩短到5分钟,足足快了将近290倍。

也因为采用了Docker部署方式,李庆丰指出,後来他们在打造混合云架构时,也更加容易许多,甚至当遇到重大政治、娱乐事件或重大节日带来的突发流量,无法单靠本地机房支撑时,就可通过这个架构迅速把流量导入到云端。例如林志玲的结婚喜讯,短时间所带来的数亿级爆量发文,就需要采用这样的作法。

又如今年2月4日的央视春晚节目刚播出,不到几小时,微博贴文出现跟“春晚”有关的热门讨论,就超过一亿条、浏览人次更多达63.44亿次,以及50亿次短片播放,“对我们来说,这些不可预测的流量,需要做非常好的控制,但又要节省成本,”他指出,靠的就是利用Docker来打造一套弹性扩容系统,通过容器化方式快速部署,帮助他们更容易把容器化应用打包,放到公有云环境执行,使得在本地端和云端之间调度服务变得更加弹性可伸缩,并且可以做到自动扩容的能力,来支撑微博春晚爆量讯息发布的使用。“甚至,也帮助我们加快机器部署的准备时间,从原本1个月,现在只要3分钟就能完成。”他说。

他进一步归纳:“以微服务方式解决大量服务之间的耦合,并以容器化的方式改善微服务带来维运复杂度的问题,现在,更利用混合云架构降低营运成本,就是我们维持高可用性的解方。”这也是为何今年微博春晚出现尖峰流量,微博也能撑得住的关键,他补充说,这些都是建立在一定程度的资源监控体系之上,来打造一个可伸缩的弹性服务。

如何支撑上亿用户的尖峰流量?微博服務架構超高可用性的秘密

面对海量数据储存挑战,采用分布式储存与快取架构是关键

除了超高尖峰流量的挑战,面对海量数据储存,对于微博现有的储存架构的考验同样不小,最直接反应在储存容量不够用,以致于数据存不下,请求扛不住,这也是第2大挑战。

但是想要储存更多数据,满足更大量请求,并不是增加储存容量就好,李庆丰特别强调事前准备的重要性,不论是从数据库选用,到实际测试,以及对于未来容量扩充的预测,都要事先做好完整规划,以决定最後该用哪一类型数据库,以及搭配多少台服务器。

以MySQL为例,他表示,在选用数据库前,会先考虑它的写入/读取性能,以及成本特性,做为选择储存元件的依据,还会实际在微博服务场景下通过测试看它在不同SSD、SAS硬盘上读写性能,避免一旦储存量用到极限,引起诸多安全问题。他也说,如果遇到的应用场景,需要储存量比较小,请求量较大时,就适用NoSQL数据库,如Redis等

选好储存元件,接下来,就进到容量规划,李庆丰指出,一般来说,容量规划会考虑几个问题,比如需要用多少台服务器,资料存取规模多大,储存容量才足够用。以微博的作法,还会将3个月後的用户使用情况、数据用量,以及1年後的服务成长规模纳入考量,同时,也会考虑储存成本、使用服务场景,以及在架构设计上,如何做到可扩展以及容错程度,他说,这些都是打造可扩展的数据储存架构必须考虑的事。

他也提到在实务上可能遇到的一些储存挑战,包括,读写比例的严重失调,单机容量瓶颈以及业务快速增长带来的容量问题。他指出,针对资料读多写少的情况,可以采用读写分离到不同的服务器分担,而要解决单机容量瓶颈,则是可采用水平拆分,将用户不同数据,以主/从的数据储存方式分别用不同服务器来储存,或是以垂直拆分方式,按时间维度进行拆分,存放在不同性能的服务器里。"尤其,微博的服务特性,让它更需要采用这样的作法。"李庆丰表示。

举例,微博一周以内发表的新内容,通常占所有服务读取请求的8成以上,但是一个月以前的内容,只占总请求的1成,因此,他表示,在这样情况下,就需要把老旧内容用更少的储存空间,搭配一般普通机器来承接,对于新的或比较热门资料,就可以放在新添购或性能更强的机器里,如此一来,用户的体验才会好。甚至,不只把这些内容依时间来做拆分,他补充说,还会将这些内容按月来区分,制作成分布分表,就能把一个月後请求量没那么大的内容,将它迁移到一些性能比较差的机器上,这也是微博打造海量数据储存的重要关键。

他提到第3个挑战则是性能问题。尤其是需要储存海量资料时,为了加快存取性能,微博还会搭配速度更快的快取内存储存,建置一个分布式快取架构,来打造一个可以提供高速存取的Web服务架构,李庆丰表示,这可以用来改善传统储存效能不够高的问题,并且透过建立分布式快取架构,可以把这些快取内存,依不同用户的请求指引到不同机器上,作法就跟分布式储存相似,比较不同的地方是,当一次要请求百人以上数据时,也容易因为拆分得太细而影响快取性能。

因此,他们还进一步采用线性扩展方式,在资料快取层的前面,额外加了一层快取,称作L1快取层,也就是针对多个请求量拆分时,不是按每一个数据模组来拆,而是以整组拆分的方式解决多人同时请求无法细拆数据分开储存的问题。

但李庆丰也直言,采用快取比例越高,也容易加大系统复杂度与产生数据一致性问题,尤其,快取是容量有限的内存,想要直接将资料储存在快取中,虽然可以加快资料存取速度,但也将大幅提高成本,所以一般是将快取存放一些最频繁使用的数据,又称为热数据(Hot Data),将这些存放在快取里的热数据,拆成多分,并采用水平拆分方式,储存到不同机器上,借此解决了热数据存不下的问题;至于老旧资料或较没人看的冷数据(Cold Data),则放在一般硬盘里,以便于将有限快取容量用在储存最热的内容。

另外,他也提醒,快取用越多,一旦出现问题,也容易造成底层数据库的使用瓶颈,严重更会引起整个系统的当机,因此,他建议在使用快取架构时,必须建立一套主/备援(HA)机制,至少要能够设计成两层快取,以便于当一个快取层出现问题,备用的快取层还可以快速接手,支撑这些服务请求,以避免大量请求直接穿过快取进到数据库,一旦数据库撑不住,就容易导致整个系统大当机。

最後一个挑战,则是确保服务维持不中断,李庆丰表示,关键在于采用多机房架构,以打造出容灾能力更强的IT营运架构。他指出,目前微博采行资讯系统双活中心(multi-datacenter),将现有主要机房和异地备援用的机房,打造成一个同时并行的双主要机房,让同一套资讯系统同时可以在两地运作,提供相同的服务,并且两边资料可以保持一致。一旦任一机房出问题,另一机房能马上接手提供原有的服务,也就达到了数据容灾的多机房。

不过,两地机房的数据同步,也会带来影响工作执行、同步延迟,以及数据丢失等问题。他表示,通常解决的方式,则是依据分布式系统的CAP理论,视业务场景不同,来决定要满足数据一致性(Consistency)、数据可用性(Availability),以及非区容忍性(Partition tolerance) 三项中的哪两项要求。

不像电商、金融应用场景,对于数据一致性采取高标准,只要一有数据更新,所有节点上的数据在同一时间都要保持一致,李庆丰说,在微博社交场景下,对于数据一致性的要求就没有这么高,只需要确保两地数据最终保持一致就行,并通过MCQ这个数据同步元件,让异动数据与另一个机房对应的数据同步,来解决资料一致性的问题,发送请求也是相似作法。

面对4大高可用问题处理的3大前提

除了采用更先进的技术架构,李庆丰也提出3个前提,来因应发生容量、性能、服务依赖,以及容灾4大问题的处理方式,首先是,"提前发现问题",他指出,发现问题的方法有很多,可以通过事件监控,包含日志、监控仪表板、阀值报警、以及自动应变机制来完成;其次是"提前做好应对计划",这些计划项目包含对于容错策略、服务扩容以及服务降级的紧急处置方案,以便于当有机器设备故障,可迅速找到问题机器将故障排除。当服务发生异常问题时,还需要仰赖"上下游团队建立良好默契"的配合,这即是第3个前提,他说,这可以透过SLA服务协议建立一套指导原则的标准,例如机器性能达到什么情况下,会出现哪些问题,以及该如何解决等,并透过监控体系来支撑,还要能做到仿真演练,这也是建构高可用架构不可缺少的一环。

微博下一代高可用架构将整合新兴的服务网格技术

为了迎接更多新业务的挑战,微博近来也开始引进了近两年迅速窜红的Service Mesh (服务网格)技术,用来打造新一代高可用架构。并且一开始先用于建立标准化的服务治理,以及解决跨程序语言调用的问题。以服务治理来说,他表示,这样做的目的,是要将现有的服务基础治理架构,自业务逻辑层抽离放到基础设施里,形成Mesh形式的网格,让使用者请求远端服务,都能像请求本地服务一样容易。

又如想要通过具有基础设施级别的本地Agent方式,如Motan、Restful、Yar、gRPC等来转换各程序语言之间调用的协议,以产生这种更方便调用的方式,他发现同样适合采行服务网格来达成,所以也用它来实作。

不论是服务治理或语言协议的转换,微博都已导入服务网格,"接下来,更要把服务调用,甚至快取、储存、对链调用,都用这种网格架构来完成,让以後请求资源、服务就像请求本地的水和电一样简单。"李庆丰说。

如何支撑上亿用户的尖峰流量?微博服務架構超高可用性的秘密


    文章点评
    2019-12-06 11:03
    IT新闻 整合微软物联网平台晶片,宜鼎SSD提供独立远端管理通道
    随着边缘运算的走红,许多工业等级的系统硬体设备,最近开始支援从边缘到云的应用,以储存领域而言,存在市场多年的工 <详情>
    2019-12-06 10:24
    IT新闻 针对AI训练与推论需求,英特尔推出分别对应的加速ASIC芯片
    在2016年8月,处理器大厂英特尔并购AI技术新创公司Nervana Systems之后,各界都在关注后续将推出的AI运算芯片。2017年 <详情>
    2019-12-06 10:11
    硬件知识堂 租服务器如何选配置?
    企业在选择服务器租用的时候,会根据自己业务应用需求出发来选择硬件配置。那么租服务器如何选配置?我们可以先看看服 <详情>
    2019-12-06 10:05
    硬件知识堂 十次方服务器租赁服务有哪些优势?
    在互联网时代,服务器是企业在发展过程中必不可少的IT硬件,服务器租赁的方式在节约成本、设备升级等方面有自己独特的 <详情>
    2019-12-06 09:35
    IT新闻 第7代光纤信道网络来了!博通率先推出支援PCIe 4.0的HBA卡
    关于光纤信道网络(Fibre Channel)这套储存系统通讯协定的发展,负责主导的光纤信道产业协会(FCIA)在2014年,宣布推出 <详情>
    2019-12-05 10:34
    IT新闻 【SaaS型公有云储存1】备份与灾难备援服务
    透过内含的快照复本与资料分散复制功能,公有云储存原则上可降低传统备份的需要,不过若用户的公有云应用同时涉及不同 <详情>
    2019-12-05 10:24
    IT新闻 新规上路,买SIM卡要先扫描人脸
    从2013年开始,在中国购买SIM卡便已迈入了实名制,得先验证使用者身分,但自12月1日起,要购买SIM卡不只要比对身分证 <详情>
    2019-12-05 10:12
    IT新闻 抢攻制造业IT、OT整合需求,IBM联手多家SI厂商合推智慧制造整合服务 ... ...
    抢攻制造业IT与OT整合需求,台湾IBM(3日)宣布联手凌华科技、大联大世平集团、纬谦科技、台达电子等大型解决方案供应商 <详情>
    2019-12-05 10:08
    硬件知识堂 租服务器的价格会受到哪些方面的影响
    随着共享经济如火如荼的发展,以及目前经济的下滑,现在采用租用服务器方式的企业越来越多。租用服务器最大的优势是能 <详情>
    2019-12-05 10:00
    硬件知识堂 一分钟秒懂公有云、私有云、混合云的区别?
    公有云、私有云、混合云的区别?在讲这几个的区别前,可以先说下经常被一起谈起的云计算。什么是云计算?我们可以先理 <详情>
    十次方服务器实体机租赁
    关闭

    官方推荐 上一条 /1 下一条