前言
- 软件性能大多限制于数据库
- Spark任务非常小,用进程/线程来管理并不合适,太重了,并且进程线程的调度是单机的,DataBricks需要跨越多个计算机调度
- 因为Linux是个单机的操作系统,但是如今的计算都是分布式的,所以必须有k8s这样的软件来管理应·用数据、身份验证系统、消息传递、集群管理…..
- 但是Linux太老了,而Kubernetes 太复杂
- 于是扎哈里亚和斯通布雷克要设计了一个数据库来取代它们
- 既然受限于操作系统,干脆反过来,在数据库上搞一个操作系统
DBOS
思想架构
-
扎哈里亚和斯通布雷克则完全把数据库挪到了操作系统的下层,操作系统是基于数据库构建的。
-
其基本思想是,在微内核中运行一个多节点多核、事务性、高可用的分布式数据库,然后在数据库之上实现调度、消息传递、文件系统和其他操作系统服务。
-
第一层是微内核,主要实现内存管理,中断处理,驱动等。
-
第二层是一个高性能的、多节点的分布式数据库
-
第三层,在DBMS上构建高级OS服务,分布式文件系统、集群调度程序和分布式进程间通信 (IPC) 子系统
-
第四层是用户程序,例如Spark。
-
第1,2,3层加起来被成为DBOS(Database-Oriented Operating System),就是“面向数据库的操作系统”。
-
据说当时有人想把它叫做DataSphere OS,或者HyperDataOS,但是斯通布雷克坚持采用了简单直白的“DBOS”,因为“直白的名字最能吸引人注意,就像UNIX和SQL那样”。
作用
-
DBOS有两个鲜明的特点:
-
所有应用程序和操作系统的状态都存储在分布式数据库的表中
-
所有应用程序和操作系统的状态都存储在分布式数据库的表中
-
-
首先,集群调度程序可以将有关任务和工作程序的信息存储在数据库表中,百万级别的任务状态跟踪对数据库来说就是小事儿一桩
-
因为数据库支持事务(ACID),可以保证对任务状态的并发访问。在发生故障时,DBOS也能保证一致性和持久性,可以轻松从中断处继续运行。
-
其次,使用强大的数据库日志功能,可以追踪对应用程序状态的访问,简化应用程序的分析、监控、调试和保护。
-
DBOS还有多种安全优势,包括“攻击面更小、漏洞更少”,从严重的错误或攻击中恢复可能很简单,只需将数据库回滚到以前的状态即可。
-
举个简单的例子,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面向的是云计算,它也许是未来的云计算的操作系统。