深度解析双十一背后的阿里云 Redis 服务
摘要: Redis是一个使用范围很广的NOSQL数据库,阿里云Redis同时在公有云和阿里集团内部进行服务,本文介绍了阿里云Redis双11的一些业务场景:微淘社区之亿级关系链存储、天猫直播之评论商品游标分页和菜鸟单据履行中心之订单排序。
在一片欢呼之中,2018年的双十一完美收官,各项数据不出意外的刷出了新的记录,亮眼的数据背后是阿里过硬的技术支撑。其中阿里云Redis不仅保障了阿里集团内部业务双十一的流量洪峰平稳度过,也让使用阿里云Redis的各个客户度过了一个安稳省心的双十一。
目前阿里云Redis涵盖了丰富的产品形态:主从、集群、读写分离、同城容灾、异地多活,可以选择单副本,双副本,还有混合存储类型。
- 主从规格的Redis具有100%的兼容性;
- 读写分离增加只读节点承担读流量,成本最优;
- 集群规格大容量、高性能,突破单机性能极限,兼容redis cluster, sentinel等多种架构,上云无忧;
- 同城容灾双机房部署,整机房故障切换到正常机房;
- 异地多活让业务全球部署,就近写入,自动全球实时同步。
此外,阿里云Redis还拥有热备份、账号、安全等功能,满足业务的各项安全上的需求。本文将简单介绍下2018年双十一的部分业务场景。
直播
直播在双十一期间也迎来流量高峰,观看直播的用户每发一条评论背后就会使用阿里云的Redis的服务。直播平台会对每条评论写入两条数据:索引和用户评论,索引使用Redis的SortedSet数据结构对评论进行排序,而评论内容本身使用Hash存储。获取评论的时候,先读索引,再访问对应Hash拿到评论列表。评论的写入过程如下:
现在的直播必不可少的就是弹幕,和评论一样,异常直播弹幕的写入QPS可能非常高,并且用户遍布全国各地甚至是分布在全球的华人,一条在美国发出的弹幕跨洋写进部署在国内,时延是不可接受的,物理距离的限制就算是低延迟的Redis也无能为力,各个地域单独部署一套存储又会造成不同地域的用户弹幕无法相互看到。阿里云Redis多活产品是为这种场景而生,每个地域部署一套Redis,用户就近写入,后端自动实时同步,跨洋的小伙伴感觉不再遥远。
菜鸟订单履行
双11用户在产生一个交易订单之后会随之产生一个物流订单。经过菜鸟仓配系统处理的订单,为了让仓配各个阶段能够更加智能的协同作业,决策系统会根据订单信息指定出对应的订单履行计划,包括什么时候下发仓、什么时候出库、什么时候配送揽收、什么 时候送达等信息,单据履行中心根据履行计划,对每个阶段按照对应的时间去履行物流服务。由于仓、配的运力有限,对于有限的运力下,期望最早作业的单据是业务认为优先级最高的单据,所以订单在真正下发给仓或者配之前,需要按照优先级进行排序。
订单履行中心通过使用Redis来对所有的物流订单进行排序决定哪个订单是最高优先级的。
微淘社区用户关系链
微淘社区承载了亿级淘宝用户的社交关系链,对于每个用户都有自己的关注列表,每个商家有自己的粉丝信息,整个微淘社区承载的关系链如下图所示。
Redis丰富的数据类型让这种关系链的存储变得简单,高性能保证了双十一期间业务仍如丝般顺滑。比如微淘社区使用了Hash存储用户之间的关注信息,包括:1)用户A是否关注过用户B;2)用户A/B的关系列表。
双十一大屏
双十一期间不光有出镜率最高的媒体中心数据大屏,还有很多技术和业务模块的监控数据大屏。这类大屏不仅要求数据实时性高,对可靠性要求也非常高,一旦出现异常,通过大屏可以快速展示出来。
- 数据缓存
大屏汇聚了所有业务或者技术模块的监控信息,具有来源广、数据量大、实时性高的特点,Redis的高性能低延迟满足需求。大量数据通过pipeline批量更新,存入数据库时使用update case when语句进行一次批量更新,效率非常高,大大缓解了数据库的压力。
- 竞争锁
大屏的高可用要求非常高,任何故障下大屏必须可以正常展示。整个大屏背后需要双机房甚至更多机房的部署,多个任务同时进行,基于Redis实现的竞争锁来保证一个任务实际执行。
机房搬迁
双十一之前阿里集团上海机房业务整体搬迁到张北机房,涉及数百Redis实例,同时迁移还需要满足几个要求:
- 同时要求Redis服务的搬迁对业务透明,不影响业务的正常服务;
- 必须保证数据的一致性,不丢不重;
- 数据同步必须具备断点续传功能;
- 具备回滚方案,一旦业务切换出现问题,可以随时切换回来。
阿里云Redis多活不仅完全满足了业务所提出的需求,还已经产品化和自动化,整个迁移过程用户只需要在控制台上点下鼠标即可完成,实例状态,后端的数据同步状态实时显示在控制台上。
结束
Redis是一个优秀的开源数据库,提供了开发者更便利的数据模型,阿里云Redis致力于提供稳定、高性能的Redis服务,欢迎广大开发者使用阿里云Redis服务。
阅读原文