点的外卖总能让离店近的外卖小哥送来,双 11 秒杀完结后产品能立即下架,12306 火车票保障从来不超卖,微博下拉就能刷新出好友动静……这些日常碎片的背地都有着 Redis 的身影。
提起 Redis,互联网从业者无人不知,无人不晓。毕竟,开源 Redis 作为一款经典的“缓存”产品,能撑持泛滥业务架构搭建,在游戏、电商、社交媒体等行业中施展着重要的作用,广受开发者青眼。
然而近年来,随着各行业规模逐步扩充,简直只能依附于关系型数据库的传统“缓存”逐步难以撑持下层业务,越来越力不从心。
一旦业务规模扩充后数据量迫近内存下限,开源 Redis 轻则产生重要数据逐出,重则导致节点 OOM 宕机。而且开源 Redis 为了拜访疾速,全副数据都保留在内存中,其独有的 fork 机制,更让平时的内存应用不得高于 50%,使得内存价格始终居高不下,导致部署老本十分高。
为了解决这些难题,华为云推出了自研的企业级 Key-Value 数据库——云原生分布式数据库 GaussDB(for Redis)(下文简称 高斯 Redis),让开发者用更低的老本构建依赖缓存的利用,且性能更高,运行更稳固。本文将从高斯 Redis 的技术架构和利用场景登程,一一道来为什么高斯 Redis 比开源香,以及它是如何做到又快又好的。
开源不够,自研顶上
单刀直入,先看看开发者最关怀的性能和老本。如下图所示,与开源 Redis 相比,高斯 Redis 在 老本、可用容量、吞吐、压缩上 都有十分大的劣势:
注:比拟雷同数据容量(约 200G)的老本开销
核算下来,高斯 Redis 以 1 / 4 的价格领有 10 倍以上的可用空间,整体老本相当于是开源 Redis 自建数据库的 1 /40,这里还不包含自建 Redis 数据库须要额定的搭建、运维、监控、降级扩容等各项老本。
同样,比照高斯 Redis 和开源 Redis 集群在 X86 架构下的性能测试,结果显示,它能较开源 Redis 集群能提供 更高的 QPS,更低的拜访提早,以及更低的数据存储老本。
- 性能劣势:在雷同测试条件下,高斯 Redis 的 QPS 较开源 Redis 集群进步了 11%~19%,均匀提早和 P99 比 Redis 集群升高了 70% 以上,p9999 比 Redis 集群升高了 15% 以上。
- 抗写劣势:在数据量大于内存的写测试中,原生 Redis 集群因内存限度而 OOM,高斯 Redis 仍然能够提供不俗的性能服务,它的可用的存储空间由底层 SSD 大小决定的,相比原生 Redis 集群抗写劣势显著。
- 据存储老本更低:高斯 Redis 提供了高效的数据压缩服务,其占用的存储空间只有开源 Redis 集群的十分之一,相当于数据存储老本升高了 10 倍。
那么,高斯 Redis 的劣势源自什么?从它的架构中或者能够窥见一斑。
存算拆散,冲破瓶颈
高斯 Redis 有两个跟业界齐全不一样的个性,第一个便是独有的存算拆散架构, 计算层实现热数据缓存,存储层实现全量数据的落盘,两头通过 RDMA 高速网络互连,通过算法预测用户的拜访法则,实现数据的主动冷热替换,最终达到性能晋升。
该架构基于华为外部的 自研分布式共享存储池, 它也是华为全栈数据服务的基石,比方文件 EVS、对象存储 OBS、块存储,还有数据库族、大数据族都依赖于此,可想它的弱小及稳定性。
高斯 Redis 基于共享存储池实现了一套 Shared Everything 的云原生架构,充分发挥了云原生的弹性伸缩、资源共享的劣势,使得它具备强统一、秒扩容、低成本、超可用等个性,完满避开了开源 Redis 的主从沉积、主从不统一、fork 抖动、内存利用率只有 50%、大 key 阻塞、gossip 集群治理等问题。
在存算拆散的架构下,高斯 Redis 的劣势能够总结为:强统一、高可用、弹性伸缩、高性能。
强统一
高斯 Redis 将全量数据下沉到强统一的共享存储池,得益于共享存储池的 3 正本机制,因而写入高斯 Redis 的数据,在客户端收到回复时,数据也将是 3 正本强统一 的,保障宕机的时候数据不会失落,从而为业务提供前后一致的状态,再也不必放心主从切换后的数据一致性和失落问题。
高可用
其次是 高可用,受害于分布式共享存储池,高斯 Redis 的每个计算节点都能够看到并共享所有数据,当某一个计算节点产生故障挂掉,其保护的 slot 路由信息,会被剩下的节点主动接管。因为不波及底层数据的迁徙,这个接管过程十分快。所以 N 个节点下,最多能够容忍挂掉 N - 1 个节点。
弹性伸缩
再就是弹性伸缩带来的 秒扩容能力,实现按需扩容计算和存储。计算资源的扩容只波及到元数据的批改,把相应的 slot 路由信息迁徙到新的节点上,迁徙速度十分快。因为采纳的共享存储,大多数状况下存储扩容只有进行逻辑扩容,不波及数据的搬迁,在后盾批改存储配额即可。
高性能
存算拆散的架构看似比拟重,链路比较复杂,实则在硬件采纳、软件优化上,能够做的更大胆更激进,比方 RDMA 网络、用户态协定、长久化内存等等。因而受害于这些专属的存储设备,加上计算层全负荷分担架构(不引入从节点,因而性能轻松翻倍),比照同类商业数据库产品,在数据量大于内存的存储场景下,高斯 Redis 的性能体现很好。另外,比照开源 Redis,在数据小于内存的点查场景下,高斯性能也有很大劣势。
第二个个性是多模架构带来的产品应用便捷性。
高斯 Redis 是多模数据库 Gauss NoSQL 的一员,Gauss NoSQL 提供了全栈的分布式 KV 引擎、用户态文件系统、存储池等技术,只须要在接口上封装 Redis 协定,即可轻松实现一个全新的 NoSQL 产品。相似的,华为还提供了 MongoDB、Cassandra、Influx 等 NoSQL 引擎。
也正是得益于高斯 Redis 的独特劣势,使得它在一些典型的利用场景下,可能应答各种突发状况,最大化施展出 Redis 的个性。
互联网业务神器,撑持海量存储场景
Redis 最常见的利用场景是缓存,用来寄存秒杀、热点事件的数据,比方微博热搜。同时,凭借其优异的存储能力,缓存场景之外的诸多利用 Redis 也能够轻松应答,比方
流: feed、音讯队列、IM 聊天、IoT 心跳上报;
只读状态: 历史订单、日志审计、归档信息、历史轨迹、生产记录、物流详情;
可变状态: BI 报表、金融风控、智能客服、广告举荐、标签工程、用户画像、地理位置、门路布局、常识图谱等。
上面,以其中的一些场景为例,具体看看高斯 Redis 到底有多弱小?
Geo
饭点时关上公众点评查看左近的餐馆,外卖小哥依据距离远近来决定配送的门路布局……这些都依附 LBS 服务,它的实现又须要 Redis 来存储地理位置数据。但开源版本 Redis 因为内存限度,始终没有大规模利用反对地理位置信息存储管理的 Geo 性能。
高斯 Redis 应用磁盘代替内存,解决了这些难题,它的 Geo 性能实用于数据量大、读写频繁的场景,能够应答诸如外卖平台、点评平台、找房平台中,随着用户增长而对应的地理位置信息的数据量的增长,最高可达 TB 级别。以下图为例,能够看到在高斯 Redis 反对下,外卖零碎能够应用 Geo 的相干命令,让用户获取骑手的实时地位,骑手也能找到左近可配送的订单,最终顺利将用户的外卖送到用户。
计数
社交平台每条热搜记录的搜寻量数值;用户注册一个帐号后,网站记录的关注数、粉丝数、动静数;一个接口一分钟被限度 100 次申请等。这些数据背地,是一个个计数器在工作。
计数是典型的强统一利用场景,比方电商在秒杀流动中,往往会搭建 Redis 主从集群给上层 MySQL 做缓存,用 Redis 的计数器性能抵住流量压力。
所以如果数据产生不统一,计数器就会失去谬误的信息,整个数据库可能面临解体的危险。但原生 Redis 的主从同步是异步的,当主节点写入数据后,从节点不保障立即更新数据,如果此时读取数据,读到的就是过期的旧数据,产生数据不统一问题。高斯 Redis 则能够把全量数据下沉到强统一共享存储池,彻底摒弃了开源 Redis 的异步复制机制。另外,计算层将海量数据进行分片,在故障场景下,主动进行接管,实现了服务的高可用。
即时通讯
即时通讯(简称 IM)是一个实时通信零碎,容许两人或多人应用网络实时的传递文字音讯、文件、语音与视频。它最外围的是音讯零碎,包含聊天音讯的同步、存储和检索。而音讯存储库和同步库又对存储层的性能有很高的要求:要能撑持海量音讯数据的永恒存储,具备极高的写入吞吐能力,尽可能低的读取提早等等。
综上,存储层的性能会间接影响到 IM 零碎的用户体验。高斯 Redis 在性能和规模上能够满足 IM 系统对存储层的严格要求,它作为 IM 零碎的存储层,能够将大量的随机写转换为程序写,晋升数据写入性能,再通过读缓存、bloom filter 优化读取性能。
下图是一个基于高斯 Redis 的 IM 利用案例,应用的是 Stream 作为根本数据结构。创立一个群聊时,在 Redis 中对应地为该群聊创立一个 Stream 队列。在发送音讯时,每个用户都将音讯依照工夫程序增加到 Stream 队列中,保障了音讯的有序性。
这个利用中波及到了一种数据类型——Redis Stream,它也是一种音讯队列,提供音讯的落地存储性能,让每个客户端能够拜访任意时刻的音讯,并记录拜访地位,保障音讯不会失落,以 IM 中的文字聊天为例,应用 Stream 作为中间件,实现聊天室的发言和信息查看。高斯 Redis 能够存储和解决大规模的 Stream 数据,鲁棒性强的同时老本绝对更低,实用于海量音讯队列的场景。所以,相较于原生 Redis,是更为理想的 Stream 队列承载计划。
Feed 流
互联网时代,微博、抖音、头条等都在通过 Feed 流(信息流)将关注的好友或感兴趣的内容及时推送给用户,吸引用户的趣味,进步产品的商业价值。Feed 流零碎是 Feed 生成者将生产的 Feed 通过存储散发零碎传递给 Feed 消费者,最终以某种展示模式。
整个零碎最要害的是同步存储系统,首先是内容存储模块,由它来存储最原始的内容,比方用户发的一条微博;其次是关联关系存储模块,存储的是用户之间的关系;最初是信箱模块,也叫消息传递模块,通过它将消息传递到每个关联用户手中。
在 Feed 流场景下,高斯 Redis 可能撑持海量音讯内容的存储和低提早拜访,以及关联关系的增删查改。在同步存储系统中的信箱存储模块,高斯 Redis 的 Stream 数据结构能够实现队列能力,实现 Feed 流音讯读取。
举荐零碎
电商、社交等畛域的举荐零碎十分发达,追溯其背地技术,不外乎这三个环节:分布式计算、特色存储、举荐算法。其中,特色数据的存储起到要害的连接作用,因为 KV 模式的数据抽象与特色数据极为靠近,因而举荐零碎里往往少不了 Redis 的身影。
因为开源 Redis 在大数据场景下的一些固有痛点,高斯 Redis 是不少客户首选的数据库选型。由高斯 Redis 负责外围的特色数据存储,提供稳固、牢靠的 KV 存储能力。加上它的高性能长久化技术和细粒度存储池,可帮忙企业将数据库应用老本升高 75% 以上。高斯 Redis 独特的多线程设计和全副节点可写,抗写能力强,可从容应对 Spark 灌库压力和实时更新。
而且因为高斯 Redis 齐全兼容 Redis 协定,即开即用,用户可应用相熟的 Spark SQL 语法轻松拜访,实现特色数据灌库、更新、提取等要害工作。与此同时,数据源通过 Flink 加工后,也可轻松存入高斯 Redis 中。
成为 VMALL 智能举荐背地的英雄
当电商平台对 AI 算法模型的需要越来越多,特色数据平台的对立建设是不少开发团队头疼的事件。只有通过对立的特色数据存储,能力扭转原有的“数据孤岛”,解决生产反复造轮子的困境。
华为商城(VMALL)就有这样的困扰,VMALL 应用了大量的 AI 和大数据技术,用来撑持智能举荐、精准营销、智能搜寻、选品投放等业务的高效发展。但因为特色数据筹备阶段不足通用平台,重大影响研发效率。
特色数据库须要承当买通线上 / 线下多个场景,对接批式 / 流式多种数据源,满足训练 / 推理多样生产需要,相应地对存储也提出了高要求:既能提供 低成本的海量数据存储并不便扩容, 又能保证数据的相对牢靠和服务的高可用;既要满足 低时延的线上推理,又要满足高吞吐的线下训练; 既能提供简洁的 KV 接口供上游轻松生产,又要兼容支流的批式 / 流式解决引擎(Spark/Flink 等)供上游疾速接入。
为了满足这些要求,深刻调研后,VMALL 大数据团队最终抉择了高斯 Redis 作为特色数据库。
在线上推理的特色生产(抽取、解决、存储)中,特色平台会定时调度 Spark 作业,从各种数据仓库、数据湖中提取数据,进行特色工程解决后,存入高斯 Redis。至于实时特色,则由 Flink 生产 Kafka,或流式存储中的数据,继续更新到高斯 Redis 中。
在特色生产的推理环节,对于应用实时特色的场景(如实时举荐零碎),由 Flink 从 Kafka 中实时获得用户申请记录,并从高斯 Redis 查问获得特色,将记录和特色拼接成训练样本,存储到文件中,供线下训练应用。
目前 VMALL 已实现一期的特色数据迁徙,包含“特色生产”业务中的“Spark 离线特色生产”,以及“特色生产”业务中的“线下训练 Flink 特色查问”。迁徙后的运行结果显示,高斯 Redis 在业务顶峰时段时延稳固,可能满足 VMALL 以后业务要求。其中,读均匀时延 0.2ms(p99<0.4ms),写入均匀时延 0.6ms(P99<2ms)。
费用方面,依照 VMALL 的特色体量测算,亿级用户,每个用户的特色数量是数 K - 数 10K,高斯 Redis 一年的费用仅 3W 出头,如果选用社区 Redis,费用在20W+。
综上,高斯 Redis 在 VMALL 特色工程平台建设中,起到了关键作用。它在老本,可靠性,可扩展性等方面具备劣势,可作为特色数据存储的现实计划,提供企业级的稳固牢靠的 Redis 服务能力。
最初
作为一款 KV 数据库,高斯 Redis 即保留了开源 Redis 的能力,同时凭借其存算拆散的架构,在老本、稳定性、可靠性、一致性等方面做出了新的冲破,它也更加实用于当下数据规模宏大的互联网业务,包含电商平台的秒杀、举荐零碎、社交平台的信息流等等。本文只是简略地解读了高斯 Redis 的几个典型个性,更多技术细节,以及利用案例、迁徙指南等能够查看【大厂内参】第 12 期:技术架构 + 利用场景揭秘,为什么高斯 Redis 比开源香?- 云社区 - 华为云 (huaweicloud.com)
本文由华为云公布