相比云数据库Redis社区版,企业版性能增强型实例主要在两个方面进行了优化:多线程性能增强和多模块集成。本章节介绍性能增强型实例的多线程性能增强特性。

说明 对多模块集成的说明请参见数据结构模块集成

主要优势

  • 100%兼容原生Redis,无需修改业务代码。
  • 读写性能达到同规格原生Redis或者云Redis社区版实例的3倍,能够突破热点数据高频读写受到的性能限制。
  • 相比原生Redis,高QPS场景下响应时间更低,性能表现更佳。
  • 在大并发场景下运行稳定,可以极大地缓解突发大量请求导致的连接问题,从容应对业务高峰。
  • 全量同步和增量同步在IO线程中进行,提高同步速度。
  • 支持多种部署架构,包括标准版、集群版和读写分离版。

架构说明

原生Redis和云Redis社区版的数据处理流程为:读取请求,解析请求,处理数据,发送响应。其中网络IO和请求解析占用了大部分的资源。Redis性能增强型实例将Redis服务各阶段的任务进行分离,通过分工明确的多个线程并行处理各阶段任务,达到提高性能的目的。

  • IO线程:负责请求读取、响应发送、命令解析等;
  • Worker线程:负责命令处理、定时器事件等;
  • 辅助线程:负责高可用探测、保活等。

下方的架构图展示了单线程模型和多线程模型的区别。

图 1. Redis单线程模型
多线程性能增强_性能增强型实例_云数据库Redis企业版_产品简介_云数据库 Redis 版 阿里云技术文档 第1张
图 2. Redis多线程模型
多线程性能增强_性能增强型实例_云数据库Redis企业版_产品简介_云数据库 Redis 版 阿里云技术文档 第2张

IO线程读取用户的请求并进行解析,之后将解析结果以命令的形式放在队列中发送给Worker线程处理。Worker线程将命令处理完成后生成响应,通过另一条队列发送给IO线程。

Redis性能增强型实例最多支持4个IO线程并发运行。为了提高线程的并行度,IO线程和Worker线程之间采用无锁队列和管道进行数据交换。

性能对比

云Redis社区版实例采用与原生Redis相同的单线程模型,每个数据节点支持8万到10万的QPS;Redis性能增强型实例采用多线程模型,由IO线程、Worker线程和辅助线程共同完成数据处理,单节点性能为社区版实例的3倍左右。二者的详细对比如下。

  • 云Redis社区版实例
    • 云Redis社区版的标准版实例不适用于单节点QPS要求超过10万的场景。
    • 云Redis社区版的集群版实例包含多个数据节点,每个节点的性能与标准版实例相似。当某个节点储存了热度较高的数据并面临大并发量的请求时,该节点中其它数据的读写可能受到影响,形成性能瓶颈。
    • 云Redis社区版的读写分离版实例有较高的读性能,在读多写少的场景表现良好,但不适用于大并发写入的场景。
  • 云Redis企业版性能增强型实例
    • 云Redis企业版性能增强型标准版实例可应用于QPS高于10万的场景。
    • 云Redis企业版性能增强型集群版实例能更好地应对热读写,降低维护成本。
    • 云Redis企业版性能增强型读写分离版实例既有较高的读性能,又能承受大并发写入,适用于写请求多而读请求更多的场景。

适用场景

  • 视频直播
  • 电商秒杀
  • 在线教育

云Redis企业版性能增强型实例尤其适合并发量大、读写热点多,对性能的要求超过云Redis社区版实例的场景。下面列举了云Redis企业版性能增强型实例在4个典型场景中的应用。

  • 场景1:用户使用云Redis社区版的标准版-双副本实例在秒杀场景中构建缓存,部分热点key的QPS要求高达20万以上,社区版实例无法满足业务高峰期的需求。改用云Redis企业版性能增强型标准版-双副本实例后,热门商品秒杀过程流畅,未发生性能问题。
  • 场景2:用户在业务中使用云Redis社区版集群实例,但在使用事务和Lua脚本功能时有一定的限制。改用云Redis企业版性能增强型集群实例后,在满足性能需求的同时消除了集群版的命令使用限制。
  • 场景3:用户自建了一主多备的Redis服务,随着业务中访问量的不断提高,备节点数量也要随之增加,管理维护成本越来越高。在改用云Redis企业版后,用户使用了一个数据节点五个只读副本的的性能增强型读写分离实例,已经可以轻松应对百万级QPS的业务挑战。
  • 场景4:用户自建了Redis集群来承担线上千万级QPS的业务压力。随着业务的发展,Redis分片数不断增加,管理维护成本居高不下。在改用云Redis企业版后,用户选择了性能增强型集群实例,集群规模缩到原来的三分之一,管理维护成本大幅降低。

实例规格

性能增强型实例的规格信息请参见标准版-性能增强

购买方式

详细步骤请参见步骤1:创建实例