作者 | PHILIP O'TOOLE,已獲作者授權譯者 | 彎月 責編 | 歐陽姝黎2016年4月9日,第一版rqlite(https://github.com/rqlite/rqlite/releases/tag/v1.0)正式釋出,此時距離我寫
2021-06-16 06:43:03
2016年4月9日,第一版rqlite(https://github.com/rqlite/rqlite/releases/tag/v1.0)正式釋出,此時距離我寫下第一行程式碼已經過去了兩年。從那以後,我陸續釋出了58個版本、關閉了277問題、處理了416個拉取請求、32,785 次插入和1954 次刪除,總共修改了100多個檔案。
rqlite 是一個用 Go 編寫的輕量級、開源、分散式關係資料庫,儲存引擎採用了SQLite。剛開始寫這個資料庫的時候,我只是覺得好玩,但後來就非常認真了。
那麼,在過去的 7 年裡,我從開源資料庫的開發中學到了什麼?
有一次,我嘗試重寫 HTTP 服務層(https://github.com/rqlite/rqlite/blob/master/DOC/DATA_API.md),並替換 Raft 共識子系統(https://raft.github.io/)。這兩項功能是同時開發的。
結果發現,工作量太大,引發了第二系統效應,最終我放棄了這些工作。我努力了好幾個星期,才意識到這些實現過於龐大。於是,我學習到了寶貴的一課:變更越小越好,一次只關注一個功能。
如果需要新的設計和實現時,則可以考慮增量式的方法。儘可能保證定期釋出,並儘快將更改合併到主分支。如果需要大量重寫程式碼,由於沒有明確的中間可交付成果,所以必須警惕這些變更是否符合實際的需求。
大多數重要的功能都是我在週末新增的。
工作時間最好保持連續和高強度,能在幾天內完成,如此一來,我在編寫每一行程式碼之前,都可以在腦海中想象系統最終的樣子。有一次,我利用一個週末重新設計並重新實現了HTTP API(https://github.com/rqlite/rqlite/blob/master/DOC/DATA_API.md),並因此而促成了rqlite 2.0的釋出。
還有一個週末,我修改了Raft日誌,利用 Protobuf 編碼替換掉了JSON。又在接下來的一個週末,添加了壓縮。
然而,有時我會連續幾個月什麼都不做。直到今天,仍然是這樣。我常常想,如果每一天都勤奮地在資料庫上工作,那麼一年的時間我應該能有非常大的進步。
我相信廣泛的測試覆蓋率是高質量程式碼的保證。我收到使用者報告說 rqlite 例項已經運行了一年多,而無需重新啟動。
我一直在堅持測試金字塔的理念。你編寫的測試用例應該儘可能接近實際程式碼。不要忽略測試各種失敗的情況,也不要試圖繞過錯誤。測試不會因為某個神祕的原因而失敗,失敗只是證明了你還沒有完全理解自己構建的產品。
一定要使用整合測試作為冒煙測試,確保資料庫確實能夠啟動,而且沒有漏掉任何基本的東西。只有在沒有其他辦法時,才需要運行完整的軟體例項,並運行端到端的測試。而這種情況本身也代表了實現中的一些問題:你的軟體不夠模組化,或者介面的正交程度不夠。
單元測試非常關鍵。如果單元測試沒有完成出色的覆蓋率,則永遠無法保證軟體的高質量。
Go 語言給我留下了深刻的印象,它一直是我最喜歡的程式語言。7年來,我使用Go語言編寫了很多程式,我仍然非常喜歡它。rqlite的開發中間停頓了幾個月,當再次開啟程式碼時,我發現自己仍然沒有忘記Go的使用風格和模式。
我為了挑戰自己而編寫了一個數據庫,我只是想試試看:我能否創建一個有趣的系統,並保證乾淨的設計和連貫的實現?以及高品質?我覺得我可以,而且事實證明我確實可以,這就夠了。但是如果有人使用這個系統,那麼我會特別欣慰。
然而,宣傳非常艱難。這款產品曾多次出現在Hacker News上。我在Meetups也談到過。而且7年以來,我在GitHub 上獲得8千個贊。那麼,這款產品究竟好不好用呢?我不知道。我應該關心嗎?我也不知道。
程式設計是我的謀生手段。我非常喜歡這個工作,但是編寫自己的產品感覺還是不一樣。作為團隊的一員,在編寫程式時,我們需要在程式設計風格、解決錯誤的策略、程式碼審查和功能優先順序等問題上達成一致。作為一個團隊,構建軟體涉及大量程式設計以外的活動。
因此,建立自己的項目是一種解放。你可以自由決定程式設計風格、功能以及修復哪些錯誤。而且還不用參加會議。
這也說明了為什麼多個開發人員一起工作的速度會減慢。如果只有一個人,一個願景,那麼就無需擔心設計的連貫性和清晰度了。
rqlite誕生已經7年了,但我還有很多工作要做。
我需要改進事務、客戶端庫、適當的 Kubernetes 支援以及效能等等,軟體的魅力在於無限的擴展力,而且總有可以改進的地方。永遠沒有盡頭。
「老兵不死,只是會逐漸凋零」。—— 歌曲《Old Soldiers Never Die》
原文連結:https://www.philipotoole.com/7-years-of-open-source-database-development-lessons-learned/
聲明:本文由CSDN翻譯,已獲作者授權,轉載請註明來源。
相關文章
作者 | PHILIP O'TOOLE,已獲作者授權譯者 | 彎月 責編 | 歐陽姝黎2016年4月9日,第一版rqlite(https://github.com/rqlite/rqlite/releases/tag/v1.0)正式釋出,此時距離我寫
2021-06-16 06:43:03
蘋果目前已經正式推出了Beats Studio Buds真無線降噪耳機。 介紹顯示,Beats Studio Buds 採用完全定製的聲學平臺,帶來強勁均衡的音效。雙音室外殼搭配專有的雙元件振膜驅動單
2021-06-16 06:41:00
說到智慧門鎖,我想體驗過的人10有8,9都是持雙手贊成的態度的,畢竟改變是真的巨大,非常的方便,而且出門再也不用忍受忘帶鑰匙的焦慮了。但是使用過智慧門鎖的小夥伴應該也體會到了
2021-06-16 06:21:05
榮耀50Pro和小米11青春版兩款手機,都搭載高通驍龍780G,榮耀50Pro的跑分最高為525904,其中CPU得分159545、GPU得分157046、UX得分84097、MEM得分125216。小米11青春版的平均跑分
2021-06-16 05:36:33
如今,智慧音箱產品能為使用者做的事情越來越多,除了查天氣、設鬧鐘,還能教你做菜、學英語、查百科等等。加上現在的智慧音箱價格普遍都比較便宜,很適合當作啟蒙孩子學習的早教產
2021-06-16 05:34:02
當畢業季遇上618年中大促,各大電商平臺都給出了不錯的優惠的政策,手機廠商也開始了一輪又一輪的降價狂潮,對於想要換機的朋友們而言,眼下則是一個不錯的機會。 縱觀當下手機市場
2021-06-16 05:12:03