Redis作者摊上事了:多人要求修改Redis主从复制术语master/slave

Redis作者摊上事了:多人要求修改Redis主从复制术语master/slave

作者 | ANTIREZ、小智

近日,Redis 作者在 GitHub 上发起了一个“用其他词汇代替 Redis 的主从复制术语”的 issue。有人认为 Redis 中的术语 master/slave (主人 / 奴隶)冒犯到了别人,要求 Redis 作者 ANTIREZ 修改这个术语,甚至连 ruby on rails 的作者 DHH 都在表态。本文对此 issue 做了简单翻译,以飨读者。

背景介绍

包容性领域的积极分子多次要求 Redis 使用不同于主从的术语,特别是与奴隶制无关的术语。就我个人而言,我认为这种努力不值得,但这是我个人的观点。另一方面,不同的 Twitter 话题,尤其是与 DHH 的交流,以及许多人开始建议不再使用 Redis 的账户,让我思考了一些事情。具体来说,我认为对于愿意使用 Redis 的工程师来说,这可能是一个问题。因为他们认为将其应用于某些工作场所,Redis 中使用的术语可能产生问题。我不想由于我的想法,给 Redis 社区制造麻烦。

与此同时,一旦我开始表现得对这些术语重新命名的可能性更加开放,我开始收到更多人的抱怨,这些人多年来一直为该项目做出贡献,我们不得不做的事情让我们感到恼火。我们不会以任何方式更改系统,这样做的代价太大,而且会产生兼容性问题。

我的想法是在所有这些事情之间找到一个中间地带,因为术语的变化会带来很多问题:

  • PRs 将不再适用;
  • 我们有一些命令,例如 INFO 和 ROLE,它们用包含从属项的协议进行应答;
  • 源码中出现了 1500 次 slave 术语;
  • 拥有 private trees 并根据需要合并的人会遇到很多问题。

所以这种改变可能会产生很多问题。此外,Twitter 上的许多人不理解 Redis 的向后兼容性文化。Redis 5 现在发布的候选版本与 Redis 发布的第一个稳定版本是向后兼容的。这种文化确保升级操作简单,在客户端没有无用的工作要做等等。这是一件值得考虑的大事。

可能的解决方案

然而,我想发出一个信号,因为在推特上,很多人发起要求改变这个术语。当我处理 Redis 社区时,我不想成为它的国王,我需要为这里的人们服务。然而,一个信号不需要在整个社区中造成许多问题,所以这是我建议做的。

短期变化

首先,我们做以下工作:

  1. 更改文档以引用主副本。如果我们选择 master,这在 2018 年不会冒犯任何人 (明年我们再看…),至少改变的事情会少一些。副本非常常用,并且已经在 Redis 集群中使用;
  2. 改 SLAVEOF 为 REPLICAOF。你仍然可以使用 SLAVEOF,但现在有了选择;
  3. 请参阅文档内的副本;
  4. 将配置指令也从 slaveof 更改为 replicaof;
  5. 作为第一步,让所有内部组件在源级别仍然是从属的。现在改变所有这些将是一个大问题,因为我们处于发布候选状态,并且有太多的待处理 PRs。
  6. 继续以 slave 回复 INFO 和 ROLE,因为这暂时是一个重大的破坏。

长期变化

  1. 在未来的某个时刻,写一个 INFO 的替代品,因为无论如何 INFO 不是 Redis 数据收集的未来...... 它太有限,一次提供太多信息,客户需要解析它。我们将设计一个新命令,在新命令中我们不会引用从属,而是复制到副本。
  2. 当我们打算破坏很多东西时,比如包含 RESPv3,也可以将 ROLE 命令更改为输出副本而不是 slave。如果客户端检测到它是 RESPv3 服务器,那么他们现在认为 ROLE 将以不同方式回复,也就是说,它将以“replica”进行应答,而不是“slave”。
  3. 首先,由于一些技术原因,我们需要在内部替换很多东西,这样很多 PRs 就不适用了,还要切换变量和函数名。然而,作为一种脱离背景的变化,这是不可接受的,因为它会导致很多问题。我们必须在某个地方进行更大的改变。

我们不会提供第二步的 ETA,我希望社区能理解我们的技术问题。然而,我希望人们能意识到至少有人在听。某些要求改变的人声音洪亮,充满敌意,但我在 Twitter 上看到很多人只是平静地要求看到一些改善。有一件事是肯定的:主从术语在未来不会被使用,所以让我们一起做这个改变,并继续我们的实际工作,即:使 Redis 更好和可用。

我知道这可能看起来很恶心,但我希望这里的大多数评论都是由最近几年在 redis land 做了一些事情的人提供的。人们发送 PRs、打开问题、编写客户端库、大规模使用 Redis 并定期提供提示等等,如果如果您是 Github 的临时用户,在这里跳出来说“改变它!”这只会制造噪音。谢谢。

issue 链接:

https://github.com/antirez/redis/issues/5335

这只是个例吗?

Redis 目前在 GitHub 上有 3.1 万个赞,1.2 万个 fork,然而在这条 issue 的下面,600 余个 emoji 表态里,有超过 480 个向下的大拇指,100 余个困惑的表情,却只有不到 60 个赞。

类似的事件是个例吗?当然不是。

早在 2014 年,django 也曾发生过类似事件,当时其 issue 的主题是:将 master/slave 出现的地方都改成 leader/follower。底下用户参与的评论不出意外也是一副懵逼脸,Are you serious?

issue 地址:

https://github.com/django/django/pull/2692

笔者又再扒了一下,发现 React 项目下也有人在跟进发起类似的 issue:黑名单(blacklist)太具攻击性!当然,目前还没什么人搭理他。

issue 地址:

https://github.com/facebook/react/issues/13604

除了主从复制的术语,外国程序员们还咬文嚼字过哪些词呢?

Twitter 上一位分不清是高级黑还是太较真的用户发了一条这样的推文,总结了下国外程序员们敏感的技术词汇:

Redis作者摊上事了:多人要求修改Redis主从复制术语master/slave


对于这样的事件,中国程序员纷纷表示不能理解:

不就是一个针对计算机的术语么?怎么就冒犯人了?
吃饱了撑的,工作太闲不饱和啊,拉来中国加加班就好了。
没想到白左都进军技术圈了。
事实证明,还是国外的杠精比较厉害。
西方世界已经被政治正确占领了。

InfoQ 观点

Master/Slave 的中文翻译,一开始便避免了英文的奴隶一词,而巧妙地改成了主从复制。从这个角度看,其实国内对于 slave 一词的负面词性也是做了一些处理和规避的。

但是仅仅因为一个词性的问题,就大费周章去做一些牵一发而动全身的修改是否有必要?目前来看需要更加仔细斟酌,如果因为少部分批评者的言论就去修改细节乃至源码,是否会影响到更多未发声的实际使用人群?

至于威胁如果不改就再也不用的人群,跟国内某些成天抵制这个抵制那个的群体又有何区别?项目开发者的确需要考虑用户的需求与感受,但不应该受用户的各色言论所左右。追求尽善尽美,最终可能既不善也不美。


智慧的 InfoQer 们,你们又是怎么看的?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C字符串数组赋值

C字符数组赋值 举例如下: char a[10]; 1、定义的时候直接用字符串赋值 char a[10]"hello"; 注意:不能先定义再给它赋值,如 char a[10]; a[10]"hello"; 这样是错误的! 2、对数组中字符逐个赋值 char a[10]{h…

WP8.1使用HttpClient类

Uri uri new Uri("http://www.cnsos.net/weburl/index.htm", UriKind.Absolute); HttpClient myClient new HttpClient(); string result await myClient.GetStringAsync(uri); await new MessageDialog(result).ShowAsync(); 转载于:https://www.cnblogs.com/wzw…

HttpClinet学习笔记

本文为学习httpClient学习过程中转载的文章,若涉及版权请留言。 ----------------------------- 前言 超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了。Web服务,有网络功能的设备和网络计算的发展,都持续…

CMOS图像传感器——2021产品选谈

据Yole统计,2020年全球CMOS图像传感器(CIS)市场规模为207亿美元,出货量为70.08亿颗。跟其它半导体器件一样,CIS也因为疫情和生产周期长,以及各种市场因素,而导致采购和供应链紧张。Yole预计2021年将趋于平稳,销售额相比2020年略有增长(3.2%),将达到214亿美元,出货量…

LINUX 下tcp 和 udp 套接字收发缓冲区的大小决定规则 .

const int udp_recvbufsize 384 * 1024 ; int result ::setsockopt(m_hSocket, SOL_SOCKET, SO_RCVBUF, (char*)&udp_recvbufsize, sizeof(int)); // 如果是由于你发送的速率较高而引起的,如500kbit/s, 那么设置大点的UDP缓冲区是比较有效的. LINUX 下tcp 和 udp 套接…

C++匿名对象

匿名对象: string("hello")就是匿名对象; 匿名对象当做参数引用时必须加const; 转载于:https://www.cnblogs.com/achao123456/p/9634810.html

MVC源码分析 - Action查找和过滤器的执行时机

接着上一篇, 在创建好Controller之后, 有一个 this.ExecuteCore()方法, 这部分是执行的. 那么里面具体做了些什么呢? //ControllerBaseprotected virtual void Execute(RequestContext requestContext) {if (requestContext null){throw new ArgumentNullException("req…

CCIE-MPLS基础篇-实验手册

又一部前期JUSTECH(南京捷式泰)工程师职业发展系列丛书完整拷贝。 MPLS(Multi-Protocol Label Switching) 目录 1:MPLS 基础实验.... 3 1.1实验拓扑... 3 1.2实验需求:... 3 1.3实验步骤... 3 1.4校验…

数学形态学滤波学习

一、概述 数学形态学是建立在集合论基础上了一门学科。具体在图像处理领域,它把形态学和数学中的集合论结合起来,描述二值或灰度图像中的形态特征,来达到图形处理的目的。形态学主要是通过结构元素和图像的相互作用对图像进行拓补变换从而获得图像结构信息,通过对结构信息的…

RCA/BNC接口

RCA接口(消费类市场) RCA 是Radio Corporation of American的缩写词,因为RCA接头由这家公司发明的。RCA俗称莲花插座,又叫AV端子,也称AV 接口,几乎所有的电视机、影碟机类产品都有这个接口。它并不是专门为…

Retrofit2源码解析——网络调用流程(下)

Retrofit2源码解析系列 Retrofit2源码解析(一)Retrofit2源码解析——网络调用流程(上)本文基于Retrofit2的2.4.0版本 implementation com.squareup.retrofit2:retrofit:2.4.0 复制代码上次我们分析到网络请求是通过OkHttpCall类来完成的,下面我们就来分析下OkHttpCa…

spring EL 实现ref的效果

之前学习basic的时候有个疑问就是不知道如何实现bean中引用其他的bean的属性,当时是用ref来实现对其他bean的引用,但是ref必需引用的是一个常量。所以这种方式来实现对其他bean中的属性的引用是不合理的。 当我看到Spring Expression Language时发现原来…

2021手机CIS技术趋势总结

手机摄像头CIS(CMOS图像传感器)自从突破1亿像素以后,再谈像素数量增大,似乎已经很难让市场产生激烈反应了。这两年电子工程专辑对于手机摄像头CIS,以及更多领域不同类型的图像/视觉传感器(如ToF、基于事件的…

关于Unity中NGUI的背包实现之Scrollview(基于Camera)

基于UIPanel的scrollview实现方式在移动设备上的性能不如基于camera的方式。因为UIPanel的scrollview实现方式要渲染很多的道具图,性能自然就降低了。如果是用第二个摄像机camera的方式,物体并没有动,只是拖动第二个摄像机摄像机,…

YUV422/420 format

(在本文中,U 一词相当于 Cb,V 一词相当于 Cr。) YUV422 format as shown below 4:2:2 表示 2:1 的水平取样,没有垂直下采样 YUV420 format as shown below4:2:0 表示 2:1 的水平取样,2:1 的垂直下采样. YUV4:2:0并不是说只有U&…

vue部署问题

history模式配置后刷新404的解决办法! 第一种 nginx配置 在usr/local/nginx/conf/vhost 下 域名.conf配置文件修改或添加 第一种方案server {##在server下添加或在location里面添加以下代码location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.html?s$1 last…

位域

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构&a…

数字后端——ECO

目录 一、概述 二、ECO分类 1、按时间节点 1)流片前的ECO 2)流片过程的ECO 3)流片后的ECO 2、按网表是否改变 1)功能ECO 2)时序ECO 三、ECO处理内容 1、设计规则违例 1)提升标准单元驱动力 2…

Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

Uncaught TypeError: Cannot read property length of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"total":0,"rows":null},改为{"total":0,"rows":"[]"}就可以了 if…

电视百科常识 九大视频接口全接触

1 射频 天线和模拟闭路连接电视机就是采用射频(RF)接口。作为最常见的视频连接方式,它可同时传输模拟视频以及音频信号。RF接口传输的是视频和音频混合编码后的信号,显示设备的电路将混合编码信号进行一系列分离、解码在输出成像。…