寫在工做10週年

其實在數字的日子仍是很開心的, 由於線上的服務已經很穩定, Pika  已經在公司大規模的鋪開, 由於開源, 也有挺多大公司使用, 收到的評價也都還行, floyd/zeppelin 也搞完, 用 @yyj 的話說你就是」天天來看看論文, review review 代碼, 這日子過的太開心的」. 我記得那會老闆對咱們團隊最大的要求就是線上穩定, 我記得老闆的老闆說, 「公司對大家這個團隊的最大要求就是穩定, 線上不出事就行」.算法

我想大部分的基礎架構團隊都會遇到相似的瓶頸, 現有的線上服務已經可以支持公司大部分服務, 公司的業務團隊對基礎架構團隊最大的訴求是穩定, 對於更極致的性能, 對於彈性等等, 其實訴求不大. 可是做爲小組長, 須要時刻給本身和團隊找一些新的方向.數據庫

因此在17年的時候, 我以爲我應該出來看看了.架構

其實那會出來就聊了集團的數據庫團隊和阿里雲的數據庫團隊. 後來去了阿里雲的數據庫團隊由於, 我以爲若是作雲廠商的話, 那麼可能就不會遇到我以前的問題, 由於雲廠商的話, 面臨的是整個行業的競爭, 客戶會選擇用腳投票, 你的任何優化對於性能, 成本只要有收益, 客戶就會投給你. 就像飛刀說的客戶爲產品買單, 不會爲技術買單.併發

如今看來, 應該是對的. 不少時候客戶會把咱們和各類其餘產品進行PK, 咱們在性能上的優化只要穩定, 有收益,必定有客戶買單.dom

我記得以前有一個大客戶在PolarDB 的blob 字段裏面存儲了100kb 左右的字段, 每一次更新, 雖然只是修改其中的某一個字段, 可是都是整個 100kb 字段的update 操做, 那麼整個性能的瓶頸就卡在redo log 的寫入上了, 由於PolarDB 是基於計算存儲分離的架構, InnoDB 是基於 ARIES/WAL 的實現, redo log 的寫入是順序寫入, 這樣設計的緣由是由於早年機械盤的順序寫的性能是遠高於隨機寫的, 所以將隨機IO 轉換成順序IO 從而充分利用硬件的能力, 可是在分佈式存儲上就徹底不是這樣,  分佈式存儲的隨機寫性能會高於順序寫, 因此咱們重寫了redo log, 實現了」random write redo log」 , 從而贏下了這個客戶.分佈式

還有一個客戶有幾十個索引, 那麼二級索引的插入就成爲瓶頸, 還有客戶併發數特別高, 那麼btree 的index lock 就會成爲瓶頸, 還有客戶有查詢歷史數據的需求, 那麼若是保存undo log, readview 如何保存就會成本瓶頸, 這些咱們也都作了相應的優化, 固然也是由於有這些客戶場景, 迫使咱們去作這些優化.ide

咱們還針對一次page IO 在分佈式存儲latency 過長從而致使持有Lock 時間過長實現了shadow page, 針對lock 咱們還作了」early lock release」 等等, 都是在優化3% 左右的性能, 但正是這些慢慢的積累, 纔有如今客戶回訪裏面對咱們性能的確定.函數

在這個行業作的久了, 你就會越加的尊敬Oracle. 在單機存儲引擎領域, Oracle 作的真的是很是的極致, 如今PolarDB 可以和Oracle PK 也只是由於賽道變了, 可是在單機存儲引擎上, 我仍然以爲Oracle 不少地方值得咱們學習. 因此無論別人怎麼說, 我仍是以爲 Oracle, AWS aurora 團隊那些糟老頭子比咱們強, 必定有不少值得咱們學習的地方, 我仍是以爲數據庫領域是慢工出細活, 沒有所謂的靈光一閃, 只有日積月累.性能

記得以前和@江疑 聊過, 可能阿里巴巴之前的數據庫針對電商行業作了大量了優化, 可是還有不少行業等待咱們去發掘, 好比遊戲, 好比教育等待. 這也是我以爲很是有意思的地方, 能夠作的事情還不少, 咱們還差的不少. 就好像在王者榮耀裏面, 我喜歡李白/韓信同樣, 天花板很高, 永遠沒有盡頭, 因此這個領域40/50/60 歲的人大有人在.學習

咱們所說的國產化的趨勢, 計算機基礎領域人才的培養, 我理解是須要在硬實力上進行PK 的, 我理解的硬實力應該是存儲引擎, 分佈式存儲, 是事務系統等等.

從數字到如今, 每一年都會參加校招, 也和不少畢業生聊過, 其實挺多同窗不知道在計算機領域不一樣的方向其實就跟不一樣行業同樣. 因此我老是建議畢業生, 先作難的事情, 再作簡單的.

而後就跟個人 blog 的 quote 同樣, 「作有積累的事情」. 但願你工做十年之後應該跟工做2年的同窗是不同的, 我理解基礎架構/數據庫, 算法(可是算法我不懂)是這樣的領域, 就像我如今的老闆@jimmy Yang 同樣, 40好幾的人了, 天天仍是須要和咱們一塊兒看代碼, 一塊兒學習的..

我仍是建議畢業生剛開始的時候先好好寫 C/C++, 可以知道具體每個函數的調用棧是怎樣, 可以知道每個mutex 調用的開銷是怎樣, 可以很接近硬件, 充分利用硬件, 不用在上面在隔着一層.

我仍是建議畢業生若是選擇作工程的話, 能夠對操做系統, 數據庫進行深刻的瞭解, 我理解這兩個領域是工程裏面發展最成熟也最快的領域, 你能夠在這兩個方向充分學習, 之後轉向其餘方向, 我理解也是有幫助的.

另外仍是建議畢業生學好基礎學科, 國外不少的教材, 好比 MIT 6.824, CMU Andy 的課程等等都很是有利於學習, 國內的知識付費的App 真的不建議用, 真的是割韭菜在我看來.

記得喬布斯說過 「Why join the navy if you can be a pirate?」,  不少時候咱們都很是理想化, 可是我更建議的是先加入navy, 學習如何成長成優秀的navy, 而後若是喜歡或者有夢想的話再成爲pirate. 你們都是成年人, 這個是最穩妥的方案. 固然你若是足夠優秀, 也能夠忽略.

相關文章
相關標籤/搜索