云服务器内容精选

  • Lazy free机制 解决的痛点/问题 Redis是单线程程序,当运行一个耗时较大的请求时,会导致所有请求排队等待,在请求处理完成前,Redis不能响应其他请求,因此容易引发性能问题。而Redis删除大的集合键时,就属于一种比较耗时的请求。 原理 Redis 4.0提供的一种惰性删除或者说延迟释放机制,主要用于解决删除大key对Redis进程的阻塞,从而避免带来性能与可用性问题。 删除key时,Redis异步延时释放key的内存,把key释放操作放在bio(Background I/O)单独的子线程处理中。 使用方法 主动删除 unlink unlink与del命令目的一样,删除某个key。unlink在删除集合类键时,如果集合键的元素个数大于64个,会把内存释放操作,给单独的bio(Background I/O)线程来执行。因此unlink删除操作能在非常短的时间内完成包含上百万个元素的大key删除。 flushall/flushdb 通过对flushall/flushdb添加ASYNC异步清理选项,Redis在清理整个实例或单个DB时,操作都是异步的。 过期key删除、大key驱逐删除 被动删除有四种场景,每种场景对应一个配置参数,默认都是关闭: lazyfree-lazy-eviction no //针对redis内存使用达到maxmemory,并设置有淘汰策略时,是否采用lazy free机制 lazyfree-lazy-expire no //针对设置有TTL的键,过期后,被redis清理删除时是否采用lazy free机制 lazyfree-lazy-server-del no //针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作 slave-lazy-flush no //针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景
  • 单机实例特点 系统资源消耗低,支持高QPS 单机实例不涉及数据同步、数据持久化所需消耗的系统开销,因此能够支撑更高的并发。Redis单机实例QPS达到10万以上。 进程监控,故障后自动恢复 D CS 部署了业务高可用探测,单机实例故障后,30秒内会重启一个新的进程,恢复业务。 即开即用,数据不做持久化 单机实例开启后不涉及数据加载,即开即用。如果服务QPS较高,可以考虑进行数据预热,避免给后端数据库产生较大的并发冲击。 低成本,适用于开发测试 单机实例各种规格的成本相对主备减少40%以上。适用于开发、测试环境搭建。 总体说来,单机实例支持读写高并发,但不做持久化,实例重启时不保存原有数据。单机实例主要服务于数据不需要由缓存实例做持久化的业务场景,如数据库前端缓存,用以提升数据读取效率,减轻后端并发压力。当缓存中查询不到数据,可穿透至磁盘数据库中获取,同时,重启服务/缓存实例时,可从磁盘数据库中获取数据进行预热,降低后端服务在启动初期的压力。
  • 实例架构设计 DCS的Redis单机实例架构,如图1所示。 Redis 3.0和Redis 6.0企业版实例不支持定义端口,端口固定为6379,Redis 4.0/5.0/6.0基础版实例支持自定义端口,如果不自定义端口,则使用默认端口6379。以下图中以默认端口6379为例,如果已自定义端口,请根据实际情况替换。 图1 Redis单机实例示意图 示意图说明: VPC 虚拟私有云。实例的内部所有服务器节点,都运行在相同VPC中。 客户应用 运行在ECS上的客户应用程序,即实例的客户端。 Redis实例兼容开源协议,可直接使用开源客户端进行连接,关于多语言客户端连接示例,请参考用户指南的连接缓存实例。 DCS缓存实例 DCS实例,单机实例只有1个节点,1个Redis进程。 DCS实时探测实例可用性,当Redis进程故障后,DCS为实例重新拉起一个新的Redis进程,且该操作秒级完成,恢复业务。
  • Cluster集群实例 Cluster版Redis集群兼容开源Redis的Cluster,基于smart client和无中心的设计方案,对服务器进行分片。 Cluster版Redis集群每种实例规格对应的分片数,如表1所示。 在创建DCS Cluster集群实例时,可以自定义分片大小。如果不自定义分片大小,使用系统默认分片,每个分片的大小=实例规格/分片数,例如,集群规格为48GB的实例,分片数为6,则每个集群分片的大小为48GB/6=8GB。 表1 Cluster集群实例规格和分片数的对应关系 集群版规格 分片数 4GB/8GB/16GB/24GB/32GB 3 48GB 6 64GB 8 96GB 12 128GB 16 192GB 24 256GB 32 384GB 48 512GB 64 768GB 96 1024GB 128 2048GB 128 无中心架构 Redis Cluster的任意节点都可以接收请求,但节点会将请求发送到正确的节点上执行,同时,每一个节点也是主从结构,默认包含一个主节点和一个从节点,由Redis Cluster根据选举算法决定节点主从属性。 图1 Redis Cluster无中心架构 数据预分片 Redis Cluster会预先分配16384个slot,每个Redis的server存储所有slot与redis server的映射关系。key存储在哪个slot中,由Crc16(key) mod 16384的值决定。如下图所示: 图2 Redis Cluster预分片示意图
  • Redis的Arm和x86实例有什么差异? 当前华为云DCS Redis实例的CPU架构支持Arm计算和x86计算。Arm Redis和x86的Redis两者功能是一样的。对客户端使用来说完全一样,没有额外的适配工作量。 可能在部分复杂的命令,大key且命令复杂度超过O(N)场景下,x86 Redis单CPU能力会强于Arm Redis。 综合来看,Arm Redis和x86 Redis能力和性能相当,都能满足业务需求,Arm Redis价格略低,请根据需要进行选择。 部分Region已停售“Arm计算”类型,推荐使用“x86计算”类型。 父主题: 实例类型/版本
  • 版本差异 DCS在创建实例时,Redis可选择“版本号”、“实例类型”。 DCS Redis 3.0已下线,暂停售卖,建议使用Redis 4.0/5.0/6.0。 版本号 版本号共有3.0,4.0,5.0,6.0版本可以选择,它们的区别如表1。更多Redis 4.0和Redis 5.0的特性,请参考Redis4.0新特性介绍“”和Redis5.0新特性介绍章节。 表1 不同版本支持的特性、性能差异说明 比较项 Redis 3.0 Redis 4.0 & Redis 5.0 Redis 6.0 兼容开源版本 Redis 3.0兼容开源3.0.7版本 Redis 4.0兼容开源4.0.14版本,Redis 5.0兼容开源5.0.14版本 说明: 2022年2月之前创建的Redis 5.0实例,兼容开源5.0.9版本。 开源版本查询可以参考如何查询Redis实例的原生版本。 如果需要兼容5.0.14版本的Redis,请重新创建实例。目前不支持Redis升级。 Redis 6.0基础版兼容开源6.2.7版本 Redis 6.0企业版兼容开源KeyDB 6.0.16版本 实例部署模式 采用虚机部署 在物理机上容器化部署 在物理机上容器化部署 CPU架构 支持x86 支持x86 支持X86 创建实例耗时 3~15分钟,集群约10~30分钟 约8秒 约8秒 QPS 单节点约10万QPS 单节点约10万QPS 基础版单节点约15万QPS 企业版单节点约40万QPS 公网访问 支持 暂不支持 暂不支持 域名 连接 支持VPC内使用域名连接 支持VPC内使用域名连接 支持VPC内使用域名连接 可视化数据管理 不支持 提供Web CLI访问Redis,管理数据 提供Web CLI访问Redis,管理数据 实例类型 支持单机、主备、Proxy集群 支持单机、主备、Proxy集群、Cluster集群 基础版支持单机、主备、Cluster集群 企业版暂只支持主备 实例规格 提供2G、4G、8G直至1024G多种规格 提供2G、4G、8G直至1024G多种规格,同时单机主备还支持128MB、256MB、512MB、1GB四种小规格实例 提供4G、8G、16G、32G、64G多种规格,同时单机主备还支持128MB、256MB、512MB、1GB四种小规格实例 扩容/缩容 支持在线扩容和缩容 支持在线扩容和缩容 支持在线扩容和缩容 备份恢复 主备和Proxy集群实例支持 主备、Proxy集群和Cluster集群实例支持 主备 由于Redis不同版本的底层架构不一样,在创建Redis实例时,确定Redis版本后,将不能修改,如Redis 3.0暂不支持升级到Redis 4.0或者Redis 5.0。如果需要由低版本升级到高版本,建议重新购买高版本实例,然后进行数据迁移。 实例类型 Redis实例类型分为单机、主备、Proxy集群、Cluster集群,它们的架构与应用场景,请参考实例类型章节。 父主题: 实例类型/版本