2021年,DataBricks的創(chuàng)始人和CTO,Spark的發(fā)明人馬泰·扎哈里亞在斯坦福做了一次演講。 在演講中,他提到了DataBricks遇到的一個煩人的問題,DataBricks經(jīng)常需要在云上調(diào)度上百萬個Spark任務(wù),并且跟蹤這些任務(wù)的狀態(tài)(等待、運(yùn)行、完成、失?。?。 這些任務(wù)非常小,用進(jìn)程/線程來管理并不合適,太重了,并且進(jìn)程線程的調(diào)度是單機(jī)的,DataBricks需要跨越多個計算機(jī)調(diào)度。 Databricks團(tuán)隊(duì)選擇Postgres作為任務(wù)調(diào)度和狀態(tài)跟蹤的數(shù)據(jù)庫,盡管Postgres成熟穩(wěn)定,但是管理超大規(guī)模的分布式任務(wù),在短時間內(nèi)記錄一百萬個任務(wù)的狀態(tài)變化,壓力太大了。 Matei Zaharia抱怨說:PostgreSQL太慢了! 這可“惹惱”了聽演講的一位大佬邁克爾.斯通布雷克。 邁克爾.斯通布雷克可不是普通大佬,應(yīng)該是巨佬,數(shù)據(jù)庫領(lǐng)域只有4個人獲得了圖靈獎。 (1)查爾斯 · 巴赫曼 數(shù)據(jù)庫領(lǐng)域的開拓者,網(wǎng)狀數(shù)據(jù)庫的發(fā)明人,2017年去世 (2)埃德加 · 科德 關(guān)系數(shù)據(jù)庫的發(fā)明人,2003年去世 (3)詹姆斯 · 格雷 事務(wù)處理技術(shù)的奠基人,2007年出海后失蹤,2012年被宣布死亡 (4)邁克爾·斯通布雷克 沒錯,邁克爾.斯通布雷克是唯一還在世的數(shù)據(jù)庫巨佬。 邁克爾·斯通布雷克有多牛,看看下面兩幅圖就明白了。 首先他帶頭開發(fā)了Ingres,成為很多數(shù)據(jù)庫的老祖宗: 更厲害的是,巨佬還帶出了一大批的人才,覆蓋了數(shù)據(jù)庫的各個領(lǐng)域,到處都是他的“徒子徒孫”。 (上面兩幅圖片來源于四川大學(xué)唐常杰教授的博客:https://blog.sciencenet.cn/blog-287179-887047.html ) 巨佬還創(chuàng)立了StreamBase,Vertica,Goby,VoltDB,SciDB等一系列創(chuàng)業(yè)公司,實(shí)在是太強(qiáng)悍了。 因此,馬泰·扎哈里亞說 PostgreSQL 性能很差,那感覺就像說斯通布雷克的孩子有點(diǎn)傻一樣...... 聽了演講以后的斯通布雷克并沒有和馬泰·扎哈里亞爭吵,而是告訴他:我們可以做得更好,聯(lián)手吧! 其實(shí),馬泰·扎哈里亞的Spark遇到的問題主要是: 不得不在 PostgreSQL 上添加奇怪的附加組件,維護(hù)操作系統(tǒng)之外的 Spark 集群的狀態(tài) 因?yàn)長inux是個單機(jī)的操作系統(tǒng),但是如今的計算都是分布式的,所以必須有k8s這樣的軟件來管理應(yīng)·用數(shù)據(jù)、身份驗(yàn)證系統(tǒng)、消息傳遞、集群管理..... Linux太老了,而Kubernetes 太復(fù)雜了! 現(xiàn)在,扎哈里亞和斯通布雷克要設(shè)計了一個數(shù)據(jù)庫來取代它們! 操作系統(tǒng)不是不行嗎,那就別在它的上面折騰數(shù)據(jù)庫了,干脆反過來,在數(shù)據(jù)庫上搞一個操作系統(tǒng)! 其實(shí),讓操作系統(tǒng)依賴數(shù)據(jù)庫,這個概念并不新鮮。 IBM早在AS/400大型機(jī)(后來叫System i)上就搞過,它的文件就是保存在數(shù)據(jù)庫表中的。 比如在AS/400上,有個叫做QCSRC的文件,內(nèi)容是一個HelloWorld的代碼。 QCSRC就是個一個表,這個表有三列:SRCSEQ,SCRDAT,SRCDTA。 其中SRCDTA中保存著HelloWorld的源代碼,一共六行。 如果按照SRCDTA這一列進(jìn)行排序: select * from qcsrc orderby srcdta 就可以看到結(jié)果發(fā)生了變化,源代碼重新排列了: 早在2000年,微軟也提出過一個雄心勃勃的WinFS(Windows Future Storage)項(xiàng)目,試圖把將不同類型的數(shù)據(jù)(文檔、聯(lián)系人、圖片、郵件等)進(jìn)行標(biāo)準(zhǔn)化管理。 WinFS的想法是將文件的元數(shù)據(jù)存儲在關(guān)系數(shù)據(jù)庫中,這樣文件可以通過復(fù)雜的查詢(類似 SQL)快速定位。例如,一個圖片文件的元數(shù)據(jù)包括拍攝時間、地點(diǎn)、相機(jī)類型等,可以通過這些元數(shù)據(jù)迅速進(jìn)行篩選和排序,找出某個時間的所有照片。 另外,通過數(shù)據(jù)庫的關(guān)系建模,WinFS 能夠直觀地管理文件之間的關(guān)聯(lián)。例如,聯(lián)系人可以直接鏈接到與其相關(guān)的郵件、圖片和事件。 盡管 WinFS 的概念很有前瞻性,但是將文件系統(tǒng)與數(shù)據(jù)庫深度整合技術(shù)難度高,特別是要保證性能和兼容性,WinFS進(jìn)展緩慢,最終與2006年取消。 無論是AS/400還是WinFS,雖然使用了關(guān)系數(shù)據(jù)庫,但它們還都是操作系統(tǒng)的一部分。 扎哈里亞和斯通布雷克則完全把數(shù)據(jù)庫挪到了操作系統(tǒng)的下層,操作系統(tǒng)是基于數(shù)據(jù)庫構(gòu)建的。 其基本思想是,在微內(nèi)核中運(yùn)行一個多節(jié)點(diǎn)多核、事務(wù)性、高可用的分布式數(shù)據(jù)庫,然后在數(shù)據(jù)庫之上實(shí)現(xiàn)調(diào)度、消息傳遞、文件系統(tǒng)和其他操作系統(tǒng)服務(wù)。 第一層是微內(nèi)核,主要實(shí)現(xiàn)內(nèi)存管理,中斷處理,驅(qū)動等。 第二層是一個高性能的、多節(jié)點(diǎn)的分布式數(shù)據(jù)庫 第三層,在DBMS上構(gòu)建高級OS服務(wù),分布式文件系統(tǒng)、集群調(diào)度程序和分布式進(jìn)程間通信 (IPC) 子系統(tǒng) 第四層是用戶程序,例如Spark。 第1,2,3層加起來被成為DBOS(Database-Oriented Operating System),就是“面向數(shù)據(jù)庫的操作系統(tǒng)”。 據(jù)說當(dāng)時有人想把它叫做DataSphere OS,或者HyperDataOS,但是斯通布雷克堅持采用了簡單直白的“DBOS”,因?yàn)椤爸卑椎拿肿钅芪俗⒁?,就像UNIX和SQL那樣”。 DBOS有兩個鮮明的特點(diǎn): 1.所有應(yīng)用程序和操作系統(tǒng)的狀態(tài)都存儲在分布式數(shù)據(jù)庫的表中 2.僅通過數(shù)據(jù)庫事務(wù)來訪問狀態(tài) 這么做有什么好處? 首先,集群調(diào)度程序可以將有關(guān)任務(wù)和工作程序的信息存儲在數(shù)據(jù)庫表中,百萬級別的任務(wù)狀態(tài)跟蹤對數(shù)據(jù)庫來說就是小事兒一樁。 因?yàn)閿?shù)據(jù)庫支持事務(wù)(ACID),可以保證對任務(wù)狀態(tài)的并發(fā)訪問。在發(fā)生故障時,DBOS也能保證一致性和持久性,可以輕松從中斷處繼續(xù)運(yùn)行。 其次,使用強(qiáng)大的數(shù)據(jù)庫日志功能,可以追蹤對應(yīng)用程序狀態(tài)的訪問,簡化應(yīng)用程序的分析、監(jiān)控、調(diào)試和保護(hù)。 DBOS還有多種安全優(yōu)勢,包括“攻擊面更小、漏洞更少”,從嚴(yán)重的錯誤或攻擊中恢復(fù)可能很簡單,只需將數(shù)據(jù)庫回滾到以前的狀態(tài)即可。 斯通布雷克認(rèn)為,有了DBOS,“生活就簡單多了,你可以省去 Linux、Kubernetes 和其他一些必需品。” 舉個簡單的例子,DBOS支持工作流,假設(shè)你有這么一個需求:需要發(fā)送一封確認(rèn)郵件,等待一段時間,然后再發(fā)一封提醒郵件: @DBOS.workflow() def reminder_workflow(email: str, time_to_sleep: int): send_confirmation_email(email) DBOS.sleep(time_to_sleep) send_reminder_email(email) 通過使用工作流,DBOS可以保證即使休眠時間長達(dá)數(shù)周或數(shù)月,即使程序崩潰或重啟多次,提醒電子郵件也始終會按時發(fā)送(并且確認(rèn)電子郵件永遠(yuǎn)不會重新發(fā)送)。 這就是數(shù)據(jù)庫把所有狀態(tài)都管理起來的威力,它就極大地簡化了程序員的工作。 2001年,Oracle CEO 拉里·埃里森說過:中間件是一個愚蠢的想法,一切都應(yīng)該交給數(shù)據(jù)庫來管理。 20多年過去了,DBOS真的把這些活兒交給數(shù)據(jù)庫來干了。 但是很明顯,DBOS不是Windows,Linux這樣的單機(jī)操作系統(tǒng),更不是讓普通消費(fèi)者來使用的。 DBOS面向的是云計算,它也許是未來的云計算的操作系統(tǒng)。 中國人老是喜歡說彎道超車,如果DBOS真的搞成了,那才是真正的彎道超車,美國人的創(chuàng)新能力確實(shí)是強(qiáng),不承認(rèn)不行。還有一個對國內(nèi)某些廠商非常不利的消息,不像PostgreSQL,DBOS不是完全開源的,它們沒法“自研”,然后再彎道超車了。 參考資料: 全文完,覺得不錯的話點(diǎn)個贊或者在看吧! |
|