Master/Slave模式,是分布式系统中一个比较经常使用的计算结构。这个词最开始来源于MySql数据库,主要表示MySQL数据库自身提供的主从复制功能,经过master-slave,能够方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不只能够增强数据的安全性,经过实现读写分离还能进一步提高数据库的负载性能。sql
这个名词由两个单词组合而成:Master和Slave。mongodb
Master:主人、雇主。 Slave:奴,奴隶。数据库
组合成的词通常写做Master/Slave
或者 master-slave
,通常表示主从结构。这个词自己是一个没有任何感情色彩的中性词语。安全
master-slave
目前在软件行业内被普遍使用,如Mysql、Redis、Python、mongodb、ActiveMQ、PostgreSQL、Ruby、Jenkins 等都有相似的描述。架构
可是,随着人们开始愈来愈重视人权、歧视等问题,不少开发者认为这一描述具备侵犯性。因此,出现了不少声音呼吁修改这一描述。他们的主要诉求是不要使用master-slave
这一词汇,而是使用其余词汇代替。分布式
这件事儿之因此最近这么受重视,是由于比较关键的技术被要求修改,那就是Redis和Python。性能
2018年9月7日,Redis 5.0 RC5 发布了,该版本中仍然使用master-slave
来表示主从模式,这引发了不少开发者的抗议。ui
值得注意的是,以上提交记录的第一个提交者antirez就是Redis的做者。他的真名叫Salvatore Sanfilippo,antirez是他的网名。3d
对于大部分开发者抗议使用master-slave这一描述,antirez 表示这已经不是开发者第一次提这种要求了,他很抱歉 master-slave 这个描述让许多人感到失望,但他不认为这个特定于上下文环境的术语具备侵犯性。code
可是,虽然这么说,可是antirez仍是在推特上发起了一个投票,结果显示,超过半数的人但愿修改这一描述。
antirez 还表示,这个看似简单的修改实际上要付出昂贵的代价,并产生兼容性问题。例如:
能够看到,冒然进行变更会产生不少问题。并且,如今发布的 Redis 5 候选版本是向后兼容的首个稳定版本。
最后 antirez 决定,在不影响项目进度的状况下作了些妥协,表达了但愿能折中解决问题的建议。
短时间变化
长期变化
一样是2018年9月7日,在 Red Hat 工做的 Python 开发者 Victor Stinner 公开提交了 4 个 PR,但愿能将 Python 文档和代码中出现的 “master” 和 “slave” 修改成像 “parent” 和 “worker” 这样的术语,以及对其余相似的术语也进行修改。
Victor Stinner 在他的 bug report 中解释说,出于多元化的考虑,尽可能避免出现与奴隶制相关的术语反而可能会更好,像 ‘master’ 和 ‘slave’ 这种。他还指出以前就已有关于这个问题的投诉,但都是私下提出的 —— 以免引发激烈的争论。
对于这个问题,Python的创始人,已经宣布退出Python核心开发组决策层的Guido van Rossum被请回参与了这一事件的讨论及仲裁。最终他作出了重要的决定:
计划在Python 3.8中,将slave改成worker、helper、另外将master process改成parent process。
事实上,在技术圈子里,这种关于政治正确的事家常便饭。其实,这也不是关于master-slave的第一次讨论,Redis也并非第一个屈服的。
早在2014 年,Drupal 项目就用 primary 和 replica 替换了 master 和 slave;Django 项目则用 leader 和 follower 替换之;CouchDB 项目也作了相似语言上的净化。现在,Redis和Python也将在后续版本中国年逐渐淡化master-slave这一说法。
随着Redis和Python的妥协,相信将来会有更多的软件也会作一些相应的修改。那么问题来了,下一个会是谁呢?
继master-slave以后,会不会有另外的词汇被质疑呢?下一个词又会是什么呢?
最后,还要说的就是,起名,真的很重要!