政治不正確?Redis/Python等的master-slave要更名了。

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。性能

Redis被迫修改

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

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

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

可是,雖然這麼說,可是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以後,會不會有另外的詞彙被質疑呢?下一個詞又會是什麼呢?

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

相關文章
相關標籤/搜索