政治不正確?Redis/Python等的master-slave要改名了。
Master/Slave模式,是分散式系統中一個比較常用的計算結構。這個詞最開始來源於MySql資料庫,主要表示SQL/">MySQL資料庫自身提供的主從複製功能,通過master-slave,可以方便的實現資料的多處自動備份,實現資料庫的拓展。多個數據備份不僅可以加強資料的安全性,通過實現讀寫分離還能進一步提升資料庫的負載效能。
這個名詞由兩個單詞組合而成:Master和Slave。
Master:主人、僱主。 Slave:奴,奴隸。
爭議焦點
組合成的詞一般寫作 Master/Slave
或者 master-slave
,一般表示主從結構。這個詞本身是一個沒有任何感情色彩的中性詞語。
master-slave
目前在軟體行業內被廣泛使用,如Mysql、Redis、Python、mongodb、ActiveMQ、PostgreSQL、Ruby、Jenkins 等都有類似的描述。
但是,隨著人們開始越來越重視人權、歧視等問題, 很多開發者認為這一描述具有侵犯性,即認為使用master-slave是政治不正確的 。所以,出現了很多聲音呼籲修改這一描述。他們的主要訴求是不要使用 master-slave
這一詞彙,而是使用其他詞彙代替。
在西方價值觀中的政治正確,是指在政治立場上隱瞞真實想法與客觀事實,在言語、政策、行為上不能“冒犯”少數族裔和弱勢群體,對弱勢群體“極其照顧”(特權),無視強勢群體的正常需求,一味要求其忍讓、包容、退讓、付出等。
這件事兒之所以最近這麼受重視,是因為比較關鍵的技術被要求修改,那就是Redis和Python。
Redis被迫修改
2018年9月7日,Redis 5.0 RC5 釋出了,該版本中仍然使用 master-slave
來表示主從模式,這引起了很多開發者的抗議。

值得注意的是,以上提交記錄的第一個提交者antirez就是Redis的作者。他的真名叫Salvatore Sanfilippo,antirez是他的網名。
對於大部分開發者抗議使用master-slave這一描述,antirez 表示這已經不是開發者第一次提這種要求了,他很抱歉 master-slave 這個描述讓許多人感到失望,但他不認為這個特定於上下文環境的術語具有侵犯性。
但是,雖然這麼說,但是antirez還是在推特上發起了一個投票,結果顯示,超過半數的人希望修改這一描述。

antirez 還表示,這個看似簡單的修改實際上要付出昂貴的代價,併產生相容性問題。例如:
-
不能在應用現有的 PR
-
現在有像 INFO 和 ROLE 這樣的命令 —— 使用包含 slave 術語的協議進行回覆
-
術語 slave 中的原始碼包含 1500 個事件
-
擁有私人專案並根據需要進行程式碼合併的人會遇到很多問題
可以看到,冒然進行變動會產生很多問題。而且,現在釋出的 Redis 5 候選版本是向後相容的首個穩定版本。
最後 antirez 決定,在不影響專案進度的情況下做了些妥協,表達了希望能折中解決問題的建議。
短期變化
-
將 master-slave 架構的描述改為 master-replica
-
為 SLAVEOF 提供別名 REPLICAOF,所以仍然可以使用 SLAVEOF,但多了一個選項
-
保持繼續使用 slave 來對 INFO 和 ROLE 進行迴應,現在目前看來,這仍然是一個重大的破壞性變更
長期變化
-
編寫一個 INFO 的替代品
-
在內部替換很多東西,因為技術原因,如果作了改動,許多 PR 也會無法應用,所以必須在某些地方進行大變動
Python可能也會修改
同樣是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之後,會不會有另外的詞彙被質疑呢?下一個詞又會是什麼呢?
最後,還要說的就是,起名,真的很重要!