政治不正確?master-slave要改名了!

作者:架構小黑 
公眾號:架構師之巔

Master/Slave模式,是分佈式系統中一個比較常用的計算結構。這個詞最開始來源於MySql數據庫,主要表示MySQL數據庫自身提供的主從複製功能,通過master-slave,可以方便的實現數據的多處自動備份,實現數據庫的拓展。多個數據備份不僅可以加強數據的安全性,通過實現讀寫分離還能進一步提升數據庫的負載性能。

這個名詞由兩個單詞組合而成:

Master和Slave。

Master:主人、僱主。

Slave:奴,奴隸。


爭議焦點

政治不正確?master-slave要改名了!


組合成的詞一般寫作Master/Slave 或者 master-slave,一般表示主從結構。這個詞本身是一個沒有任何感情色彩的中性詞語。

master-slave目前在軟件行業內被廣泛使用,如Mysql、Redis、Python、mongodb、ActiveMQ、PostgreSQL、Ruby、Jenkins 等都有類似的描述。

但是,隨著人們開始越來越重視人權、歧視等問題,很多開發者認為這一描述具有侵犯性。所以,出現了很多聲音呼籲修改這一描述。他們的主要訴求是不要使用master-slave這一詞彙,而是使用其他詞彙代替。

這件事兒之所以最近這麼受重視,是因為比較關鍵的技術被要求修改,那就是Redis和Python。

redis 被迫修改

政治不正確?master-slave要改名了!


2018年9月7日,Redis 5.0 RC5 發佈了,該版本中仍然使用master-slave來表示主從模式,這引起了很多開發者的抗議。

政治不正確?master-slave要改名了!


值得注意的是,以上提交記錄的第一個提交者antirez就是Redis的作者。他的真名叫Salvatore Sanfilippo,antirez是他的網名。

對於大部分開發者抗議使用master-slave這一描述,antirez 表示這已經不是開發者第一次提這種要求了,他很抱歉 master-slave 這個描述讓許多人感到失望,但他不認為這個特定於上下文環境的術語具有侵犯性。

但是,雖然這麼說,但是antirez還是在推特上發起了一個投票,結果顯示,超過半數的人希望修改這一描述。

政治不正確?master-slave要改名了!


antirez 還表示,這個看似簡單的修改實際上要付出昂貴的代價,併產生兼容性問題。例如:

  • 不能在應用現有的 PR
  • 現在有像 INFO 和 ROLE 這樣的命令 —— 使用包含 slave 術語的協議進行回覆
  • 術語 slave 中的源代碼包含 1500 個事件
  • 擁有私人項目並根據需要進行代碼合併的人會遇到很多問題

可以看到,冒然進行變動會產生很多問題。而且,現在發佈的 Redis 5 候選版本是向後兼容的首個穩定版本。

最後 antirez 決定,在不影響項目進度的情況下做了些妥協,表達了希望能折中解決問題的建議。

短期變化

  • 將 master-slave 架構的描述改為 master-replica
  • 為 SLAVEOF 提供別名 REPLICAOF,所以仍然可以使用 SLAVEOF,但多了一個選項
  • 保持繼續使用 slave 來對 INFO 和 ROLE 進行回應,現在目前看來,這仍然是一個重大的破壞性變更

長期變化

  • 編寫一個 INFO 的替代品
  • 在內部替換很多東西,因為技術原因,如果作了改動,許多 PR 也會無法應用,所以必須在某些地方進行大變動


Python可能也會修改

政治不正確?master-slave要改名了!


同樣是2018年9月7日,在 Red Hat 工作的 Python 開發者 Victor Stinner 公開提交了 4 個 PR,希望能將 Python 文檔和代碼中出現的 “master” 和 “slave” 修改為像 “parent” 和 “worker” 這樣的術語,以及對其他類似的術語也進行修改。

Victor Stinner 在他的 bug report 中解釋說,出於多元化的考慮,儘量避免出現與奴隸制相關的術語反而可能會更好,像 ‘master’ 和 ‘slave’ 這種。他還指出之前就已有關於這個問題的投訴,但都是私下提出的 —— 以避免引起激烈的爭論。

政治不正確?master-slave要改名了!


對於這個問題,Python的創始人,已經宣佈退出Python核心開發組決策層的Guido van Rossum被請回參與了這一事件的討論及仲裁。最終他做出了重要的決定:

計劃在Python 3.8中,將slave改為worker、helper、另外將master process改為parent process。

政治不正確?master-slave要改名了!


前程與未來

政治不正確?master-slave要改名了!


事實上,在技術圈子裡,這種關於政治正確的事屢見不鮮。其實,這也不是關於master-slave的第一次討論,Redis也並不是第一個屈服的。

早在2014 年,Drupal 項目就用 primary 和 replica 替換了 master 和 slave;Django 項目則用 leader 和 follower 替換之;CouchDB 項目也做了類似語言上的淨化。如今,Redis和Python也將在後續版本中國年逐漸淡化master-slave這一說法。

隨著Redis和Python的妥協,相信未來會有更多的軟件也會做一些相應的修改。那麼問題來了,下一個會是誰呢?

繼master-slave之後,會不會有另外的詞彙被質疑呢?下一個詞又會是什麼呢?

最後,還要說的就是,起名,真的很重要!


分享到:


相關文章: