1 背景概述
新浪微博(Sina Weibo)是基于用户关系的社交媒体平台,用户可以通过 PC、手机等多种移动终端接入,以文字、图片、视频等多媒体形式,实现信息的即时分享、传播互动。自 2009 年 8 月上线以来,新浪微博就一直保持着爆发式增长。截止 2019 年 6 月,微博月活跃用户数高达 4.86 亿,平均日活跃用户数为 2.11 亿。业务的快速增长向微博的原有技术体系发起挑战。
2 需求分析
每年的元旦、春晚、红包飞等更是为微博带来巨大的流量挑战,这些业务场景的主要特点是:瞬间峰值高、持续时间短。每一次峰值事件的互动时间在 3 小时左右,而明星事件、红包飞等业务,经常会遇到高达几倍的瞬间峰值。另外,社交属性与客户生活作息密切相关,微博的负载有着明显的波峰波谷,且峰值相差 5 倍以上。
针对以上问题,微博 IT 应对手段主要是:提前申请足够的设备保证冗余;降级非核心及周边的业务。除了需要提前预知相关 IT 成本外,还面临业务负载饱和度不一、扩缩容流程繁琐且周期长等问题。如何在应对用户量飞速增长,热点事件流量暴增,请求有明显波峰波谷的同时,不影响用户体验,又不增加巨大的服务器成本投入是微博技术同学的当务之急。
3 方案设计
阿里云函数计算 FC 可以根据请求量动态分配执行环境,毫秒级调度计算资源,确保在负载高时保持稳定的延时,在负载低时有着较高的资源利用率,且只会对代码运行时使用的计算资源付费。函数计算与阿里云对象存储服务 OSS 无缝集成,用户可以方便地对存储在对象存储中的图片进行实时处理。
函数计算的弹性扩容、事件触发、按量付费的特性与新浪微博一拍即合。微博决定使用函数计算部署图片处理业务。
微博将用户上传的图片存储到阿里云对象存储中,编写函数实现个性化的图片处理。当微博的用户通过客户端获取图片时,请求通过阿里云 CDN 回源到函数计算,函数从对象存储中下载原图,根据客户端类型实时处理成预期规格的图片,并将结果图片返回。
4 使用效果
保证稳定的延时:函数计算 FC 毫秒级伸缩计算资源确保应用在热点事件发生时仍能保证稳定的延时,用户体验完全不受访问次数的影响。
持续的成本节省:通过函数计算运行图片处理服务,微博实现了持续的成本节省。再也不需要为平滑处理业务高峰带来的流量激增而提前预留大量闲置机器资源,同时由于不需要维护复杂的机器状态,工程师可以集中精力与产品团队合作增加业务价值,而不是花时间管理基础设施。
弹性高可用:微博的活跃用户数不断增长,截止到 2019 年底,函数计算平均每天承载微博几十亿次请求。随着微博业务规模的不断扩张,函数计算可以自动弹性地分配更多执行环境以支撑微博业务的持续发展。