V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedisMasterNode
V2EX  ›  Redis

Redis 6 RC1 今日发布(原创译文)

  •  
  •   RedisMasterNode · 2019-12-20 18:17:02 +08:00 · 13141 次点击
    这是一个创建于 1560 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 原博客链接: http://www.antirez.com/news/131

    • 译者注:刚毕业 1 年半的萌新,关注 Redis 和它的生态有一段时间,这是第一篇翻译作品所以很多地方不太完美,大家多多指点

    Redis 6 RC1 发布

    又一次,新的 Redis 版本进入发布候选状态,不出数月它就会在各大应用市场上架。我认为这是 Redis 至今最“企业级”的一个版本,不过有意思的是,我也花了不少时间去理解“企业级”意味着什么。我其实不怎么喜欢这个词,但是它确实有一些意义。Redis 如今很多地方都有用上,而且它还非常容易上手使用( scale down ):下载、花 30 秒编译、免配置直接运行。但是应用广泛也意味着加密和权限控制这些特性是必须要有的,所以 Redis 不可避免的需要作出妥协,不止我一个这样觉得,尽管我还是非常坚持将它设计得很简朴。

    不过有意思的是,就算是新加功能我也可以按自己特立独行的方式来做。Redis ACLs 的实现就不像你在其他系统所见的一样,支持 SSL 这个特性也是写了好几个迭代最终选取了让核心实现尽可能简洁的方案。我对现在这个结果非常满意。

    Redis 6 不仅新增了 ACLs 和 SSL 支持,据我所知这是 Redis 出生以来最大的一次更新,也是最多人参与到其中的一个版本,所以首先需要列出感谢名单。哪些开发者一起打造了 Redis 6 ?下面是他们的名字,按照 commit 数排序(按 commit 来度量很蠢,但是这是最便于我生成一份名单的方式),至少要有两次非 merge 的 commits。还要说明的是,我一直在到处改各种 bug,这导致我的 commits 数看起来虚高。

       685  antirez
        81  zhaozhao.zz
        76  Oran Agra
        51  artix
        28  Madelyn Olson
        27  Yossi Gottlieb
        15  David Carlier
        14  Guy Benoish
        14  Guy Korland
        13  Itamar Haber
         9  Angus Pearson
         8  WuYunlong
         8  yongman
         7  vattezhang
         7  Chris Lamb
         5  Dvir Volk
         5  [email protected]
         5  chendianqiang
         5  John Sully
         4  dejun.xdj
         4  Daniel Dai
         4  Johannes Truschnigg
         4  swilly22
         3  Bruce Merry
         3  filipecosta90
         3  youjiali1995
         2  James Rouzier
         2  Andrey Bugaevskiy
         2  Brad Solomon
         2  Hamid Alaei
         2  Michael Chaten
         2  Steve Webster
         2  Wander Hillen
         2  Weiliang Li
         2  Yuan Zhou
         2  charsyam
         2  hujie
         2  jem
         2  shenlongxing
         2  valentino
         2  zhudacai 00228490
         2  喜欢兰花山丘
    

    感谢上面所有的贡献者,这是一次极好的团队合作。

    接下来是 Change Log 中的新功能:

    • 众多新模块( modules ) API
    • 更好的过期循环( expire cycle )
    • SSL
    • ACLs 权限控制
    • RESP3 协议
    • 客户端缓存( Client side caching )
    • 多线程 IO ( Threaded I/O )
    • 无盘复制副本( Diskless replication on replicas )
    • Redis-benchmark 的集群支持和 Redis-cli 优化
    • 重写 Systemd 支持( Systemd support rewrite )
    • Redis 集群代理与 Redis 6 一同发布(但在不同的 repo )
    • Disque 模块与 Redis 6 一同发布

    如你所见新功能不少,我打算花点篇幅讲一下其中的几个。

    RESP3

    Redis 诞生有 10 年了,我觉得我们需要一个新的协议。我在一篇博客 里详细地聊了这观点(译注:博客里观点是 RESP3 在 Redis 6 中是刚需),但是很快又改变了主意,所以 RESP3 协议在 Redis 6 里面是让用户决定的(“opt in”)。Redis 连接用 RESP2 建立,如果用户用HELLO命令握手,就可以进入 RESP3 协议的模式。

    为什么需要新协议?因为旧协议不满足语义上的需求了。尽管有一些 RESP3 专属的新功能,但是最主要的原因是我们需要允许 Redis 返回复杂的数据类型,而且不用客户端“必须”得知道如扁平数组要转成什么类型、数字怎么正确和布尔值对应等才能处理。

    那么,RESP3 不是新版 Redis 唯一支持的协议(我一直在推动这个事但是看起来好像进度会比预想慢),但这也许不是个坏事,毕竟这样大家有时间去适应。

    第 1 条附言  ·  2019-12-20 19:02:36 +08:00

    ACLs

    最好的介绍就是ACL文档本身,虽然它还需要根据最新的提交打点补丁。所以在这里更有意义的是聊一下做这个功能的动力。Redis需要ACLs(译注:后文译注为权限控制)因为在更大的环境中人们需要权限控制模块去更好地控制不同客户端能做哪些操作。另一个点就是,加入权限控制也是为了在从应用bug中更好地保护数据。如果账户(worker)只能执行BRPOPLPUSH,那其他的开发者在不小心加了一行用于测试、清理测试数据的FLUSHALL而导致数据丢失、然后经历5小时恢复的噩梦的概率会更低(译注:GitLab离开了直播间)。

    Redis的权限控制是免费(Free)的,也没有使用、更新的成本(both operationally),因为你可以完全不用它,也不用知道有这个功能。从性能角度上说,开销可以忽略不计,我觉得用上权限控制还是划得来的。彩蛋,我们已经有权限控制的Redis Module接口了,所以现在你可以开始写自定义的认证方法了。

    SSL

    现在是2019,快2020年了,有新的条条框框(regulations),问题是Redis怎么样匹配上这些东西。能正确处理这些条条框框的,肯定要曾经做错过,知道有哪些限制条件,然后把Redis连接抽象出来。我完全没有参与到这个工作中,这也显示了最近的Redis开发流程是在如何变化的。

    客户端缓存

    我专门发过一篇博客,然而我觉得现在这是Redis 6里面最不成熟的功能。虽然,服务端能够支持让客户端缓存values,这是件很cool的事情,但是我想在Redis 6全面上市发行(GA)前再优化一下,特别是能让服务端不需要管理客户端缓存的状态,或者只管理很少的信息就能获取更多的状态信息。再者,现在用来让某个缓存槽(cache slot)过期的多个消息无法合并(compile)成一个。客户端缓存在一月份还有很多东西要做,不过这是个好事情因为会继续优化这个功能。

    Disque模块

    终于搞定这个功能了:https://github.com/antirez/disque-module ,我对结果很满意。

    Disque作为一个Redis Module使用足以展示Redis的模块系统的强大。集群消息总线API、屏蔽和回复客户端、计时器、模块数据的AOF和RDB等等。如果你不知道Disque,看一下repo的README就足够了。

    第 2 条附言  ·  2019-12-20 19:32:07 +08:00

    Cluster Proxy

    我同事Fabio开发Redis集群代理花了数月:https://github.com/artix75/redis-cluster-proxy

    我盼了这个功能很久,每次聊到Redis集群的支持,用户的使用和部署都是五花八门的(the client landscape is very fragmented),所以现在我们有一个(未完成的)可以做很多事情的代理。比如说最主要的,它可以将Redis集群抽象出来给客户端,让客户端感觉就像在用单机Redis一样。另一点就是多路复用的体现,至少用户只用简单的命令和功能的时候是这样的。当需要阻塞或者执行事务时,代理分配给客户端不同的连接集。同时代理是完全线程化的,所以它可以压榨CPU资源,以免CPU大部分时间都在等待IO。用户可以读README了解开发进度和尝试使用。

    Modules

    Redis 6中模块API完完全全上了一个台阶,这是Redis成熟得更快的一部分体现,因为Redis Labs为了开发复杂的功能,从一开始就用上了Redis模块。一段时间前我开始移植Disque到模块上,这也给了我后续在Redis模块上带来更多功能的动力。Redis可以变成一个框架,利用Modules来构建不同系统,而不需要从头开始写然后还要BSD许可。Redis一开始就是一个向编写各种系统开放的平台。

    Internals

    Redis的内部有大量的优化,比如命令复制的方式就改变了不少,过期的实现也用了不同的算法,更快和更易缓存(cache obvious)。

    Status and ETA

    我们今天发布了RC1,希望三月末或保守点到五月应该可以看到新版本发布。

    现在Redis 6可以用来测试,并且踩bug的概率会很小了。它包含了大量的代码修改,新功能的代码从来没有人在生产环境跑过。所以如果有bug请用issue提交给我们,详细描述你的发现。

    感谢所有为这次发布付出努力和让Redis 6在未来几个月变得更稳定的人们。

    噢我差点忘记了,Redis 6的LOLWUT互动命令: LOLWUT

    译者注

    • 文中有好多不认识的专业词汇,靠猜测是不足以理解准确意思的,希望大家指出,学习,下一次就能够do it right了
    • emmm大概可以把对Redis 6的认识作为面试里面的亮点吧hh~就这样
    15 条回复    2019-12-21 14:44:30 +08:00
    qile1
        1
    qile1  
       2019-12-20 19:09:17 +08:00 via Android
    支持 Windows 系统了吗;
    RedisMasterNode
        2
    RedisMasterNode  
    OP
       2019-12-20 19:35:35 +08:00
    @qile1 原文里面貌似没有提及,按照作者的一贯风格这方面应该不是开发迭代的重点>_>
    zhuangjia
        3
    zhuangjia  
       2019-12-20 19:45:43 +08:00
    我这版本万年不更新。。。
    RedisMasterNode
        4
    RedisMasterNode  
    OP
       2019-12-20 19:48:43 +08:00
    @zhuangjia 大部分人都是的呀,不过自己玩一下可以,了解一下新版本里面客户端缓存、多线程 IO、ACLs 之类的也是挺实用的
    scriptB0y
        5
    scriptB0y  
       2019-12-20 20:13:23 +08:00
    赞 辛苦楼主了
    MonoBiao
        6
    MonoBiao  
       2019-12-20 21:14:40 +08:00
    来康康船新版本
    mywaiting
        7
    mywaiting  
       2019-12-20 22:12:03 +08:00
    redis 也引入 module 的实现了,看来扩展性一直是无法避免的痛

    我一直有个观点,这些热门的软件 /app,迟早都会向着平台型的方向发展......
    br00k
        8
    br00k  
       2019-12-21 01:38:32 +08:00 via iPhone
    我反而比较期待客户端缓存这个功能
    sdd11
        9
    sdd11  
       2019-12-21 03:56:35 +08:00
    翻译的很不错
    jaryur
        10
    jaryur  
       2019-12-21 06:48:52 +08:00 via Android
    @mywaiting redis4 就已经有了
    RedisMasterNode
        11
    RedisMasterNode  
    OP
       2019-12-21 08:51:29 +08:00 via Android
    @sdd11 感谢~很少有很大提升空间
    RedisMasterNode
        12
    RedisMasterNode  
    OP
       2019-12-21 09:07:05 +08:00 via Android
    @RedisMasterNode XD 敲错字了,还有很大提升空间
    Maboroshii
        13
    Maboroshii  
       2019-12-21 09:43:48 +08:00 via Android
    阿里云出啥公司用啥😏
    paoqi2048
        14
    paoqi2048  
       2019-12-21 14:41:51 +08:00
    多线程支持终于来了😎
    RedisMasterNode
        15
    RedisMasterNode  
    OP
       2019-12-21 14:44:30 +08:00
    @paoqi2048 要注意这个多线程的模型不一定和大家说的一致,美图团队的博文有张图:
    ![MT]( https://pic4.zhimg.com/80/v2-c0b2a29952259ef841343b685fd207a3_hd.jpg)

    后面要是有能力的话还想做一下这一块和 ACLs 的源码学习和解读 看春节有没有时间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1241 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:59 · PVG 01:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.