深度解析双十一背后的阿里云 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服务。
阅读原文
深度解析双十一背后的阿里云 Redis 服务的更多相关文章
- 用StackExchange.Redis客户端连接阿里云Redis服务遇到的问题
阿里云推荐的Redis服务.NET客户端是ServiceStack.Redis,但ServiceStack.Redis不支持异步,不支持.NET Core,于是尝试使用StackExchange.Re ...
- 阿里云 Redis 服务遇到的问题
ERR unknown command eval 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: St ...
- ServiceStack.Redis连接阿里云redis服务时使用连接池出现的问题
创建连接池 private static PooledRedisClientManager prcm = CreateManager(new string[] { "password@ip: ...
- 解密阿里云Redis助力双十一背后的技术
摘要: Redis是一个使用范围很广的NOSQL数据库,阿里云Redis同时在公有云和阿里集团内部进行服务,本文介绍了阿里云Redis双11的一些业务场景:微淘社区之亿级关系链存储.天猫直播之评论商品 ...
- 杂项-分布式-EDAS:深度解析阿里云EDAS服务
ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...
- 【New Feature】阿里云快照服务技术解析
一.背景 目前上云已经成为行业发展趋势,越来越多的企业级客户将业务系统和数据库迁移到云上.而传统的备份一体机/备份软件方式,并不适合云上ECS.RDS等产品的备份与容灾服务.阿里云块存储服务提供云 ...
- 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...
- 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> W ...
随机推荐
- 用JSP实现WEB页面登录验证
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- boost datetime
To create a date, use the class boost::gregorian::date 1. date #include <boost/date_time/gregoria ...
- 跨域AJAX
本篇主要讨论JSONP和CORS这两种技术,使用它们的原因是为了完成对资源的跨域访问,也就是如何绕过浏览器的同源策略Same-origin Policy. 那么什么是Same-origin Polic ...
- IDEA不认识jstl
解决方案:一.在pom.xml文件查看是否<packaging>的值是否是war 二:在jsp文件中加上这句话. <%@page isELIgnored="false&q ...
- E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable)
1. 问题详细提示如下: E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unava ...
- 后端技术杂谈3:Lucene基础原理与实践
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- Spring Boot学习一之配置类及自动配置
一.配置类 1. 导入其他配置类 你不需要将所有的 @Configuration 放进一个单独的类, @Import 注解可以用来导入其他配置类.另外,你也可以使用 @ComponentScan 注解 ...
- leetcode-解题记录 557. 反转字符串中的单词 III
题目: 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出 ...
- Python字节码与解释器学习
参考:http://blog.jobbole.com/55327/ http://blog.jobbole.com/56300/ http://blog.jobbole.com/56761/ 1. 在 ...
- 嵌入式C语言3.3 关键字---逻辑结构
1. if else if(条件表达式){ ****;} else {xxxxxx;} 2. switch case default 3. do while for 4. con ...