内容简要:
一、Redis社区
二、阿里云Redis
三、企业版Tair
一、Redis社区
(一)Redis社区发展历程
Redis于2009年诞生,从第一个版本至今已经经历了12年,目前也是全球最受欢迎的KV数据库,在各个领域都有大规模的应用。社区基本上每1~2年就会有一个版本推出,大版本为X.0格式,如3.0、4.0、5.0、6.0,小版本如3.2。每一个大版本都会有一些重要的特性,而小版本一般都会有一些局部特性的增强。
从2.8版本开始,Redis就有很多功能完备的特性,已经实现基本的数据集以及一系列使用命令,如简单的字符串String, List的数据结构,还有字典型的Hash,集合型的Set以及有序集合Sorted Set,十分贴合软件开发的实际需求。
同时,支持主备复制和持久化,对服务的可用性和数据的可靠性都有一定的保证,而且支持像事务Multi、Exec这种批量操作。还有内置的Lua虚拟机,可以在Redis里面执行Lua脚本,以及像阻塞操作,比如Blocking的Brpop,还有事件通知等高级特性,此时的Redis已初步具备在生产环境中使用的能力。
2015年社区推出3.0版本,发布集群Cluster这一重量级的特性。在2.8版本之前都只是支持主从版本,即最多一个节点提供服务。集群版本之后就可以有很多节点共同组成一个集群来提供服务,这样可以有效地扩展数据的存储能力和服务的性能。社区提供了集群管理的软件,方便平时对集群的运维。
2016年推出3.2版本,主要是对Lua复制等方面进行优化。
2017年推出4.0版本,这个版本有很多重量级的特性。如Lazy Free,可以对Big Key进行秒删的,避免业务清理Big Key时造成Latency时延的突增,让运行更平滑更稳定,业务也就更稳定。
PSYNC2是对原有的PSYNC协议的增强,在各个主从复制的场景下面做了相当多的优化,大大减少了在实际场景中进行全量复制的情况,有效节省了CPU、磁盘还有网络带宽等资源。
Modules可以让用户自定义数据结构和命令,相比于之前的Lua脚本,Modules更为灵活,可以让Redis在各种定制的业务中发挥更大的作用。
2018年10月份推出5.0版本,主要是发布Streams数据结构,结合了List和PubSub的特性,让Redis可以作为消息中间件使用。
2020年发布6.0版本,是Redis发展到现在最具有企业特性的版本。其中就包含大家期盼已久的IO多线程,在性能上进行非常大的优化,通过将网络收发做成多线程化,提升了Redis的处理能力,拓展极限的性能。
另外像ACL开始支持用户的概念,可以对不同用户进行命令级别的权限管理。TLS提供网络传输上的安全加密,使得Redis得到更好的安全保障。Client side cache为用户提供了更强的能力来构建本地缓存。
2020年另外一个大事件就是Redis之父Antirez宣布退出,不再参与Redis的开发和社区的运营,去追求更广阔的星辰大海。同时Antirez建议一直以来参与Redis社区维护跟建设的核心贡献者,留下来一起组建Core Team团队,负责今后Redis的运营。
就这样, Redis Core team团队正式成立,开始接管Redis社区的维护和运营。2021年推出了6.2版本,这也是Core Team成立之后发布的第一个版本,广泛采纳许多用户的需求和建议。如对Redis命令进行了丰富的扩展,也做了很多性能优化和简化运维方面的工作,这个版本目前也已经Release,欢迎大家去使用。
(二)Redis社区现状
目前社区Core team一共有5名成员,3名来自于Redis Labs,1名来自亚马逊云服务(AWS),1人来自阿里云,这5名成员共同组成了Core team,维护社区的建设。
目前,Core team每两周会举行一次线上会议,会议内容如PR要不要合并,然后有没有一些好的建议能从用户那边吸收过来的,有没有一些用户的需求可以得到实现,大家提出来的这些Issue要如何解决,同时也会讨论制定未来的发展方向,如7.0版本的Roadmap现在就正在讨论中。
比如要对主从复制、持久化与资源管理等做优化。由于现在管理Redis内存的话,数据区跟管理区是没有区分的,因此7.0版本在这方面也会做出优化。
Redis发展到现在,从最初的2万行代码,到现在6.2版本已经有12万行代码。从代码量上可以看出,Redis的功能越来越复杂,同时也意味着提供的功能越来越丰富。
二、阿里云Redis
(一)阿里云Redis产品系列
Redis系列产品主要分为三大系列,分别是标准版、集群版与读写分离版,适用于不同的业务场景。
标准版采用主从模式搭建,主节点提供日常的访问需求,备节点是一个热备,提供HA高可用。Master一旦发生宕机或者其它异常,会在30秒内自动切换到备节点,保证业务平稳运行,并且兼容社区的协议。
集群版是多个Redis节点的组合,在容量和性能上都有大幅提升,满足用户对容量与高性能的需求,同时支持直连和代理两种访问模式。
直连模式与社区Cluster协议完全一致,这同时需要业务使用支持Cluster协议的Smart Client接入访问。代理模式额外开发了Proxy组件,通过Proxy组件访问业务的话,就可以只通过一个统一的地址访问Redis集群。客户端的请求会通过代理服务器转发到不同的分片,不需要Smart Client就可以访问整个Redis的集群,降低了应用开发的难度和业务代码的复杂度。
读写分离板是由主备节点和只读节点以及Proxy代理一起组成的系统。代理节点会自动把读写请求路由分发到Master节点和只读节点,用来支撑这种写少读多的业务场景。
(二)阿里云Redis运维体系
阿里云建立了一套Redis的运维体系,涵盖日常运维管理各方面的需求,例如实例运行状况实时和历史的监控,配置告警,修改参数等,以及在接入层提供各种类型的连接访问。
数据安全方面开发了账号体系,在网络安全方面开发了SSL提供网络安全传输加密,以及定期的备份恢复功能。如果发生误操作的话,也可以及时恢复数据,并且支持实时的热点分析以及离线的数据分析,让用户对业务的运行状态有更直观的了解。
同时我们还提供了审计日志,当业务需要纠察时可以进行溯源,这些功能都可以通过控制台来接入使用。
(三)性能监控
1.标准版
性能监控是非常基础且有用的一环,也是用户经常使用的功能。
Redis提供了非常丰富的监控项,从实例的基础运行状态,如CPU、内存、QPS和网络带宽,以及各种类型Key的数量,如过期key是否被删除,Key的总量等。还有像实例运行的最大延迟,平均延迟,支持自定义监控项,对各种数据结构进行监控。
2.集群版
集群版支持对集群架构下面各种指标的查看,如Proxy节点的运行指标,独立数据节点运行指标等,同时也可以查看节点聚合的运行状态。
3.监控频率
用户对于监控频率有需求的话,可以设置监控的频率,默认为60秒/次。如果说需要细粒度监控,可以在控制台上进行修改。目前支持最细粒度为是5秒/次采集。
(四)连接管理
在连接管理方面,我们同时支持内网的VPC网络访问和公网访问,公网访问一般是做练习或者调试。
在集群版的话,我们提供直连访问和Proxy普通访问的方式,都可以在控制台连接管理进行开通。
(五)账号管理
1.创建账号
登录控制台 -> 点击实例ID -> 账号管理 -> 创建账号
关于账号管理,在实际的业务场景中,有时一个实例可能会有多个业务线使用,不同的业务线用法不一样。
为了避免相互干扰,需要做好权限控制。目前云Redis支持设置账号管理体系,支持读写账号和只读账号,帮助用户更加灵活地管理实例,最大限度避免误操作,提升数据的安全性。
首先进入实例的管理页面,然后点击账号管理,进入后在右上角点击创建账号,就可以看到新建一个读写或者只读的账号。
2.权限修改
另外,用户可以对已有的账号进行修改。比如说可以把一个只读的账号改为读写账号。如果账号不再使用,也可以进行删除,非常方便地满足日常运维的管理需求。
(六)审计日志
1.开通服务
审计日志是对实际的运行操作记录提供的一站式管理服务,由阿里巴巴集团经历了大量大数据场景之后锤炼而成,业务无需额外的开发,就可以在云端完成运行日志的采集、消费投递以及查询分析,是提升运维与运营效率非常有用的工具。
审计日志服务可以帮助用户时刻掌握产品的运行状况和安全。
Ø 具体操作步骤如下:
1)登录控制台
2)点击实例ID进入实例管理页面
3)点击日志管理->审计日志
4)选择审计日志设置
5)开通服务
开通审计日志之后,系统会记录写操作,也就是对数据进行修改后的操作就都会被记录下来。审计的操作会有额外的性能消耗,大概有5%~15%的性能损失。
2.查询日志
审计日志开通之后,如果用户需要查看数据库运行的历史记录,包括写请求的记录,可以在审计日志查询进行操作,寻找Release的资源突增的这些原因。
例如查找哪些数据被修改、删除的记录,云数据库Redis版的审计日志就可以提供这些线索,通过不同的过滤条件筛选日志,精确的定位目标记录,可以选择划定时间,然后根据关键字,如IP,执行过哪些命令,有哪些账号访问等关键字来对审计日志进行过滤,定位到之前的操作记录。
三、企业版Tair
阿里云数据库Redis企业版叫做阿里云Tair,是基于阿里集团内部使用的Tair产品研发的云上托管键值对缓存服务。
从2009年,阿里云Tair就开始承载着阿里巴巴集团的缓存业务,历经天猫双11、优酷春晚、菜鸟、高德等各种业务场景的磨练,是一款真正的企业级缓存产品。如今,基于Tair演进的Redis企业版也是阿里巴巴集团调用量最大的服务之一,在多年的阿里巴巴双11全球狂欢节上也经受住了考验。
(一)社区版Redis与企业版Tair
目前,阿里云提供社区版Redis和企业版Tair两款产品,分别解决不同的业务场景。
社区版主要是根据开源版本的迭代解决用户基本需求,例如解决Redis自建部署运维的问题,开箱即用。如果业务要扩展,也可支持在线灵活的升降配,同时可以从主备到集群灵活编配。
当Redis自建时,排查比较困难的话,也可以提供细粒度的监控支持,以及像审计这种溯源的操作。此外,它完全兼容社区版的,在安全方面提供像SSL安全访问连接和白名单服务。
还有一些对Redis的一些优化,比如在社区版本身早期版本的话,短链接场景是性能不佳,还有一些复杂的操作会导致实例陷入循环,此时容易误判造成误切换。还有像Redis本身不提供实时的热点查询服务,针对以上问题,我们在云上的社区版都进行了很多改进。
企业版主要是为了解决用户的痛点,提升访问性能,扩展应用场景,而且从访问延迟、持久化需求、整体成本这三个核心的维度考量,分别开发了企业版性能增强版,持久内存版和容量存储版,来满足不同场景下的业务需求。今天我们主要介绍的是跨域复制多活和PITR按时间点恢复这两个特性。
(二)全球分布式缓存
1.功能简介
随着业务的发展,在业务分布比较广的时候,如果还采用跨地域访问,此时延迟就会比较高,影响用户体验。阿里云推出Redis全球多活分布式缓存功能,可以帮助业务解决这种跨地域访问带来的延迟问题。
Ø 分布式缓存的功能有如下三点优势:
1)多中心;
2)数据库多IDC同步,就近读;
3)高业务扩展性
例如可以直接创建或指定需要同步的子实例,不需要通过业务自身的设计就可以实现。可以让业务更专注与上层的逻辑开发,而且提供了跨越复制的能力,快速地实现异地多活、异地灾备。
可以应用于跨地域数据同步场景,像多媒体、游戏、电商等等各个行业,进行全球化的业务部署。
Redis的全球分布式缓存具体的实施方案为通过建立数据通道,将多个子实例组成一个逻辑的分布式实例进行操作,所有子实例的读写都可以保持实时同步,轻松支持异地多个站点,同时对外提供服务的业务场景。
2.实际案例
以导航为例,比如有三个数据中心:北京、上海与广州,某用户现在从北京开车去往广州,导航要实时地推送地理位置,这个时候就会遇到DNS漂移的问题。
DNS漂移是一个边界效应,通常的大概影响5%~7%的用户。在导航中跨越边界的时候就会出现大量的交叉访问,导致用户获得不同的数据,此时用户体验很差。如果要在业务上解决这个问题的话会很复杂,可靠性也不高。如果通过我们提供的全球分布式缓存,建立三地六向的同步,在北京、广州和上海三地六向同时发送数据,让用户获得更加流畅的体验。
3.开通方式
开通方式分为两种:新购开通和转化开通。
Ø 新购开通操作步骤:
1)控制台左侧导航栏,点击全球多活;
2)右上角点击创建实例->新购分布式实例;
3)根据需求创建实例。
Ø 转化开通操作步骤:
1)控制台左侧导航栏,点击全球多活;
2)右上角点击实例创建->已有企业版实例转化;
3)选择适当实例转化。
在分布式实例创建完成之后只包含一个子实例,此时需要为该分布式实例添加多个子实例才能建立通道,完成整个全球多活分布式实例的创建,满足子实力之间实时数据同步的需求。
Ø 添加子实例操作步骤:
1)进入全球多活页面;
2)找到目标分布式实例,点击[+]图标;
3)点击子实例列表的添加分布式子实例;
4)创建和已有子实例规格一致且不同地域的子实例。
4.查询延迟
Ø 指标说明
1)status
同步状态,1为正常,0为异常。
2)ops
每秒从源实例同步的binlog条数。
3)current_binlog_sync_delay_time
同步延迟,单位为秒。
(三)数据闪回
1.功能介绍
云数据库Redis具有性能卓越、架构灵活、安全性强、可用性高等特点,越来越多的应用开始把云数据库Redis作为持久化存储使用,此时可靠的持久化存储就显得尤为重要。
原本社区版只提供的RDB不能满足需求,企业版Tair优化了持久化的机制,将AOF增量归档,实现方便快捷的秒级恢复,提升运维的便捷性。具体就是PITR按时间点的恢复,PITR按时间点恢复就是Backup/Restore的终极形态,支持秒级的数据恢复,防止删库跑路。
例如我们记录了从某一个时间点之后所有的操作数据,如果说需要恢复到某一个时间点的话,以进行克隆创建一个新实例,一直恢复到这个时间点即可。具体可以应用在高级的数据安全场景以及游戏回档,还有版本降级等等。
Ø 任意时间点的数据恢复:
1)Backup/Restore的终极形态;
2)支持按秒级的数据恢复;
3)防止删库跑路;
4)Clone & Switching随时回切。
Ø 场景:
1)高级数据安全;
2)游戏回档;
3)版本降级。
2.使用方式
Ø 前提条件:
1)实例为企业版(性能增强型);
2)AOF落盘处于开启状态。
Ø 操作步骤:
1)在数据闪回页签,点击马上闪回;
2)自动跳转至克隆实例页面;
3)在创建克隆实例时选择要恢复的时间点。