為什么隨機(jī)測(cè)試能有效的發(fā)現(xiàn)網(wǎng)絡(luò)隔離下的 Bugs

在使用 Jepsen 和我自己折騰的 chaos 的時(shí)候,我都有一個(gè)困惑谬俄,就是這些測(cè)試能測(cè)出來(lái)問(wèn)題嗎柏靶?

譬如對(duì)于 Jepsen 來(lái)說(shuō),它會(huì)啟動(dòng)一批節(jié)點(diǎn)溃论,運(yùn)行要測(cè)試的集群屎蜓,然后會(huì)執(zhí)行一些網(wǎng)絡(luò)隔離操作,將整個(gè)集群分成多個(gè)塊钥勋,并且在各個(gè)塊上面都會(huì)執(zhí)行操作炬转,然后恢復(fù)集群辆苔,然后進(jìn)行一些收尾的操作。最后我們會(huì)根據(jù)操作的歷史來(lái)驗(yàn)證系統(tǒng)是否滿足線性一致性扼劈。因?yàn)榕袛嗑€性一致性是一個(gè) NP hard 的問(wèn)題驻啤,所以我們實(shí)際的操作數(shù)量不可能特別多。對(duì)于 Jepsen 來(lái)說(shuō)荐吵,超過(guò) 1 千條歷史骑冗,驗(yàn)證的時(shí)候就很容易發(fā)生 OOM。Chaos 雖然是用 Go 寫(xiě)的先煎,快不少贼涩,但數(shù)量也不可能太多。

所以這就有了我上面的困惑薯蝎,到底這些測(cè)試能不能發(fā)現(xiàn)問(wèn)題遥倦?剛好,前一段時(shí)間看了一篇 Paper占锯,Why Is Random Testing Effective for Partition Tolerance Bugs?袒哥,里面作者也提到了同樣的問(wèn)題,跟我只會(huì)懷疑困惑不同消略,他們直接用數(shù)學(xué)證明了問(wèn)題堡称。

首先,我們需要明確疑俭,為什么這里重點(diǎn)關(guān)注的是網(wǎng)絡(luò)隔離粮呢。對(duì)于從事分布式研發(fā)的同學(xué)來(lái)說(shuō),CAP 理論一定會(huì)非常的熟悉钞艇,該理論通俗的解釋就是只要是分布式系統(tǒng)啄寡,一定會(huì)存在網(wǎng)絡(luò)隔離的情況,那么我們的系統(tǒng)就是要考慮到底是滿足完全的可用性哩照,還是保證一致性挺物,也就是在 P 一定存在的情況下,選擇 C 還是選擇 A 的問(wèn)題飘弧。對(duì)于很多數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō)识藤,譬如 etcd,TiDB次伶,一定是一個(gè) CP + HA 系統(tǒng)痴昧,也就是說(shuō),在 P 出現(xiàn)了冠王,我們要保證 C赶撰,如果出現(xiàn)了數(shù)據(jù)不一致的情況,那么就意味著我們的實(shí)現(xiàn)是有 bug 的。

說(shuō)完了網(wǎng)絡(luò)隔離豪娜,我們下一個(gè)要考慮的就是 coverage 的問(wèn)題餐胀,這里我們并不是說(shuō)的通常測(cè)試的 coverage(也就是有多少行被測(cè)試覆蓋了),但原理差不多瘤载,我們這里需要知道的是在網(wǎng)絡(luò)隔離的 coverage 情況否灾,論文的作者將其分成了三種:

  • k-splitting:假設(shè)我們有 n 個(gè)進(jìn)程,那么我們就會(huì)將其分成 k 個(gè)不同的區(qū)間鸣奔。我們可以遍歷所有 k 的情況得到 splitting coverage墨技。對(duì)于通常的網(wǎng)絡(luò)隔離來(lái)說(shuō),其實(shí)就是 2-splitting溃蔫。
  • (k, l)-separation:在分布式系統(tǒng)中健提,通常一個(gè)進(jìn)程都會(huì)有 Role 的區(qū)分琳猫,譬如 Raft 里面的 Leader 和 Follower伟叛。對(duì)于 separation coverage 來(lái)說(shuō),我們就是將 k roles 和 l roles 進(jìn)行隔離脐嫂。對(duì)于 Raft统刮,也就是 (1, 2) separation。如果我們不能知道各個(gè)進(jìn)行的 role账千,就需要遍歷所有的情況了侥蒙。
  • minority isolation:這個(gè)大家應(yīng)該都比較了解,譬如現(xiàn)在 Leader 被隔離在 minority 的區(qū)間里面匀奏,該 Leader 是否能下線鞭衩,而 majority 的那邊能否選出來(lái)一個(gè)新的 Leader 進(jìn)行服務(wù)。

Jepsen 支持了上面幾種 coverage娃善,通常它僅僅使用一些常用的 coverage 方式论衍,就測(cè)試出了很多的 bug,譬如 k-splitting2-splitting3-splitting聚磺。那么能找到 bug 的概率大概是多少呢坯台?具體詳細(xì)的證明我是沒(méi)看的(如果看懂的同學(xué)歡迎過(guò)來(lái)面基)瘫寝,但根據(jù) paper 作者的說(shuō)法蜒蕾,只要設(shè)計(jì)合理,即使這些很小的隨機(jī)測(cè)試焕阿,至少能有 80% 的概率能發(fā)現(xiàn) bug,這已經(jīng)非常高了暮屡。

當(dāng)然撤摸,隨機(jī)的測(cè)試只是能有效的找到 bug,并不能保證 100% 找到。所以我們還有其他的做法來(lái)更多的發(fā)現(xiàn)問(wèn)題愁溜,譬如 A randomized scheduler with probabilistic guarantees of finding bugs疾嗅。更進(jìn)一步,為了保證從設(shè)計(jì)上面就是正確的冕象,我們也可以直接使用 TLA+代承。

分布式系統(tǒng)的測(cè)試是一件非常困難的事情,做這塊這么久了渐扮,我很大一個(gè)感觸就是寫(xiě)出一個(gè)分布式系統(tǒng)真的不難论悴,難的是你怎么確定它是對(duì)的。從事分布式系統(tǒng)的測(cè)試墓律,對(duì)于個(gè)人技術(shù)能力的提升是非常大的膀估,我甚至覺(jué)得比純寫(xiě)分布式系統(tǒng)得到的提升都要大。這塊我們做了不少工作耻讽,但遠(yuǎn)遠(yuǎn)不夠察纯,如果對(duì)這塊感興趣,歡迎聯(lián)系我:tl@pingcap.com针肥。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饼记,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慰枕,更是在濱河造成了極大的恐慌具则,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件具帮,死亡現(xiàn)場(chǎng)離奇詭異博肋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜂厅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)匪凡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人葛峻,你說(shuō)我怎么就攤上這事锹雏。” “怎么了术奖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵礁遵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我采记,道長(zhǎng)佣耐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任唧龄,我火速辦了婚禮兼砖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己讽挟,他們只是感情好懒叛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著耽梅,像睡著了一般薛窥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眼姐,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天诅迷,我揣著相機(jī)與錄音,去河邊找鬼众旗。 笑死罢杉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贡歧。 我是一名探鬼主播滩租,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼艘款!你這毒婦竟也來(lái)了持际?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哗咆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后益眉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晌柬,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年郭脂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了年碘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡展鸡,死狀恐怖屿衅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莹弊,我是刑警寧澤涤久,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站忍弛,受9級(jí)特大地震影響响迂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜细疚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一蔗彤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦然遏、人聲如沸贫途。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潮饱。三九已至,卻和暖如春诫给,著一層夾襖步出監(jiān)牢的瞬間香拉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工中狂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凫碌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓胃榕,卻偏偏與公主長(zhǎng)得像盛险,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勋又,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容