首頁 > 科技

從摩托羅拉、諾基亞再到航空領域應用,這款開源資料庫的成功如何成就天才程式設計師?

2021-07-11 03:09:22

作者 | Richard Hipp

編譯 | 馬超

如果說有什麼事物能夠使男程式設計師心中的父愛完全覺醒,那我想一定是投身於自己創建的開源項目中去了。在和熊譜翔、黃東旭等儲多開源大神的接觸中,我可以明顯感到他們對於自身開源項目的那份執著與熱愛。雖然說貝佐斯、蓋茨等IT巨頭創始人都能在公司走上正軌後卸任CEO,完成華麗轉身,但是為了維護自己的開源項目,程式設計師們往往都是從一而終,從不始亂終棄。

不過這也帶來了一個衍生的問題,那就是開源項目尤其是由初創團隊建立的開源項目到底如何賺錢,怎麼保持持續活力?我們看到之前Linux的創始人林納斯就吐槽說現在的社群幾乎靠他們這一代年過50的老年程式設計師維繫,年輕人似乎不喜歡核心程式設計,甚至還有不少大學及企業只熱衷於在核心中「注水」去刷KPI,真不知道再過20年Linux會路向何方,可見即使是頂級的開源項目也有著自己的隱憂,更遑論其它小眾的開源項目了。

還有一個現象也特別值得我們注意,那就是很多開源項目承擔了巨大的責任,不過其營收卻非常慘淡。熟悉資訊保安方面的讀者肯定知道,很多安全檢測所找到的漏洞都來自於開源項目 OpenSSL,這個實現SSL安全加密的C程式碼庫,承載了全球17%的加密流量,不過令人震驚的是這個項目每年卻僅能收到2000美元的捐款。

將心比心像筆者這樣經常寫文章的程式設計師也會極力維護自己的文字,雖然也有夢想建立一個開源項目,但是開源到底意味著什麼我卻根本沒有能力思考清楚,不過最近我在無意聽到一個名為CoRecursive的播客,並在其中聽到了Richard Hipp親身介紹SQLite成長過程中,初創人員口述的心路歷程頗令人觸動,Richard在訪談中所做的表述非常真實坦率,接下來就對原文(https://corecursive.com/066-sqlite-with-richard-hipp/)進行了簡譯,與大家共享SQLite不為人知的故事。

無處不在的Sqlite

SQLite目前正在成為世界的核心基礎設施,變得無處不在。SQLite存在於網路瀏覽器中,存在於手機中,存在於汽車中,甚至存在於飛機中。Sqlite幾乎壟斷了社交軟體,不管是iMessages還是微信、WhatsApp,訊息儲存引擎都是SQLite,哪怕只是在計算機上簡單的查詢*.db檔案,你也會驚訝於為什麼電腦中會存在這麼多的Sqlite 資料庫,它是世界上裝機最多的資料庫,沒有之一。從Richard 的分享中我們看到,SQLite的誕生最早源於他對Informix的失望。

目前的資訊系統像是一艘大且複雜的巨輪,假如行駛過程中出現管道破裂,那麼船員通過關閉管道一側的閥門來隔離損壞,隨後還需要開啟其他地方的閥門以將工作流體恢復到下游的其他系統中,這樣操作的話它們就不會造成重大損失。但想找到這些閥門卻越來越複雜,拆了東牆補西牆的情況筆筆皆是。像Informix這樣的傳統資料庫和這樣一艘巨輪的情況非常相似,雖然程式設計師按照操作手冊去維護系統可以解決問題,但是手冊卻越來越厚,查閱手冊所需要的時間更是越來越長。

P or NP這是個問題

一般咱們程式設計師在設計系統時,往往都會在效能可以接受的情況下,先尋求快速的近似解,而不會考慮做極致的優化,雖然程式設計師們試圖編寫程式碼來解決問題,但卻很少真正深入的分析問題。

在創立SQLite之前,Richard正在領導一個致力於極致技術優化的團隊,但他們使用的資料庫產品Informix卻沒有獲得團隊的一致認可。一旦資料庫宕機,應用程式就無法運行,由於一般的應用開發者對資料庫伺服器沒有太多控制權,但卻對應用的可用性承擔絕對責任,因此經常有程式設計師因為資料的問題而背鍋。

Richard的團隊開始用原認知來分析這樣的問題,他們一連問了三個問題,為什麼我們需要專門的伺服器?為什麼不直接從磁碟中讀取資料?為什麼不能儘量減輕資料庫服務的依賴項?環顧四周,Richard發現幾乎每個資料庫產品都附帶了一個龐大的產品線,一個個近似解堆砌的結果就是變得異常的低效臃腫。這也讓Richard萌生了自己寫一個輕量級資料庫的想法。

初版本的誕生

2000 年的時候,網民們大多還只能選擇用電話撥號的方式上網,即使在美國家庭擁有寬頻普及率也就只有1%。Richard在創立SQLite之初並沒有谷歌等神器來幫忙,只能靠自己動手豐衣足食。在最初的版本中,Richard將每個SQL語句視為一個程式,他們實際上構建了一個編譯器,將SQL語句轉化成了可執行的彙編程式碼,這其實就是最早的SQLite了。後來Richard的團隊將SQLite釋出在網際網路上,出乎他們的意料,很多人開始使用這個並不成熟的輕量級資料庫產品,並給出了熱情洋溢的評價與反饋,可能恰恰就是這些最初的鼓勵,SQLite正式開啟了開源之路。

從摩托羅拉到諾基亞-Sqlite連獲大單

在SQLite誕生一年以後,Richard接到了摩托羅拉的電話,當時摩托羅拉正在設計一個新的手機作業系統,他們希望SQLite成為其手機上的資料庫引擎。收到邀請後,Richard立刻給出了肯定的答覆。

經過團隊內部的協商,Richard最終給出了8萬美元的報價。雖然按照實際的工作量來說,這錢不多,但對於當時那個正在開源方面苦苦找尋方向的初創團隊來講,第一桶金的價值根本無法用金錢衡量。

在順利完成摩托羅拉的項目之後,美國線上(AOL)也開始與Richard接觸,美國線上與Richard一道,完成了CD當中的資料庫需求。

接下來是諾基亞的Symbian OS團隊,在諾基亞的選型中,SQLite打敗了其它10個數據庫引擎,成為了最終的勝出者。後續在接連得到Mozilla和Adobe的支援後,他們和Symbian共同組成了SQLite聯盟,這也為SQLite後續發展壯大添磚加瓦。

當然SQLite能有今天的成就,最關鍵的一點在於他們在移動網際網路上的眼光非常超前,早在2005年,Richard就開始與Android的開發人員進行了溝通,要知道3年之後Android被谷歌以4億美元收購後才真正在業界揚名。不僅如此他們還為黑莓與IPhone,Windows Mobile都進行了適配工作,這種押注賽道而非單品的風格也值得我們學習。

可能是由於同性相吸,在全面進行了驗證工作後,SQLite團隊選擇全力支援同樣也是開源項目的Android,因為Richard的團隊完全可以在Android的Linux環境下用GDB偵錯SQLite,這個吸引力太大了。

昇華-航空標準的嚴格測試

在經歷了一段頗為順利的發展期之後,Richard和他的團隊開始四處吹噓 SQLite是一款不存在任何錯誤可能性的資料庫,不過在為航天公司羅克韋爾柯林斯工作的時候,Richard開始明白消費級電子與航空技術對於基礎軟體的要求,完全不可同日而語。

羅克韋爾柯林斯向Richard介紹了 DO-178B 標準的概念,由於筆者並沒有在網上查到這項航空產品質量標準的原文,所以下面就只能引用訪談原文中的大多介紹了,與許多質量標準不同,DO-178B可讀性很強,雖然也有一些官話套話,但只要遵守這個標準就可以真正提高軟體的質量,雖然這是一本要花費幾百美元卻還很薄的書,但Richard認為這筆錢花得很值,達到航空標準的關鍵在於100% 的 MCDC 測試覆蓋率。

按照筆者的理解MCDC實際是一個形式化驗證的過程,有點類似於作業系統SEL4的概念,這個驗證標準不但要覆蓋所有的分支,還要覆蓋達到分支前所有可達的路徑,比如程式碼執行到第4個分支之前可以有1-2-3、3-2-1、3-1-2等等可達路徑,那麼驗證就要100% 覆蓋上述所有執行路徑,而且這個覆蓋還要以組合語言為基準進行。

Richard的團隊用了整整一年996的代價,完成了數十億個測試用例,才最終完成MCDC的工作。不過完成了這項工作後,SQLite也升級了,沒有重大錯誤不再是一句空談的口號。

第一性構建原則

個人認為SQLite能夠成功最重要的原因還是在於,Richard團隊使用第一性來構建產品,隨著產品的不斷迭代,Richard總是自己動手去實現演算法,而不是從網上照搬原有的解決方案。就如Richard所說,在實際工作中,學校裡學習的資料結構知識可能早就忘光了,不過在SQLite用到B+樹的時候,Richard直接抄起《The Art of Computer Programming》,翻到搜尋的章節,找到B+樹的虛擬碼,學習相關思想然後動手實現,光是這份執著就值得我們學習。

給開源開發者的建議

現在的SQLite已經是一個可以自我生長的完整生態了,Richard 的資料庫是世界上使用最多的資料庫,從某些方面來說,它是SQLite甚至是部署最廣泛的軟體模組。

最初的SQLite僅僅源於一個不需要實體伺服器,直接與磁碟互動的瘋狂想法,如果你當時去問任何資料庫方面的專家,得到的結論都會是這種方案永遠行不通。不過幸運的是,Richard當時不認識任何專家,後來自己還成了專家,可以說開源最需要的是對夢想的執著,而不是理性的分析,這也是對我最大的啟發。

原文:https://corecursive.com/066-sqlite-with-richard-hipp/

聲明:本文由CSDN編譯,轉載請註明來源。


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