背景介绍
乐词是新东方倾情打造权威英语单词背记APP,业务涵盖初中、高中、新概念、英语四六级、考研、雅思、托福、GRE、SAT、ACT 、GMAT、托业、商务英语等英语单词库,科学规划词根背记,离线背单词随时学,权威详尽单词解析,全新考试干货课程,群组背记英语单词,完整的视频教学体系为用户提供全方位的单词学习体验。
乐词系统涵盖词书、背词、查词、视频课程、活动、用户、在线支付等10多个核心业务模块,用户使用日活10w+,为了给用户提供稳定可靠的服务,对我们系统的可用性提出了更高的要求。Redis作为业界目前流行的Key-Value型NoSQL存储组件,可以帮我们解决面临的技术挑战。
因我们属于创业型项目,自建系统以及自行运维意味着前期较大的投入以及过高的运维成本,随着业务规模的扩张,资源水平扩展以及垂直扩展也是未来无法避免的痛点,所以我们会尽量选择三方服务搭建我们的系统,对基础服务的技术组件服务选型,我们首要考虑的是:稳定可靠、方便搭建、弹性缩扩容、轻运维,可以使业务快速稳定的实现落地。最终我们选择了阿里云平台的云Redis数据库。
阿里云Redis优势
1、 弹性扩容
- 存储容量一键扩容:可根据自己业务需求通过控制台对实例存储容量进行调整。
- 在不中断服务的情况下进行在线扩容:实例存储容量可在线进行调整,无需停止服务,对自身业务不会受到任何影响。
2、 数据安全性
- 数据持久化存储:内存+硬盘的存储方式,在提供高速数据读写能力的同时满足数据持久化需求。
- 数据主从双备份:所有数据在主从节点上进行双备份。
- 支持密码认证方式以确保访问安全可靠。
- 自动备份功能,保证数据更加安全,还可以根据自己的需求来设置备份周期。
3、 高可用性
- 我们使用的实例是8G主从高配版,他是基于双机热备架构,系统工作时主节点(Master)和备节点(Slave)数据实时同步,主节点故障时系统自动秒级切换,备节点接管业务,全程自动且对业务无影响,主备架构保障系统服务具有高可用性。
- 阿里自研故障探测切换系统:阿里云 Redis 服务封装 HA 切换系统,时时探测主节点的异常情况,可以有效解决磁盘 IO 故障,CPU 故障等问题导致的服务异常,及时进行主备切换从而保证服务高可用。
- 主备复制机制:阿里云针对 Redis 主从复制机制进行了定制修改,采用增量日志格式进行复制传输。当主备复制中断后,对系统性能及稳定性影响极低,有效避免 Redis 原生复制的弊端。
- 实例级别的资源隔离可以更好地保障单个用户服务的稳定性。
阿里云redis高可用架构图(标准版-双副本):
4、 节省研发运维成本
- 购买之后即可使用,方便业务快速部署。
- 阿里云专业技术团队,有力的提供在线支持,避免我们自已人技术员过多干预,降低了人力消耗成本。
- 提供秒级别实时监控,分钟级别历史监控。
- 提供各数据结构和接口的监控信息,访问情况一目了然,便于用户对云数据库 Redis 版的使用情况有充分的了解。
- 可视化的管理监控面板,控制台提供多项监控统计信息,方便用户对 Redis 实例进行管理。
5、 可靠的性能
我们所用的是8G主从高配版,由于 Redis原生采用单线程机制,最大QPS能力在10w左右。
我们的应用场景
1、 用于业务服务的缓存层,涉及到单词词书、用户记忆法、笔记、背词小组活动等核心业务。采用Cache-Aside模式,业务程序自己维护cache逻辑:
读场景:先从缓存读取,如果没有命中,则回源到DB中去获取,并且将数据放入缓存,以备下一次使用。
写场景:先将数据写入DB,成功后再将数据同步至缓存(也可能是删除过期缓存)。
2、 实现分布式锁,用于拼团等业务。
使用了Redisson框架(Redis官方推荐)的Lock组件实现分布式锁,它的原理是通过给Redis发送原子性的lua脚本(2.6以上版本,阿里云Redis已支持),实现锁逻辑:
1) 加锁:
2) 解锁:
3、 业务配置信息存储。
我们的业务降级开关采用了Guava Cache + Redis的方案,基本逻辑如下:
4、 背词小组排行榜。使用了Redis的zset数据结构实现背词排行榜,简单高效。
5、 用Redis实现延迟消息队列。使用了Redisson框架的延迟队列Delayed Queue实现拼团结果的延迟触发执行。
目前使用状况
1、 目前我们日活10w+,对Redis的使用,平时日均QPS在5K,峰值QPS可以到达1w(搞活动时会翻倍),运行非常稳定。
2、 阿里云redis支持实例存储容量在线进行升级调整,无需停止服务,对自身业务不会受到任何影响,这种能力对适应业务的敏捷变化非常有帮助。
3、 使用阿里云redis做数据缓存后,后端mysql数据库从未出现过阻塞与瓶颈等问题,而且资源占用比较低,从业务上整体性能提升50%。
我们的使用感受
我们使用阿里云redis已经一年多了,到现在还没出现数据服务器的严重故障问题,总体比较稳定,大大降低了公司的运营管理成本。阿里云技术团队也给我们的开发团队提供了有力的技术支撑,碰到技术问题,我们可以非常及时得到响应,帮助我们排除了业务开发中的许多问题,再次证明我们的当初选择是正确的。
展望未来,随着业务的扩展,我们的数据会有一个指数级的增长,阿里云技术会为我们的业务系统提供更好的基础服务支撑。
我们会继续和阿里云合作,同时将运营中的问题反馈到阿里云技术社区,协助阿里云技术团队将数据产品做得越来越好。