Redis作者攤上事兒了:多人要求修改Redis主從複製術語master/slave

2021-02-15 InfoQ
近日,Redis 作者在 GitHub 上發起了一個「用其他詞彙代替 Redis 的主從複製術語」的 issue。有人認為 Redis 中的術語 master/slave (主人 / 奴隸)冒犯到了別人,要求 Redis 作者 ANTIREZ 修改這個術語,甚至連 ruby on rails 的作者 DHH 都在表態。本文對此 issue 做了簡單翻譯,以饗讀者。

包容性領域的積極分子多次要求 Redis 使用不同於主從的術語,特別是與奴隸制無關的術語。就我個人而言,我認為這種努力不值得,但這是我個人的觀點。另一方面,不同的 Twitter 話題,尤其是與 DHH 的交流,以及許多人開始建議不再使用 Redis 的帳戶,讓我思考了一些事情。具體來說,我認為對於願意使用 Redis 的工程師來說,這可能是一個問題。因為他們認為將其應用於某些工作場所,Redis 中使用的術語可能產生問題。我不想由於我的想法,給 Redis 社區製造麻煩。

與此同時,一旦我開始表現得對這些術語重新命名的可能性更加開放,我開始收到更多人的抱怨,這些人多年來一直為該項目做出貢獻,我們不得不做的事情讓我們感到惱火。我們不會以任何方式更改系統,這樣做的代價太大,而且會產生兼容性問題。

我的想法是在所有這些事情之間找到一個中間地帶,因為術語的變化會帶來很多問題:

所以這種改變可能會產生很多問題。此外,Twitter 上的許多人不理解 Redis 的向後兼容性文化。Redis 5 現在發布的候選版本與 Redis 發布的第一個穩定版本是向後兼容的。這種文化確保升級操作簡單,在客戶端沒有無用的工作要做等等。這是一件值得考慮的大事。

然而,我想發出一個信號,因為在推特上,很多人發起要求改變這個術語。當我處理 Redis 社區時,我不想成為它的國王,我需要為這裡的人們服務。然而,一個信號不需要在整個社區中造成許多問題,所以這是我建議做的。

首先,我們做以下工作:

更改文檔以引用主副本。如果我們選擇 master,這在 2018 年不會冒犯任何人 (明年我們再看…),至少改變的事情會少一些。副本非常常用,並且已經在 Redis 集群中使用;

改 SLAVEOF 為 REPLICAOF。你仍然可以使用 SLAVEOF,但現在有了選擇;

請參閱文檔內的副本;

將配置指令也從 slaveof 更改為 replicaof;

作為第一步,讓所有內部組件在源級別仍然是從屬的。現在改變所有這些將是一個大問題,因為我們處於發布候選狀態,並且有太多的待處理 PRs。

繼續以 slave 回復 INFO 和 ROLE,因為這暫時是一個重大的破壞。

在未來的某個時刻,寫一個 INFO 的替代品,因為無論如何 INFO 不是 Redis 數據收集的未來. 它太有限,一次提供太多信息,客戶需要解析它。我們將設計一個新命令,在新命令中我們不會引用從屬,而是複製到副本。

當我們打算破壞很多東西時,比如包含 RESPv3,也可以將 ROLE 命令更改為輸出副本而不是 slave。如果客戶端檢測到它是 RESPv3 伺服器,那麼他們現在認為 ROLE 將以不同方式回復,也就是說,它將以「replica」進行應答,而不是「slave」。

首先,由於一些技術原因,我們需要在內部替換很多東西,這樣很多 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 上一位分不清是高級黑還是太較真的用戶發了一條這樣的推文,總結了下國外程式設計師們敏感的技術詞彙:

對於這樣的事件,中國程式設計師紛紛表示不能理解:

不就是一個針對計算機的術語麼?怎麼就冒犯人了?

吃飽了撐的,工作太閒不飽和啊,拉來中國加加班就好了。

沒想到白左都進軍技術圈了。

事實證明,還是國外的槓精比較厲害。

西方世界已經被政治正確佔領了。

Master/Slave 的中文翻譯,一開始便避免了英文的奴隸一詞,而巧妙地改成了主從複製。從這個角度看,其實國內對於 slave 一詞的負面詞性也是做了一些處理和規避的。

但是僅僅因為一個詞性的問題,就大費周章去做一些牽一髮而動全身的修改是否有必要?目前來看需要更加仔細斟酌,如果因為少部分批評者的言論就去修改細節乃至源碼,是否會影響到更多未發聲的實際使用人群?

至於威脅如果不改就再也不用的人群,跟國內某些成天抵制這個抵制那個的群體又有何區別?項目開發者的確需要考慮用戶的需求與感受,但不應該受用戶的各色言論所左右。追求盡善盡美,最終可能既不善也不美。

智慧的 InfoQer 們,你們又是怎麼看的?

今日薦文

點擊下方圖片即可閱讀

人工智慧和機器學習正在改變並塑造軟體的未來。作為公司的高級 / 資深工程師、架構師、技術經理 / 總監,我該如何將 AI& 機器學習應用到公司業務中,有哪些落地案例和踩坑經驗可供參考?相關工具、平臺、框架是怎樣的,如何做選型?如何構建一個專門的人工智慧團隊,有哪些難點和需要注意的事情?

第二屆 AICon 全球人工智慧與機器學習技術大會,我們將為你一一解答。大會涵蓋語音識別、NLP、搜索推薦與算法、計算機視覺、AI 工具與框架等 20+ 技術熱點,來自 Google、Facebook、Twitter、BAT 等 40+ 一線技術大牛將現場與你深入交流,目前大會 6 折最低價購票火熱進行中,點擊「閱讀原文」了解更多詳情!

相關焦點

  • 如何實現redis主從複製?
    一、多臺伺服器上配置主從複製Redis從5.0以後主從配置屬性發生了變化,在5.0之前配置的是slaveof,5.0以後變成了replicaof伺服器用途redis埠號備註centos7 192.168.1.6主機Master(寫)6379redis5.0centos7 192.168.1.4從機Slave(讀)6379redis5.0centos7 192.168.1.5
  • 面試系列 - Redis 持久化和主從複製總結(二)
    系統調用 fork():創建進程,實現 Copy-on-Write;(Copy-on-Write:如果有多個調用者同時要求相同資源,如內存或磁碟上的數據存儲,他們會共同獲取相同的指針指向相同的資源,直到某個調用者試圖修改資源的內容時
  • redis學習筆記(四)主從數據同步
    一、redis主從模式的讀寫分離    redis通過多實例來保存數據,為了保證redis實例數據的一致性,因此在主從模式下,主從之間採用的是讀寫分離的方式。    讀操作:主、從實例都可以接收命令操作讀請求。
  • Redis Sentinel-深入淺出原理和實戰
    ❞之前的文章聊到了Redis的主從複製,聊到了其相關的原理和缺點,具體的建議可以看看我之前寫的文章Redis的主從複製。總的來說,為了滿足Redis在真正複雜的生產環境的高可用,僅僅是用主從複製是明顯不夠的。
  • Redis5.0:簡單的集群模式——主從模式詳解
    主從模式主從模式是最簡單的集群模式,其實就是複製基本只能解決讀寫分離問題, 主機伺服器一旦宕機基本完蛋,不具備高可用。slaveof 192.168.3.143 6379一主多從主伺服器:192.168.3.143從伺服器:192.168.3.144從伺服器:192.168.3.145從伺服器 redis.conf 配置文件加入slaveof 192.168.3.143 6379一主多從(鏈式結構),所謂鏈式結構就是可以從伺服器同步從伺服器
  • Redis 單例、主從模式、sentinel 以及集群的配置方式及優缺點對比
    redis主從模式解決了數據備份和單例可能存在的性能問題,但是其也引入了新的問題。由於主從模式配置了三個redis實例,並且每個實例都使用不同的ip(如果在不同的機器上)和埠號。根據前面所述,主從模式下可以將讀寫操作分配給不同的實例進行從而達到提高系統吞吐量的目的,但也正是因為這種方式造成了使用上的不便,因為每個客戶端連接redis實例的時候都是指定了ip和埠號的,如果所連接的redis實例因為故障下線了,而主從模式也沒有提供一定的手段通知客戶端另外可連接的客戶端地址,因而需要手動更改客戶端配置重新連接。
  • Python | Python學習之Redis交互詳解
    前言最近在學習scrapy redis,順便複習了redis。本篇為redis篇,包含實例演示,主從服務配置,python交互等內容。nosql與redis介紹nosql資料庫:不支持SQL語法存儲結構跟傳統關係型資料庫中的那種關係表完全不同,nosql中存儲的數據都是KV形式NoSQL的世界中沒有一種通用的語言,每種nosql資料庫都有自己的api和語法,以及擅長的業務場景NoSQL中的產品種類相當多:Mongodb,Redis,Hbase hadoop,Cassandra
  • 面試官:Redis有哪幾種集群方案?原理和優缺點是什麼?
    客戶端可對主資料庫進行讀寫操作,對從資料庫進行讀操作,主資料庫寫入的數據會實時自動同步給從資料庫。將已經停止的舊的master更新為新的master的從資料庫,使其恢復服務後以slave的身份繼續運行。哨兵模式基於前文的主從複製模式。
  • 三歪推薦:Redis常見的面試題
    redis使用多線程並非是完全摒棄單線程,redis還是使用單線程模型來處理客戶端的請求,只是使用多線程來處理數據的讀寫和協議解析,執行命令還是使用單線程。這樣做的目的是因為redis的性能瓶頸在於網絡IO而非CPU,使用多線程能提升IO讀寫的效率,從而整體提高redis的性能。
  • Redis服務​之Redis Cluster
    概述 在之前的分享中我們聊到了redis的高可用組件sentinel的相關配置,回顧請參考Redis服務之高可用組件sentinel;sentinel在redis主從同步架構中主要起到了監控集群master是否正常,如果master不正常,或者宕機,那麼sentinel會提升一個slave當選新的master,從而保證了redis服務的正常使用
  • 5分鐘完全掌握 Redis
    redis使用多線程並非是完全摒棄單線程,redis還是使用單線程模型來處理客戶端的請求,只是使用多線程來處理數據的讀寫和協議解析,執行命令還是使用單線程。這樣做的目的是因為redis的性能瓶頸在於網絡IO而非CPU,使用多線程能提升IO讀寫的效率,從而整體提高redis的性能。
  • Python 也攤上事兒了,術語 master-slave 亦恐被無奈修改
    作者:OSC-局長來自:開源中國(oschina2013)如需轉載請在文章註明來源和作者前兩天,我們報導了一篇關於 Redis 的新聞,因為 Redis 中的 master-slave 術語被認為具有侵犯性,所以出現了很多呼籲修改的聲音。
  • 淺談Redis主從複製
    Redis作者在2.8的候選版(以下簡稱Redis2.8)中已經將這個部分複製的思路實現了。那麼Redis2.4.16的全量複製與Redis2.8的部分複製是如何實現的呢?如下圖所示,這5個狀態是Slave在主從複製過程涉及到的幾個狀態,其中REDIS_REPL_NONE是Redis啟動時候默認的狀態。
  • Redis的集群搭建,原來這麼簡單
    雖然整體來說薪資漲幅不大,但已經基本上達到大廠薪資的90%,還是可以的呀,重點人家是錢多活少還離家近,你說這氣人不氣人。他拿到這樣的offer證明肚子裡還是有點東西的哈。罷了罷了,啥也別想了,淦就完了。回歸正題,上篇主要說了下Redis的主從複製是如何做的,高可用集群有幾種方式部署(傳送門《原來你是這樣的高可用呀》)。
  • 主從哨兵集群終於給你說明白了
    主從同步原理當一個從資料庫啟動時,它會向主資料庫發送一個SYNC命令master收到後,在後臺保存快照,也就是我們說的RDB持久化,當然保存快照是需要消耗時間的,並且redis是單線程的(redis後面也支持了多線程,這裡我們先不講),在保存快照期間redis收到的命令會緩存起來,快照完成後會將緩存的命令以及快照一起打包發給slave節點,從而保證主從資料庫的一致性。
  • 一不小心肝出了4W字的Redis面試教程
    然後master會將保存的快照發送給slave,並且繼續緩存期間的寫命令。slave收到主資料庫發送過來的快照就會加載到自己的資料庫中。最後master講緩存的命令同步給slave,slave收到命令後執行一遍,這樣master與slave數據就保持一致了。
  • 去pdd面試,redis把我面哭了【附面試答案】
    應用場景:存儲用戶的基本信息,等等、(3)redis cluster:redis最開始使用主從模式做集群,若master宕機需要手動配置slave轉為master;後來為了高可用提出來哨兵模式,該模式下有一個哨兵監視master和slave,若master宕機可自動將slave轉為master,但它也有一個問題,就是不能動態擴充;所以在3.x提出cluster集群模式。
  • 46道Redis面試題,含參考答案!
    33.上述 Redis 分布式鎖的缺點其實上面那種方案最大的問題,就是如果你對某個 redis master 實例,寫入了 myLock 這種鎖key 的 value,此時會異步複製給對應的 master slave 實例。但是這個過程中一旦發生 redis master 宕機,主備切換,redis slave 變為了 redis master。
  • redis基礎筆記
    通過redis.conf修改配置(不同安裝方式可能存放目錄不同)root@78a543194a68:/# cd /etc/redis/root@78a543194a68:/etc/redis# lsredis.conf
  • 一步攻破難題,阿里雲Redis bitfield命令加速記
    阿里雲某客戶發現自己使用讀寫分離實例,master的cpu特別高,而讀寫分離中承擔讀流量的slave節點卻相對空閒。用戶CPU打滿後,訪問到主節點的的線上服務受到了較大影響。1.1 讀寫分離原理Redis讀寫分離實例的原理是:key統一寫入到master,然後通過主從複製同步到slave,用戶的請求通過proxy做判斷,如果是寫請求,轉發到master;如果是讀請求,分散轉發到slave,這種架構適合讀請求數量遠大於寫請求數量的業務,讀寫分離架構示意圖如下所示。圖1.