Redis数据库云端最佳技术实践

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~程序员

本文由腾讯云数据库 TencentDB发表于云+社区专栏redis

邹鹏,腾讯高级工程师,腾讯云数据库Redis负责人,多年数据库、网络安全研发经验。在网络、计算、存储、安全等领域有深刻的研究和丰富的产品化经验。 在Redis、MySQL等数据库的高可用、高可靠和中间件方面有丰富的实践经验。算法

img

此次过来主要是和你们分享一下,腾讯云上个月正式上线的Redis4.0集群版的相关内容,跟你们分享咱们在作集群版的时候有哪些思考,咱们怎么去设计整个系统架构,最终咱们作了哪些东西。大概会有三个点,第一个点是说Redis的使命,咱们看Redis是什么产品,为何这么火,第二块就是腾讯云Redis4.0集群设计经历了哪些思考,最终作成什么样子,最后是2018年年初,登陆到腾讯云的自研兼容Redis协议的CKV引擎,他是怎么样的一个架构设计。sql

img

我以为每一个伟人都是带着使命来的,Redis也是同样的,每一个时代都有每一个时代的明星,Redis是移动互联网的时代数据库明星,Memcached诞生在Mysql没法知足业务高并发低时延需求的时代,可是Memcached在使用体验,业务场景的支持方面太过简单,全部就有了Redis的诞生,Redis是一个高性能、低延迟、支持复杂数据结构的瑞士军刀。数据库

img

咱们接下来看一下这个属于Redis数据库的时代,今天是一个什么样的状况,这是这个月刚刷新的数据,Redis的排名已经超过了ES了,已经位列第七了,并且一直持续增加,愈来愈热,这个背后还隐藏了一个数据,Redis的官网如今有65%的流量来自中国大陆,全球都在用,可是中国的程序员用得最6。这里多是跟国情有关,咋们国家人多,因此要求高并发,如今服务类最火,服务质量第一要求就是快,能够看咱们如今都快递、打车、外卖这些场景,第一体验都是快,这是Redis的优点。后端

这块是Redis标签的一个排名,咱们能够看到第一个是Performance,性能包括高并发低时延,咱们来看下Redis在并发上面能作到多少,Redis能作到单核每秒跑10万次请求,还能够在5万并发的时候作到99%的请求在1毫秒内返回。in-memory cache,用Redis不用建表,这对程序员来讲,我以为确实是开发者给咱们的礼物,因此Redis可以知足这个时代的要求,可以笼络咱们这帮开发者,可以成为这个时代的明星。其实Redis已经有10年的发展历史,可是咱们能够看到这两年在咱们云上还在持续快速的增加,Redis主要场景仍是在于缓存,从咱们如今的数据来看,若是抛开游戏的场景不说,80%的场景都是缓存,因此它仍是缓存数据库,下面还有不少标签,咱们总结下来Redis是一个很是快很是简单好用的内存数据库,这就是Redis简单的画像。缓存

进入到今天的正题,我来跟你们分享一下咱们作了接近半年腾讯云的Redis4.0Cluster版本的状况,咱们基于社区4.0版本+自研的Proxy打造的分布式缓存数据库,咱们先认识一下官方Cluster是什么样的一个数据库,相对于主从版的话,在逻辑层面上多了管理层,官方Cluster有数据层面和管理层面,咱们能够看一下这两个层面的东西,第一层面是在集群这里有一个逻辑在里面,负责把数据Sharding到不一样分片,把数据打散,第二块是自治管理。另一块就是作了平滑迁移的支持,在新增版里面加了两个命令,若是数据没在这个分片上能够告诉你在别的分片上,再加上智能客户端的配合,就算数据搬了以后,也不会访问失败,总有一个地方能找到它,这是数据层面的状况。另外就是下层管理平面的内容,管理平面是彻底自治的管理系统,基于gossip协议,一个无中心化的方案,不须要第三方组建,无节点管理彻底是靠你们商量,这我的究竟还活不活着,你们商量出来的,不须要第三方参与的。另一块就是高可用,会有完整的一套检测逻辑以及投票把它判死的逻辑,集群版作了两大块特征,这是官方源生的状况。安全

咱们认为Redis Cluster必定要有一个Proxy,第一原生集群版必须有一个智能客户端支持,刚才说了在集群版里面新增了几个命令,你访问的时候若是这个数据没在这个分片,会告诉你到别的地方取,原来不须要处理这种命令,当迁移到集群版遇到这种命令就傻了,没办法跑了。这个时候你须要智能客户端的支持。另外的状况是你的客户端须要感知后端的架构,把全部信息同步到客户端,而后客户端作分片。对运维比较简单,但对于咱们开发者是极其不友好的,在云上,IP资源很珍贵,咱们如今有一个电商的大客户,如今用128片集群版,用的是一组两从,全部节点要128×3,就400多个IP,一个C网都不够,这种用法用起来对客户端太不友好。为何必需要Proxy,在某些层面上要丰富某些功能,在集群方面的监控作的不够,好比说数据倾斜,由于是无中心化设计,没有统管全局,咱们要作流量隔离,要作热Key监控、访问监控,要么改变Redis-server代码要么用中间件实现。作云的时候云上的客户太多了,会有不少客户,不少需求,不少功能要上,都去改Redis的代码,Redis的代码很难维护,最简单的办法就是作一个Smart Proxy,它至关于一个智能客户端。咱们把这块Sharding的逻辑下沉到中间件。服务器

咱们看一下若是要选一个Proxy有什么可选的?应该你们这些都很熟悉,Twemproxy是一个老古董了,代理组件最大的硬伤是没法支持扩容和缩容,你在业务增加的时候从新搬数据根本受不了。另外就是Codis,国内的大牛spinlock开发的,Codis作了一套完整的方案提供给你们,系统很大很复杂。确实没有官方作的优雅,同时也改了Redis Server的代码,还有一个硬伤是没有官方血统。这是主流咱们能看到的比较常见的方案,云上咱们是没办法直接搬的,由于没法在云上顾到成千上万的用户的需求的。网络

img

看咱们腾讯云作的方案,后面是官方源生的Cluster,彻底是自治的版本,咱们作了少部分的优化。再往前是智能客户端,会完成代理转发,作大量定制化监控以及数据Sharding。再往前面就是LB,主要是为了提供VIP,这样对开发者来讲看到一个IP就好了,像单机版用它就OK了,这种是比较优雅的方案,全部的东西都屏蔽到后端,咱们只须要写和读就能够了,这是我们最终的方案。

Redis集群版自己数据操做层面是很简单很稳定的,在作集群版的时候咱们在两个地方作了很大的努力,第一个是数据迁移,咱们看一下哪些场景会有数据迁移的需求?

听众:老师,你好,我是一个初级人员,咱们公司如今也在用Redis集群,若是想用大家腾讯云的话,这个步骤能解决你刚刚说的代理,这些东西由大家管理吗?以前都是咱们本身百度搭了百度官方的集群方案在用。

邹鹏:大家如今数据在哪里?

听众:放在本身的本地,咱们有意向购买腾讯云的Redis。

邹鹏:大家如今有数据,业务上云以后数据要上来,咱们有DTS的平台,只要你把网络打通,咱们工具就能连到大家的Redis,数据就能够传过来。

听众:谢谢老师。

邹鹏:云计算的优点在于你若是想要立马就能有,整个云在SAAS层PASS层,国内都已经很完善了。若是你们之后创业,把这些辛苦的事交给咱们就好了。

接下来回到这个话题,数据迁移,集群版谈到稳定性,最大的挑战就是数据迁移,哪些场景下会有数据迁移呢?扩容,好比说扩容的话,能够看到咱们的场景,三个维度,横向分片数,128片,垂直维度从4G到32G维度能够调整,还有副本数5个副本,10万写,50万读。这种状况下都会产生扩容和缩容的场景。我们业已在初期的时候少买一点,以后能够横向或者纵向扩。咱们花了很大的代价作这块,还有一块集群版,这个东西不免产生数据倾斜,假如你的Key设计的不合理,就会出现你数据基本上都是打在某分片上,这个时候数据倾斜了就要要涉及数据迁移。

有个比较难的地方,迁移过程当中比较平滑,极端状况下访问某个Key正在迁移的时候,会等几个周期,具体原理能够下来或者咱们交流,如今的状况,好比原来搬数据的话确定会断链接,如今集群版的支持,加上咱们中间有一个PROXY能够屏蔽掉,在你业务跑的时候不须要停服就能够进行扩容或者缩容,不过仍是建议在业务的低峰期作,咱们指定时间升级,好比定时到凌晨三点钟作这个事情就妥妥的。Redis有两大痛,第一是大Key,第二是热Key。若是咱们如今好比说遇到大Key的问题,咱们数据迁移的时候是搬这个大Key仍是其余的Key?

分析大Key要作RDB分析,这个过程很慢,咱们在云上天天都作备份,咱们在这里作了一个异步懒惰扫大Key的事情,在搬迁以前挨个把Key都扫一下遍,而后就结合数据的算法,哪里有大Key就知道了,咱们就避开大Key 进行搬迁。如今至少遇到大Key不会让你的Redis卡住。

听众:大家搬迁的话对前面的数据有影响吗?

邹鹏:搬迁自己设计就考虑到业务不用感知,不用非要挂靠停服,这块咱们也是想可用性作到极致。

咱们须要在Proxy作全局监控,怎么炸干Proxy的价值呢?一、访问监控;二、Key分析;三、指标监控;四、慢查询;五、告警配置;六、流量隔离。

咱们会分析实例哪些Key,告诉你在Redis里面放了什么Key,而后前缀分别是什么,还有就是大Key,准确的大Key是经过RDP分析作的。上面提的大Key状况是数据搬迁的时候咱们要实时看一下,也是异步扫的过程。有时候想看一下开发究竟写了什么数据在里面,能够经过这些数据了解到你的Key的状况,还有常见的指标监控,流量、命中率这种,很重要,缓存、能够经过命中率看到,这个时候10%5%的时候是有问题的,这个指标很关键,可以帮助咱们及时看到异常的问题,容量、流量、还有命中以及查询miss的状况。

慢查询不是特别多,可是会有。仍是整个腾讯云有完整的监控系统,全部指标都是接入云监控的,配置一个指标,触碰阈值就能发告警。很容易出现大Key,会影响到你其余的实例,这个时候咱们必需要对流量作隔离,咱们在Proxy作隔离,每一个规格对应哪些流量,保证业务的可用性。

这就是最终的版图,从服务器对应下面4.0的集群,这是三层的状况,这边是周边的支撑系统,好比说监控、资源管理、备份。源生有分布式自治,咱们还会作更细层面的,比较主机层,最大的保证可用性。

这是跨可用和高可用的问题,如今都怕挖挖机,咱们会提供跨可用和高可用的方案,好比你在广州一区,买了一个集群4.0,我会复制到集群到别的可用区,在每一个区提供不一样的IP,均可以访问和写,只不过在同时访问的时候,写再返回到主可用区。异常状况发生的时候,整个可用区不可访问,你的业务调到可用区二区还能够用,就是这么一个架构保证在可用性方面作到地域级别的可用性。

img

另外介绍一下18年初登陆腾讯云的兼容Redis协议的自研CKV引擎,CKV名字很简单很朴素,一看就是作研发人员取的名字,不会说牵牛星织女星的名字。这块是总体的状况, 2009年开始立项,最大的背景就是QQ空间,那个时候就起来了,2013年访问量10亿,去年年末咱们就基本完成了兼容Redis协议的开发,而后上腾讯云,以前是私有协议,因此这块上云,你们接受不了,去年作的重点事情是兼容Redis协议,在今年年初咱们就正式上线了,你们到时候也能够在咱们的官网上能看到,

img

为何这里要单独提一下这块的设计,没有Proxy集群不叫优雅的集群版,但CKV确实没有Proxy,可是它也确实很优雅。Proxy有不少好处,但有一个问题就是费钱,成本很高。咱们就用另外的方案,就是CKV最先的方案,没有Proxy,请求会随机打到任意一个分片,每一个分片会有全局的slot信息,若是发现这个请求不能在当前分片处理可以转发到目的节点去处理,每一个节点均可以是Proxy,好处是省钱,时间更低。这边是逻辑的概念图,好比说CVM到LB到数据节点,假如你的请求达到从节点,这个从节点点会把请求放到主节点,主节点把数据返回完成以后再返回从节点,这是CKV不同的方案,是源生分布式的。另外在网络上突破了单线程,Redis的消耗是Key的操做还有网络的操做,像QPS5-10万的时候,网络占比很大,咱们把网络收发变成多线程,既保证数据一致性,又把性能提高,最高单位节点可以跑到30万+,好比说你须要事务的支持,可是须要事务支持的时候很难用集群版的,这个时候能够考虑这种模式去支持,既要突破10万QPS的,又要作到数据无分片的状况。更多数据库前沿技术可关注 咱们公众号:腾讯云数据库CDB

img

Q & A

Q:你好,我问一下Redis跟Mysql的占比分别是多少?

A:我很好奇,你问这个问题的背景是啥?

Q:MySQL使用的占比会比你这个大不少。

A:你能够看这张图,实际状况大概是这样子,大概10:1的样子。

Q:在单节点的时候,考虑过Redis怎么实现高分组吗?咱们是否是能够考虑经过DPDK吗?

A:我们也尝试过这样的思路,投入产出比不会特别高,如今技术圈流行一个概念就是去OS,去FS,去协议栈,可是这块的成本说实话特别的高,,投入特别的大,TCP很慢很老很保守,可是跑了那么多年,若是新作一套成本会特别的高,投入产出比很低,真正单个线程要写特别大乐得场景不会特别多,在有Redis 集群版的状况下咱们能够考虑经过分片的扩展来提高写性能,经过添加副原本提升读性能。因此这块也是咱们经历过的一些思考。

相关阅读 【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

此文已由做者受权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

相关文章
相关标签/搜索