好吧暗甥,我這篇文章的題目已經(jīng)非常的直白了眷射,這是一篇招聘廣告词身,唯一的目的就是吸引對 PD 有興趣的同學(xué)參與到 PD 的開發(fā)中來。當(dāng)然如果你對我們不感冒贴捡,你也可以通過這篇文章大概知道 PD 后面主要干啥忽肛。
職責(zé)
無論是我們公司,還是其他的公司烂斋,對于 Job 的描述屹逛,無非幾塊,第一塊詳細(xì)的說工作職責(zé)汛骂,再來就說對你的要求是啥罕模,然后再來一個加分項,最后可能在談?wù)劰镜母@兜摹?/p>
這里我想來談?wù)劦谝粔K帘瞭,工作職責(zé)淑掌,這一塊大家都會寫的比較詳細(xì),但普遍的一個問題在于我們不可能告訴大家為啥要去做這些事情蝶念,做這些事情會有那些挑戰(zhàn)等抛腕。畢竟公司的招聘頁面篇幅有限,也不可能去長篇大論媒殉。如果要詳細(xì)了解担敌,只能在面試的好好討論了。所以廷蓉,我覺得有必要多提前多介紹點(diǎn)全封,讓更多的同學(xué)了解我們,加入我們的行列苦酱。
下面是我寫的 PD 的工作職責(zé)售貌。
- 負(fù)責(zé)集群全局調(diào)度系統(tǒng)的設(shè)計给猾,開發(fā)疫萤,文檔撰寫
- 負(fù)責(zé)集群模擬器的開發(fā)
- 負(fù)責(zé)集群可視化系統(tǒng)的開發(fā)
好吧,是不是一臉懵逼敢伸,至少我一下子就會蹦出來三個問題扯饶,什么是調(diào)度系統(tǒng),什么是模擬器池颈,什么是可視化尾序?所以下面就來依次說一下。
Keyword
在繼續(xù)之前躯砰,先簡單介紹下一些基本的概念和流程每币。在 TiKV 里面,我們會把所有數(shù)據(jù)當(dāng)成一個無限大的已經(jīng)排序的 map琢歇,然后使用 range 的方式對數(shù)據(jù)切分成不同的 region兰怠。譬如 region 1 覆蓋的 key range 范圍可能是 [a, b)
梦鉴,region 2 覆蓋的可能就是 [b, c)
,range 區(qū)間是左閉右開的揭保,不同 region range 不可能重疊肥橙。Region 是 PD 這邊處理的最小單位。
我們使用 Raft 來保證數(shù)據(jù)的一致性秸侣,對于一個 region 來說存筏,通常有 3 個副本,我們也可以配置其他的副本數(shù)味榛,譬如 5 或者 7 個椭坚。關(guān)于 Raft,大家可以詳細(xì)的去看我之前寫的 「小豬佩奇」系列励负,這里重點(diǎn)強(qiáng)調(diào)一下藕溅,對于一個 Raft group 來說,所有的 write 和 read 都是通過 leader 來進(jìn)行继榆,雖然也可以支持 follwer read巾表,但現(xiàn)在我們這邊沒有支持,先不做討論略吨。
調(diào)度
當(dāng)你的集群有幾百臺機(jī)器集币,有非常多的數(shù)據(jù)的餓時候,調(diào)度的作用就非常明顯了翠忠。如果調(diào)度設(shè)計的不好鞠苟,很容易導(dǎo)致整個集群性能的抖動,甚至把集群搞得完全沒法工作秽之。所以当娱,調(diào)度應(yīng)該是 PD 最重要的工作。
先來看看下面的一種情況考榨,我們有 3 個 TiKV 節(jié)點(diǎn)跨细,3 個 region,然后所有的 region 的 leader 都在 TiKV 1 上面河质。
明顯可知冀惭,TiKV 1 的壓力會非常大,因為所有的讀寫都是經(jīng)過這個節(jié)點(diǎn)掀鹅,所以 PD 會考慮進(jìn)行 leader balance散休,也就是將 leader 調(diào)度到不同的 TiKV 上面,譬如下面這樣乐尊。
再來一個情況稍微復(fù)雜一點(diǎn)的場景戚丸,在一些用戶那邊,有可能是兩地三中心這種架構(gòu)(雖然三地三中心是最好的)扔嵌,也就是兩個 IDC 放在一個城市 A限府,而另一個 IDC 放在遠(yuǎn)端的城市 B猴鲫,通常業(yè)務(wù)都是跑到城市 A 的,所以 PD 會保證所有的 leader 都在城市 A 這邊谣殊。
當(dāng)數(shù)據(jù)量不斷膨脹拂共,我們需要添加一個新的 TiKV 節(jié)點(diǎn),PD 就要考慮將一些數(shù)據(jù)調(diào)度到這臺新的機(jī)器上面了姻几。
這時候宜狐,我們不光就要考慮 leader 的平衡,也需要考慮數(shù)據(jù) size 的平衡了蛇捌。譬如像下面這樣抚恒。PD 在新的節(jié)點(diǎn)上面放上了兩個 region,保證了大體的 size 平衡络拌。這里我們假設(shè)的是 region size 都差不多俭驮,但實際情況會更加復(fù)雜。
上面就是簡單的列了一些 PD 一些調(diào)度策略春贸,leader 和 size 調(diào)度混萝,但還有更多,譬如 PD 會根據(jù)當(dāng)前 TiKV 的業(yè)務(wù)情況萍恕,平衡有熱點(diǎn)寫逸嘀,或者有熱點(diǎn)讀的 region,我們叫做 hot region 調(diào)度允粤≌柑龋或者升級 TiKV 的時候,為了不影響業(yè)務(wù)类垫,先將 leader 從這個 TiKV 遷移到其他 TiKV司光,等 TiKV 升級完畢才重新遷移回來。
當(dāng)然還有更復(fù)雜的悉患,PD 有很多調(diào)度策略残家,當(dāng)所有這些調(diào)度策略混合到一起的時候,調(diào)度會不會沖突购撼,譬如調(diào)度 A 將一個 region 的 leader 遷移到一個 TiKV跪削,而調(diào)度 B 又重新把這個 leader 給遷移回來了谴仙。
所以你看迂求,要實現(xiàn)一個強(qiáng)大的調(diào)度系統(tǒng),真的是一件非常困難的事情晃跺,挑戰(zhàn)很大揩局。
模擬器
當(dāng)你開發(fā)了一個調(diào)度系統(tǒng),如何看它能不能正常工作呢掀虎?簡單的做法凌盯,就是自己搭建一套機(jī)器付枫,測試唄。但如果你這個調(diào)度要測試數(shù)據(jù)量有幾百 T 的時候驰怎,整個集群能不能正常工作阐滩,等你給集群灌道幾百 T 數(shù)據(jù),黃花菜都涼了县忌。再說掂榔,通常公司也不可能直接跟你這么多機(jī)器來測試灌數(shù)據(jù)的。
解決這個問題的一個好辦法就是寫模擬器症杏,這也是很多公司通常的做法装获,既然我們沒有機(jī)器和時間,那就寫模擬器來折騰這個事情厉颤。
要把模擬器寫好可是一個大工程穴豫,首先你需要盡量模擬實際的情況,譬如我們需要定期分裂 region逼友,考慮實際 TiKV 增加副本的時候有時間開銷精肃,不是瞬時的這些。
另外帜乞,我們也可以通過記錄實際生產(chǎn)的調(diào)度情況肋杖,在模擬器里面重放,看調(diào)度效果挖函。據(jù)我所知状植,某大廠的調(diào)度系統(tǒng)就經(jīng)常錄制線上的流量,然后用模擬器進(jìn)行回放怨喘,來觀察調(diào)度器的工作津畸。
當(dāng)然,模擬畢竟跟實際情況還是有區(qū)別必怜,我們最終還是要去生產(chǎn)環(huán)境中檢驗調(diào)度的效果肉拓,但前期模擬還是能幫我們發(fā)現(xiàn)很多問題。
可視化
好了梳庆,上面說了調(diào)度暖途,說了模擬器,那么我們?nèi)绾沃缹嶋H的效果呢膏执?當(dāng)然可以通過日志驻售, API 還有 metric 知道。但這些其實還不是特別方便更米,我們需要更直觀的方式欺栗。
通過可視化,我們可以非常直觀的看到整個集群的變化狀態(tài),知道現(xiàn)在集群是不是有問題迟几。
上面是 PD 現(xiàn)在的一個可視化組件消请,是不是炫酷吊炸天。但還有很多東西需要去完善±嗳現(xiàn)在只能大概知道集群的變動情況臊泰,還很難通過它去發(fā)現(xiàn)問題,要做的工作當(dāng)然很多蚜枢。
可視化其實對程序員的要求很高因宇,畢竟這種交互界面,自己不沒點(diǎn)美感祟偷,同時沒豐富的人機(jī)交互經(jīng)驗察滑,真的是很難做出來的。也就是說修肠,弄出來你真的就可能是一個全棧工程師了贺辰,而且特么的還是分布式的。
福利待遇
好了嵌施,扯了這么多饲化,相信各位大概也知道了 PD 要做什么了÷鹕耍總之吃靠,這是一個非常有挑戰(zhàn)性的工作,難度還是很高的足淆,但也會非常的有趣巢块。我相信,加入我們巧号,你會成長的非匙迳荩快速。
好吧丹鸿,再來說說現(xiàn)實一點(diǎn)的問題越走,加入 PingCAP 能有啥好處?我覺得可以有幾方面吧:
- 金錢靠欢。這個不用說了廊敌,薪酬還是很有競爭力的,具體要跟我司崔老板去談了门怪。我承認(rèn)現(xiàn)在大廠開的價錢已經(jīng)離譜到匪夷所思的地步骡澈,但我們還有期權(quán),也許你說這玩意就是張白紙薪缆,有啥用秧廉?但我覺得,貴司的老板們鐵定不是那種坑爹類型的拣帽。期權(quán)對于一個處于上升期疼电,正在騰飛的企業(yè)來說,真的就是未來的一筆能遇見的財富减拭。隨著 TiDB 新版本的發(fā)布蔽豺,客戶呈現(xiàn)了爆發(fā)式增長,各種不同業(yè)務(wù)案例也不少(當(dāng)然拧粪,具體客戶情況還是 confidential 的修陡,不過你來了就了解了)。還有一個利好的消息是貴司現(xiàn)在海外灣區(qū)的分部已經(jīng)搞起來了可霎,剛落地有了 fulltime 的小伙伴全職加入魄鸦,大家覺得更有信心了。
- 影響力癣朗。也許你會來一句拾因,『名利于我如浮云』,但我覺得旷余,我們非常重視大家的成長绢记,對于大家的優(yōu)秀成果,我們都會鼓勵大家正卧,或通過寫文章蠢熄,或出去參會這些的,分享出去炉旷,提升自己和公司的知名度签孔。我們其實并不擔(dān)心「把你鍛煉出來了,別其他公司高價挖走了」這樣的事情窘行,因為這本來就是事實骏啰。如果你能力真的成長起來了,對公司就是一個好事抽高,如果你這時候認(rèn)可公司判耕,留下來,我們會非常的欣喜翘骂,如果考慮其他機(jī)會壁熄,也未嘗不可。這其實都是一個雙贏的結(jié)果碳竟。當(dāng)然草丧,你喜歡了我們的工作方式,肯定就不想走了莹桅。
- 極客文化昌执。彈性工作制,不打卡這種的不提了,畢竟是很多公司的標(biāo)配了懂拾。你也可以嘗試在家 remote煤禽,只要你能耐得住寂寞。周末我們通常會鼓勵大家去參加 meetup岖赋,但來上班就隨意了檬果。相比很多公司把你做的核心東西藏著掖著,我們是真正的開源唐断,讓你能夠跟全世界頂尖的開發(fā)者一起協(xié)作选脊,共同成長。
要求
最后脸甘,來說說要求吧恳啥,畢竟招人就像是相親,總得有個門檻的丹诀。
- 抗壓能力角寸。這沒招,創(chuàng)業(yè)公司忿墅,壓力真的很大扁藕,而且現(xiàn)在我們用戶特多,壓力就更大了疚脐。
- 知識背景亿柑。有多年分布式開發(fā)經(jīng)驗吧,至少 CAP棍弄,Raft 這些的總得知道望薄。當(dāng)然,如果你有調(diào)度系統(tǒng)的開發(fā)經(jīng)驗呼畸,折騰過 Kubernetes痕支,Mesos 等東西,那更好了蛮原。
- 語言上面我們主要會使用 Go 和 Rust卧须,如果沒有這兩門語言的開發(fā)經(jīng)驗,有C儒陨,Python 這些的也沒問題花嘶。當(dāng)然,Rust 可能對一些同學(xué)是一個坎蹦漠,就看你能不能克服了椭员,畢竟這門語言實在太難上手了。
當(dāng)然笛园,我們也非常歡迎實習(xí)生隘击,對于想來實習(xí)的同學(xué)侍芝,你只要覺得自己主動性強(qiáng),肯學(xué)習(xí)埋同,能寫代碼就可以了州叠。當(dāng)然,也還是需要抗壓能力的莺禁,因為我們有時候也直接會讓實習(xí)生去解決用戶問題留量,雖然壓力很大窄赋,但能讓你快速成長哟冬。
小結(jié)
好了,說了這么多忆绰,相信你也對我們有所了解了浩峡,你可以先去了解下 PD,代碼在 https://github.com/pingcap/pd错敢,歡迎給我們提 issue 和 PR翰灾。
如果你對我們感興趣,歡迎聯(lián)系我稚茅,直接發(fā)郵箱到 tl@pingcap.com 就可以了纸淮。