2021年,DataBricks的创始人和CTO,Spark的发明人马泰·扎哈里亚在斯坦福做了一次演讲。
在演讲中,他提到了DataBricks遇到的一个烦人的问题,DataBricks经常需要在云上调度上百万个Spark任务,并且跟踪这些任务的状态(等待、运行、完成、失败)。
这些任务非常小,用进程/线程来管理并不合适,太重了,并且进程线程的调度是单机的,DataBricks需要跨越多个计算机调度。
Databricks团队选择Postgres作为任务调度和状态跟踪的数据库,尽管Postgres成熟稳定,但是管理超大规模的分布式任务,在短时间内记录一百万个任务的状态变化,压力太大了。
Matei Zaharia抱怨说:PostgreSQL太慢了!
这可“惹恼”了听演讲的一位大佬迈克尔.斯通布雷克。
迈克尔.斯通布雷克可不是普通大佬,应该是巨佬,数据库领域只有4个人获得了图灵奖。
(1)查尔斯 • 巴赫曼
数据库领域的开拓者,网状数据库的发明人,2017年去世
(2)埃德加 • 科德
关系数据库的发明人,2003年去世
(3)詹姆斯 • 格雷
事务处理技术的奠基人,2007年出海后失踪,2012年被宣布死亡
(4)迈克尔·斯通布雷克
没错,迈克尔.斯通布雷克是唯一还在世的数据库巨佬。
迈克尔·斯通布雷克有多牛,看看下面两幅图就明白了。
首先他带头开发了Ingres,成为很多数据库的老祖宗:
更厉害的是,巨佬还带出了一大批的人才,覆盖了数据库的各个领域,到处都是他的“徒子徒孙”。
(上面两幅图片来源于四川大学唐常杰教授的博客:https://blog.sciencenet.cn/blog-287179-887047.html )
巨佬还创立了StreamBase,Vertica,Goby,VoltDB,SciDB等一系列创业公司,实在是太强悍了。
因此,马泰·扎哈里亚说 PostgreSQL 性能很差,那感觉就像说斯通布雷克的孩子有点傻一样......
听了演讲以后的斯通布雷克并没有和马泰·扎哈里亚争吵,而是告诉他:我们可以做得更好,联手吧!
其实,马泰·扎哈里亚的Spark遇到的问题主要是:
不得不在 PostgreSQL 上添加奇怪的附加组件,维护操作系统之外的 Spark 集群的状态
因为Linux是个单机的操作系统,但是如今的计算都是分布式的,所以必须有k8s这样的软件来管理应·用数据、身份验证系统、消息传递、集群管理.....
Linux太老了,而Kubernetes 太复杂了!
现在,扎哈里亚和斯通布雷克要设计了一个数据库来取代它们!
操作系统不是不行吗,那就别在它的上面折腾数据库了,干脆反过来,在数据库上搞一个操作系统!
其实,让操作系统依赖数据库,这个概念并不新鲜。
IBM早在AS/400大型机(后来叫System i)上就搞过,它的文件就是保存在数据库表中的。
比如在AS/400上,有个叫做QCSRC的文件,内容是一个HelloWorld的代码。
QCSRC就是个一个表,这个表有三列:SRCSEQ,SCRDAT,SRCDTA。
其中SRCDTA中保存着HelloWorld的源代码,一共六行。
如果按照SRCDTA这一列进行排序: select * from qcsrc orderby srcdta
就可以看到结果发生了变化,源代码重新排列了:
早在2000年,微软也提出过一个雄心勃勃的WinFS(Windows Future Storage)项目,试图把将不同类型的数据(文档、联系人、图片、邮件等)进行标准化管理。
WinFS的想法是将文件的元数据存储在关系数据库中,这样文件可以通过复杂的查询(类似 SQL)快速定位。例如,一个图片文件的元数据包括拍摄时间、地点、相机类型等,可以通过这些元数据迅速进行筛选和排序,找出某个时间的所有照片。
另外,通过数据库的关系建模,WinFS 能够直观地管理文件之间的关联。例如,联系人可以直接链接到与其相关的邮件、图片和事件。
尽管 WinFS 的概念很有前瞻性,但是将文件系统与数据库深度整合技术难度高,特别是要保证性能和兼容性,WinFS进展缓慢,最终与2006年取消。
无论是AS/400还是WinFS,虽然使用了关系数据库,但它们还都是操作系统的一部分。
扎哈里亚和斯通布雷克则完全把数据库挪到了操作系统的下层,操作系统是基于数据库构建的。
其基本思想是,在微内核中运行一个多节点多核、事务性、高可用的分布式数据库,然后在数据库之上实现调度、消息传递、文件系统和其他操作系统服务。
第一层是微内核,主要实现内存管理,中断处理,驱动等。
第二层是一个高性能的、多节点的分布式数据库
第三层,在DBMS上构建高级OS服务,分布式文件系统、集群调度程序和分布式进程间通信 (IPC) 子系统
第四层是用户程序,例如Spark。
第1,2,3层加起来被成为DBOS(Database-Oriented Operating System),就是“面向数据库的操作系统”。
据说当时有人想把它叫做DataSphere OS,或者HyperDataOS,但是斯通布雷克坚持采用了简单直白的“DBOS”,因为“直白的名字最能吸引人注意,就像UNIX和SQL那样”。
DBOS有两个鲜明的特点:
1.所有应用程序和操作系统的状态都存储在分布式数据库的表中
2.仅通过数据库事务来访问状态
这么做有什么好处?
首先,集群调度程序可以将有关任务和工作程序的信息存储在数据库表中,百万级别的任务状态跟踪对数据库来说就是小事儿一桩。
因为数据库支持事务(ACID),可以保证对任务状态的并发访问。在发生故障时,DBOS也能保证一致性和持久性,可以轻松从中断处继续运行。
其次,使用强大的数据库日志功能,可以追踪对应用程序状态的访问,简化应用程序的分析、监控、调试和保护。
DBOS还有多种安全优势,包括“攻击面更小、漏洞更少”,从严重的错误或攻击中恢复可能很简单,只需将数据库回滚到以前的状态即可。
斯通布雷克认为,有了DBOS,“生活就简单多了,你可以省去 Linux、Kubernetes 和其他一些必需品。”
举个简单的例子,DBOS支持工作流,假设你有这么一个需求:需要发送一封确认邮件,等待一段时间,然后再发一封提醒邮件:
@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可以保证即使休眠时间长达数周或数月,即使程序崩溃或重启多次,提醒电子邮件也始终会按时发送(并且确认电子邮件永远不会重新发送)。
这就是数据库把所有状态都管理起来的威力,它就极大地简化了程序员的工作。
2001年,Oracle CEO 拉里·埃里森说过:中间件是一个愚蠢的想法,一切都应该交给数据库来管理。
20多年过去了,DBOS真的把这些活儿交给数据库来干了。
但是很明显,DBOS不是Windows,Linux这样的单机操作系统,更不是让普通消费者来使用的。
DBOS面向的是云计算,它也许是未来的云计算的操作系统。
中国人老是喜欢说弯道超车,如果DBOS真的搞成了,那才是真正的弯道超车,美国人的创新能力确实是强,不承认不行。还有一个对国内某些厂商非常不利的消息,不像PostgreSQL,DBOS不是完全开源的,它们没法“自研”,然后再弯道超车了。
参考资料:
全文完,觉得不错的话点个赞或者在看吧!
来自:码农翻身
本文作者刘欣,著有畅销书《码农翻身》,《半小时漫画计算机》,前IBM架构师,领导过多个企业应用架构设计和开发工作;洞察技术本质,擅长用故事去讲解复杂技术。