首頁 > 科技

做了7年開源資料庫開發,我學到了什麼?

2021-06-16 06:43:03

作者 | PHILIP O'TOOLE,已獲作者授權

譯者 | 彎月 責編 | 歐陽姝黎

2016年4月9日,第一版rqlite(https://github.com/rqlite/rqlite/releases/tag/v1.0)正式釋出,此時距離我寫下第一行程式碼已經過去了兩年。從那以後,我陸續釋出了58個版本、關閉了277問題、處理了416個拉取請求、32,785 次插入和1954 次刪除,總共修改了100多個檔案。

什麼是rqlite?

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 經受住了時間的考驗

Go 語言給我留下了深刻的印象,它一直是我最喜歡的程式語言。7年來,我使用Go語言編寫了很多程式,我仍然非常喜歡它。rqlite的開發中間停頓了幾個月,當再次開啟程式碼時,我發現自己仍然沒有忘記Go的使用風格和模式。

宣傳非常艱難

我為了挑戰自己而編寫了一個數據庫,我只是想試試看:我能否創建一個有趣的系統,並保證乾淨的設計和連貫的實現?以及高品質?我覺得我可以,而且事實證明我確實可以,這就夠了。但是如果有人使用這個系統,那麼我會特別欣慰。

然而,宣傳非常艱難。這款產品曾多次出現在Hacker News上。我在Meetups也談到過。而且7年以來,我在GitHub 上獲得8千個贊。那麼,這款產品究竟好不好用呢?我不知道。我應該關心嗎?我也不知道。

程式設計很治癒

程式設計是我的謀生手段。我非常喜歡這個工作,但是編寫自己的產品感覺還是不一樣。作為團隊的一員,在編寫程式時,我們需要在程式設計風格、解決錯誤的策略、程式碼審查和功能優先順序等問題上達成一致。作為一個團隊,構建軟體涉及大量程式設計以外的活動。

因此,建立自己的項目是一種解放。你可以自由決定程式設計風格、功能以及修復哪些錯誤。而且還不用參加會議。

這也說明了為什麼多個開發人員一起工作的速度會減慢。如果只有一個人,一個願景,那麼就無需擔心設計的連貫性和清晰度了。

7年過去了,還有很多工作要做

rqlite誕生已經7年了,但我還有很多工作要做。

我需要改進事務、客戶端庫、適當的 Kubernetes 支援以及效能等等,軟體的魅力在於無限的擴展力,而且總有可以改進的地方。永遠沒有盡頭。

「老兵不死,只是會逐漸凋零」。—— 歌曲《Old Soldiers Never Die》

原文連結:https://www.philipotoole.com/7-years-of-open-source-database-development-lessons-learned/

聲明:本文由CSDN翻譯,已獲作者授權,轉載請註明來源。


IT145.com E-mail:sddin#qq.com