当前位置: 首页 > 科技观察

朋友圈千亿访问量背后的技术挑战与实践总结

时间:2023-03-16 23:23:54 科技观察

1.前言朋友圈由图片和视频两种业务架构组成。朋友圈中图片的特点是请求量大,消耗计算资源多,而视频主要是消耗带宽。朋友圈中的数据是永久存储的,随着业务的快速发展,对存储容量、带宽和设备的消耗大幅增加,尤其是重大节日带来的使用量增加,加剧了消耗,也提供了对运维人员的保护。带来了很大的压力。在节假日节点,技术支持主要包括三个方面:1)软件支持是指通过程序和业务逻辑层面的优化和评估进行减载;2)硬件支持主要是指带宽和机器负载评估和扩容;3)灵活措施是指通过业务调整,减少一些不重要特性的资源,保证关键特性的正常运行。2.软件架构保障朋友圈的整体情况如下图所示:朋友圈的架构主要分为OC和IDC两种:IDC指的是数据中心,也就是地方数据最终存储在哪里;OC是指带外网络的独立机房,SOC是指大型OC。每个IDC都有一套完整的接口机/逻辑设备/存储设备来支持用户的上传下载、文件存储需求。OC点的主要功能是提供外网接入,承载用户的下载流量。每个OC中的设备共同组成一个缓存池。用户下载时,本地OC缓存不完善,IDC回源拉取文件。每个OC的功能都是一样的。用户一般到就近的OC点下载。当单个OC点出现故障时,用户将通过重试或切换的方式下载到另一个OC点,确保下载成功。3、容灾重试机制朋友圈的模块容灾主要是实现单机故障时的自动淘汰。主要形式是通过master管理服务器的ip列表,通过心跳检测发现异常设备,屏蔽故障ip。返回给前端使用。以前层单机淘汰为例:如果整个OC或IDC点出现故障,由于变化较大,一般需要运维人员手动切换恢复,或者通过重试机制模块之间以确保。瞬间重试下载:无论是用户到OC的下载过程,还是OC回源到IDC的过程,默认失败后会有2次重试,重试一定会选择一次接入指向不同的地方以避免继续重试失败的节点。实现原理是每一层的master都会至少返回两组ip列表给前端,并保证这两组ip列表都是远程节点。只有前端失败了才能异地重试。然而,重试是一把双刃剑,因为它会增加请求的数量。节日高峰期,请求的增幅已经很高了。重试更有可能导致问题。需要做的调整:1)通过master路由发送,禁用重试。元旦/春节实施,届时请求数会增加数倍;2)值班人员严密监控,如果IDC故障率超过20%,将人工关闭重试。这种节日是在中秋节/国庆节增长速度不高的时候实施的。Front模块重试控制接口:4.硬件保障4.1容量评估和设备扩容重要节前,运维人员会同资源组根据业务进行各机房和模块的设备预算、业务增长需求和实际负载扩展。超出预算的请求将以灵活或超载的方式减少或拒绝。评估方法:1)机房容量主要根据交换机带宽上限进行评估;2)接入层设备的容量主要根据CPU和内存的负载比,网卡的流量/包比来评估;3)存储层设备的容量评估主要根据CPU、内存负载率、磁盘IO读写次数来评估。4.2春节朋友圈上传负载业务端对春节请求的提升比例为上传支持9倍提升,下载支持1倍提升。超过这个比例的请求可以拒绝,但是按照预算扩容后,还是能达到上图的效果。有些模块不支持这种增加,尤其是压缩模块。该模块每支持一倍增长,需要扩展大量的虚拟机,预算内无法支持,需要采用灵活的策略来解决。5.弹性策略介绍朋友圈的弹性策略分为两层:第一层粗略的弹性:即上传和下载的请求直接按业务比例进行限制,被限制的请求会返回给用户失效,和微信C2C一样,一般用于超过系统的预估负载能力,用于系统失效时快速恢复服务;第二层是根据业务特点灵活:即从业务层面通过降低图片和视频清晰度、延迟用户更新等方向来降低系统的负载。下面主要详述业务灵活性。朋友圈业务的主要增长点和瓶颈:从上面的设备负载评估图来看,在预算范围内,接入层和逻辑层都只能支持5倍的增长,而压缩模块只能支持1倍的增长。6、灵活的做法:压缩灵活的Compress模块??的作用是将客户端上传的原始图片按要求压缩成各种格式和尺寸,以支持特定的业务场景,节省存储空间和带宽。由于压缩技术的不断发展和更先进的压缩格式的使用,相同清晰度的图片压缩率越高,消耗的压缩计算资源就越多。因此,如果反过来操作,将当前使用的hevc格式替换回jpeg格式存储,可以节省压缩资源。实测compressCPU负载可降低20%,支持5倍提升。但平均图像大小也会增加,导致下载流量增加。因此,采用的折衷方法是将图片的分辨率从70降低到50,同时将图片上传回jpeg格式,这样可以降低平均文件大小,从而抵消切换回jpeg带来的流量增加的影响格式。在实际测试中发现,用户对清晰度降低的感知并不明显,节假日短时间开启也不会影响用户体验。7、灵活实践:小视频码率灵活。小视频带宽通常超过1TB,节庆效应明显提升。采用的减流量方式与图片类似,即降低上传视频的码率,通过减小平均文件大小来节省带宽。灵活性:小视频码率1800->1200,平均大小2.1MB->1.3MB经测试,码率降低基本不会影响用户体验,但由于对新上传的视频生效,应该会体现在减少下载带宽。有相当多的延迟,大约需要4个小时才能完全生效。因此,这一灵活措施需要在节前开启,不能用来应对突发事件。降码有效期内流量变化:8.灵活做法:上传TSSD缓冲池灵活性由于上传预上传接口机和后台逻辑模块等,无法支持10倍的提升。因此,架构中还内置了两套TSSD缓冲池。缓冲池用于暂存新上传的文件,可以支持读写。如上图所示,在zone模块添加了bufferpool1,在uploadpreupload添加了bufferpool2。两个缓冲池的作用不同:如果zone模块超载,主动超载的上传请求不会直接返回失败,而是将请求写入缓冲池1,缓冲池1中的文件无法上传。已下载,但文件会以较慢的速度传递并写入后端模块。因此,缓冲池1的主要作用是在短时间内减缓大量上传请求,而不是完全抵消上传请求,缓冲池1中的文件无法下载。缓冲池2添加到预上传模块。在preupload模块中,对存储TFS的写请求次数进行了限制。如果上传请求数超过TFS存储容量,preupload会将请求写入缓冲池2。用户下载时,会根据文件ID进行判断。如果发现文件存放在缓冲池2而不是TFS,就会去缓冲池2获取文件。因此缓冲池2可以替代TFS的功能,保护底层模块。当缓冲池2下架时,需要手动将其中的文件写入TFS。9、灵活的做法:朋友圈时间线比例灵活的时间线是指微信朋友圈更新的时间戳。这种灵活的原理是先缓存通知用户好友和朋友圈更新的时间戳,而不是发送到用户微信终端,这样微信上就看不到朋友圈更新的内容,也就没有请求了下载图片/视频,可以直接降低下载流量。时间线灵活后,这里不再更新:但有几点需要注意:1)容易引起用户投诉,用户一般会注意到朋友圈内容变少了;2)如果时间线缓存时间过长,缓存发送过程一定很慢,否则会导致下载流量进一步激增。