阿里巴巴|从 Redis7.0 发布看 Redis 的过去与未来( 二 )


Sharded-pubsub便是用来解决这个问题 , 意如其名 , sharded-pubsub会把channel按分片来进行分发 , 一个分片节点只负责处理属于自己的channel而不会进行广播 , 以很简单的方法避免了资源的浪费 。
Client-eviction Redis支持内存规格配置 , maxmemory和maxmemory-policy大家已经都很熟悉了 , 但是在这里我还是想再解释一下:maxmemory控制的是Redis的整体运行内存而非数据内存 , 例如client buffer、lua cache、fucntion cache、db metadata等这些都会算在运行内存中 , 如果运行内存超过了maxmemory就会触发evict删除数据 , 这也是用户在使用Redis时的一大痛点 。
在这些非数据内存使用当中 , 又以client buffer消耗最大 , 在大流量场景下client需要缓存很多用户读写数据(想象一下keys的结果需要先缓存在client output buffer中再发送给用户) , 由于网络流量的内存消耗导致触发eviction删除数据的情况非常之多 。 虽然Redis很早就支持对client-output-buffer-limit配置项 , 但其限制的也只是单个连接维度的output buffer , 没有全局统计client使用内存和限制 。 为了解决这个问题 , 7.0新增了maxmemory-clients配置项 , 来对所有client使用的内存做限制 , 如果超过了这个限制就会挑选内存消耗最大的client释放 , 用来缓解内存使用的消耗 。
Client-eviction并不是终点 , 还有很多元数据的内存使用会对用户造成困扰 , Redis是基于内存的数据库 , 我们需要对各个模块的内存进行更精确的统计和控制 , 让用户能够对数据存储有更为清晰的理解和规划 。
Redis历史回顾 Redis发展至今已历经7个大版本 , 而每个大版本都有大量的新特性产生 。 例如从3.0开始支持cluster集群模式;4.0开发的lazyfree和PSYNC2解决了Redis长久的大key删除阻塞问题及同步中断无法续传的问题;5.0新增了stream数据结构使Redis具备功能完整的轻量级消息队列能力;6.0更是发布了诸多企业级特性如threaded-io、TLS和ACL等 , 大幅提升了Redis的性能和安全性 。
国内开发者与Redis社区建设 感谢国内开发者 , 中国区已经成为Redis社区最大的贡献来源之一
阿里云从Redis 4.0开始就深度参与到Redis开源社区当中 , 向社区贡献了大量能力 , 目前阿里云在Redis社区共有1名core team member(核心维护者)和2名contributor(核心贡献者) , 是原作者和Redis Labs以外对Redis社区贡献最大的组织 。
我们见证了Redis用户在国内的快速增长 , 阿里云与Redis社区的深度合作也逐渐吸引了更多的国内开发者参与到Redis建设中去 。 尤其是在Redis core team成立之后 , 社区maintainer也和Redis一样变成了多线程(1-5) , 对于issue和PR的快速处理大幅提升了社区的活跃度 。 这次7.0的release note中也可以看到已经有超过5名国内开发者贡献了核心feature , 并贡献了近半数commit 。
这些变化与我们在阿里云上的统计结果也是相符合的:Redis目前同样也已是国内用户使用规模最大的NoSQL数据库之一 , 并一直处于高速增长中 , 越来越多的泛互联网甚至传统行业也在逐步接纳Redis , 用于快速高效的构建业务应用服务 。
虽然Redis发展迅速 , 但国内用户却大都无法享受技术红利
Redis社区目前主流维护版本是6.0 , 5.0版本已经进入低维护阶段 , 而国内还有大量2.8 , 3.0 , 4.0版本在使用中 。 这就很矛盾 , 一方面 , 一些对用法 , 性能 , 稳定性和抖动控制的能力都贡献在了新版本上 , 另一方面 , 国内用户却“看的到 , 用不上” 。
除去6.0 , 7.0上的高级稳定性优化不说 , 比如在4.0前 , 没有lazyfree删除一个大key是同步的会卡住数据库引擎直接导致业务中断 。 又比如 , Redis其实安全性尤其是lua是一直有较大问题的 , 这些升级也都“隐含”在了新版本中 。 虽然阿里云仍然在坚持把这些漏洞的修复拉回到低版本上 , 但是在公网当中还是有大量的低版本实例存在安全风险 。
过多用户担心升级版本的兼容性 , 一方面阿里云也在要求社区来提供一些兼容性验证工具 , 另一方面阿里云对版本跟进是很快的 , 可以让用户在新版发布后尽快进行验证 。 从Redis整体和阿里云的大量客户升级情况来看 , 版本的向前兼容性是非常好的 , 大可放心升级 。
希望更多的国内用户深度参与社区建设
国外使用Redis的方式和国内使用明显有差异 , 比如国外更多的是使用在缓存场景 , 而国内大多数的用法却是内存数据库 。 社区的发展和roadmap的制定 , 目前国内用户的声音较小 。
目前国内开发者在社区活跃度很高 , 但更多的是围绕在bugfix , 和feature上 。 我们还是建议无论是国内开发者还是使用者可以深层参与进去 , 举个简单的例子 , 提需求、讲明白需求、证明需求的合理性都是参与社区建设 , 这样才能更好的把我们国内的需求传达 , 后续甚至可以深度参与开发 , 跟踪交付 , 这些社区工作的含金量无疑更高 。