实践

与Margo Seltzer和Mike Olson的谈话


Margo Seltzer和Mike Olson

信用:哈佛,CMS线

回到顶部

Kirk McKusick坐下来与Margo Seltzer和Mike Olson一起讨论伯克利DB的历史,他们在2021年获得了ACM软件系统奖。McKusick已经作为BSD和FreeBSD开发商花了他的职业生涯。Margo Seltzer花了她的职业生涯作为计算机科学教授,作为数据库软件公司的企业家。Mike Olson作为软件开发人员开始职业生涯,后来开始并管理了几家开源软件公司。Berkeley DB是一种生产质量,可扩展,NoSQL,用于嵌入事务数据管理的开源平台。

Kirk Mckusick.:Berkeley DB在伯克利计算机系统研究小组的加利福尼亚大学出来,创建一个版本的UNIX,由AT&T的UNIX原始版本的所有权。为此,我们需要一个新内核,而不使用任何AT&T代码。我们还需要操作系统附带的所有应用程序和库。

我的同事们在伯克利BSD项目,Mike Karels,我负责获得清洁的内核版本 - 这是另一个故事!但基思Bastic接受了完成所有应用程序和图书馆的任务。他为大部分工作征求志愿者。我知道他和你在一起。你为什么不开始那里的故事?

Margo Seltzer.:这始于标准的愚蠢高级学生伎俩。我在伯克利拍摄了Mike StoneBraker的研究生课程,我以为Litwin的可扩展线性散列1真的很酷。Keith [Bostic],认识到“愚蠢的高级学生综合症”说,“嘿,你想如何实施它?我需要替代NDBM,DBM和HSearch。”我无辜地说,“当然!”

他向我介绍了那些已经写过GDBM的ozan yigit,这是一个特别是NDBM的替代品。我们一起集成并讨论了一个有一个哈希包的方法,可以支持持久性(n)dbm,以及内存的HSearch替换。这成为已知的,巧妙地,哈希。

然后,Keith的Ulidorioricive踢了一下,这就是他真的想要一个他可以在替代六的唱片包装,因为vi是另一个需要被重写的大量媒体。他在他的脑海里,他希望在它下面的唱片经理。

这需要一个接口,即通过记录号访问记录 - 即“我想要第59行”返回数据库中的第59行,其目的是文本文件。他看过Heidi Stettner的StoneBraker纸,展示了如何在B树上实现该唱片号码的界面。3.

那就是迈克出现的时候。

迈克奥尔森:我此刻是Margo的官员。我们都是石奖学生。我在Postgres项目中,我负责一堆存储代码,包括B树。

我已经在我生命中写了两到三次的B-Tree实现,所以当Keith开始用这个项目纠缠我,我拒绝了。我一遍又一遍地写了B树,似乎再次这样做是毫无意义的工作。

当时,我正在召开一个漂亮的星期五下午的下午学习小组为研究小组,这是代码,“让我们走到当地的酿酒厂并扔掉一些品脱。”基思开始崩溃那些,真正靠在我身边。

最后,要闭上他,我同意我会编写B树代码。从Margo正在做哈希,我们是一支球队。

我还有一个难题的动机:我打算用伯克利DB B-Tree代码替换Postgres的B树代码,这是清洁的,更好。我从来没有到过那样的工作。对此感到抱歉,因为我认为Postgres代码也是一个改进。

McKusick.:所以,你们两个编码了一个清洁的NDBM版本,没有AT&T代码。已添加到伯克利软件分发中。今天基本上是Berkeley DB吗?

Seltzer.:有另一章。在我去研究生学校之前倒退。我在一家名为SemoIa系统的公司工作,我们正在建立一个交易存储系统来支持COBOL计划。

我们设计了我们所谓的SemoIa的交易导向的记录经理,否则被称为风暴。我们开始建立它,但从未完成过它。我的老板和我都离开了公司。所以,在我的脑海里,我一直有这个想法,你可以建立一个面向事务的唱片经理。

作为另一个方面的项目,我以某种方式说服了迈克,一旦他建造了B树,我们应该使它成为交易。我们可以采取哈希和B树代码,将它们放在一个共同的API下,并具有这种很酷的事务性。

这成为libtp,这是迈克和我写道的另一篇论文。2

McKusick.:BSD版本的Libtp部分也是如此?你发了该代码吗?

Seltzer.:不,libtp代码是我喜欢称为“研究生学生代码”。基思从未将其提升到生产代码质量。

McKusick.:没问题,现在您拥有支持事务的此毕业生代码,以及使用BSD的其他代码运输。这两个线程如何编织在一起?

奥尔森:让我给一点背景。Margo和Keith几乎在该软件上完成了所有工作,从1992年开始,并继续进入20世纪90年代后期。DB 1.85图书馆Berkeley DB,通过Berkeley Unix全球发货。它在大量的项目中使用。

特别是,密歇根大学的一群研究人员建立了一个LDAP(轻量级目录访问协议)引擎,以以真正快速的方式通过网络查找记录。这最终成为开放式LDAP,这是今天很多身份验证系统的关键部分。他们使用Berkeley DB,他们做得非常好,除了DB 1.85代码不支持交易。

上帝禁止两个人应该同时做某事,或者你的电脑应该在更新的中间下降 - 你的数据库可能被损坏。

Netscape(公司)希望一个目录服务器作为其产品线的一部分。它聘请了密歇根州整个大学队进入了公司,以沿着代码带来并完成工作。

我当时不在身边。我会让Margo从那里告诉它。

Seltzer.:LDAP人们已经看到了libtp纸张,他们去寻找代码。他们联系了Keith和我,问,“嘿,我们正在使用DB 1.85;我们看到了这个libtp。代码在哪里?”

我们说,“Uhhhhh,毕业生代码;你真的不想用它来生产。”他们说,“好吧,让Libtp代码真实需要什么?”

基思和我一直在谈论建设生产质量的交易图书馆一段时间。我们知道这将是一个公平的工作,我们有一天的工作。Netscape说:“好吧,你知道,我们为此付钱。”

基思和我想,“那是小说。谁会想到这一点?”

我们设法与Netscape进行了处理,使我们建立了生产事务版,Netscape会为我们支付我们,但我们将保留向其他人销售权的权利。

我们决定我们想做这项工作,如果我们所做的一切都是为Netscape建造它 - 他们对它感到满意 - 这没关系。

但是一旦我们建造它,我们就会想到我们会挂出瓦片。在那一点意味着建立一个网站并看到发生了什么。

发生了很多组织的发生了什么,拿起UMICH LDAP服务器。我们的第一代客户都是拿起那个LDAP服务器并想要交易的人。

这就是睡觉的是如何形成的。我们正在与Netscape进行这笔处理,我们想确保我们没有,非常简单,“赌房子。”我们叫律师,他说,“组成了公司。”

奥尔森:关键情节点:在所有这些中,基思和玛利结婚了。所以,他们拥有一个他们想要保护的房子。

我喜欢这个故事。我一直认为这是一个梦幻般的柔道搬到了你们两个人。基本上,Netscape为公司提供了种子资金。这让我们在不接受任何外部投资的情况下创建业务。Netscape的钱是获得了原创产品的种子资金。这不是雇用的工作。基思和玛利仍然拥有知识产权。

这意味着我们不依赖于砂山公路风险资本为整个业务的生命。

McKusick.:睡觉的名字来自哪里?

Seltzer.:我们打电话给律师说,“嘿,我们需要开始一家公司,”律师说:“好吧,你需要一个名字。”幸运的是,当他低头看着Keith的膝盖时,有一只猫睡觉。

我们认为这是与命名蜘蛛厂软件的相同算法,但它们抬头而不是向下。

奥尔森:我从1993年到1998年做了其他事情。老实说,我忘记了在我退出悲惨工作后让Margo提醒我的Libtp工作。

当我加入Sleepycat时,我的第一个提议是我们重播公司。我的两位同事们都听起来很挑剔。

McKusick.:Sleepycat使用了伯克利DB的“双重许可”的东西。带我们通过它。

Seltzer.:Keith从一天开始,我们必须保持开源许可证,因为人们已经开始使用它,我们不会转向他们的背部。

为了完美钝,基思花了大约一段时间的工作,可以在适用于FSF(自由软件基础)的双重许可证,特别是对于Glibc来说,因为新的Glibc正在使用Berkeley DB。我们不想失去那条分销,因为这给了我们数百万座位。

因此,它基本上是基本上的基本上,FSF弄清楚了一个允许我们建立业务并赚取收入的许可证,并允许我们在大量其他项目中继续作为基础设施。

奥尔森:我认为这是一个令人印象深刻的智力壮举。双重许可,至少是开源双重许可,由基思Bostic发明。自从选择使用该技术可以通过该技术批准开源软件。

在我们做之前,没有人这样做是为了我的知识。

例如,我们努力留在Debian软件分销的好的方面,例如,与所有分布的FSF最紧密地对齐。这意味着我们的软件可供整个星球使用。所有的UNIX和Linux都捆绑在一起。我们从任何不想制作其软件开源的供应商都有一个很好的收入来源;它可以简单地支付我们使用IP(知识产权)的专有许可证,因为Sleepycat拥有IP,所以我们可以用这些方式许可。

McKusick.:它是如何工作的?什么是双重许可,究竟是什么?

奥尔森:这是一个非常短的许可证,但它与GPL(GNU通用公共许可证相同的病毒。只要您在开源许可证下提供您的源代码,我们的软件可以使用。如果您不想开源您自己的代码,您可以来悬挂yexycat并为我们支付不同的许可证 - 允许您将软件作为专有产品的一部分分发。

我们没有单独的产品用于支付客户 - 没有特殊功能,没有早期访问。我们刚刚更改了您使用我们的产品的条款:无需在开源中使用;在封闭源产品中使用所需的费用。

我们有一个非常好的业务。我们有很多客户。Netscape开始了我们,但后来有太阳微系统和许多其他人。

McKusick.:这种采用是如何发生的?

Seltzer.:Netscape使用Berkeley DB 1.85仅适用于其浏览器书签。没有交易,没有大问题。你知道,你失去了一些书签 - 可能不是世界的尽头。

但是,还有公司使用DB 1.85来管理信用卡数据,害怕我们的生活日光。那些是真正的upsell潜力的人。

McKusick.:Berkeley DB是开放的来源,Sleepycat在2000年代初通过Dot-Com Bust提供了一个开源公司。那是什么样的?

奥尔森:我于1998年加入公司.Margo和Keith在他们的客厅里的服务器上运行了一个非常好的企业,从下载软件的人,但他们正在努力工作。Margo招募了我作为第一个全职员工,但他们一直在运行公司,有点喧嚣,很长一段时间。

当时市场上有许多有嵌入式数据库的Dinky Little公司。你让他们捆绑着一堆操作系统。人们使用FileMaker Pro和ISAM(索引顺序访问方法)和各种内容。

这些企业中的许多企业在2001年的日子里突出了一个边缘生活。当底部落后于科技市场时,他们很多都不能再筹集资金。没有投资者,他们饿死了。

由于开始业务的Netscape金钱,我们从未沉迷于风险投资。我们正在倾斜。我们从一开始就获得了盈利。现在,授予,Keith和Margo,我在1998年或1999年没有支付自己,但业务表现很好。

1999年,我们可能有13或14头头竞争对手。2002年,该号码可能是四五。很多我们的竞争对手刚刚被清理过来。

这对我们来说是奇妙的新闻。这些其他公司的所有客户都突然需要嵌入式数据库。我们有一个非常好的。

我们不仅仅是好的崩溃,而且很棒,因为我们能够接受的所有新客户。

Seltzer.:你知道,导致胸围是繁荣。每个人都在推出网站。几乎每个网站中的每一个都需要背后的数据库。

第一代Web服务器的体系结构使得支付给关系数据库系统的额外开销是太大的。对嵌入式市场的需求是由这些“网络1.0”公司驱动的。

那是Sleepycat真正做到的地方。每一代一代人的网页服务都成为后端的后端。

McKusick.:在那个破坏了一个巨大的运行网站的人会消失,所以你可能会失去一些客户。

奥尔森:肯定,我们的一些客户失业。但所有购买我们失败的竞争对手的产品所需的所有公司都需要弄清楚某种方式来替换他们失去的东西。还有更多的东西。

McKusick.:所以,你在胸围和胸围之前长大。胸围后的事情如何?伯克利DB多年来如何发展?

Seltzer.:谁知道网络将起飞?但它确实如此,人们开始假设数据不会消失。我们拥有一个伟大,可靠的单节点系统。但如果您的单个节点崩溃,那么您的服务已关闭。到了2000年代初,那不再可接受。

我们的客户开始向我们询问我们要做的事。

我们决定使用复制构建高可用性产品。这是一个单一编写的系统:所有写入都转到一个节点,但您可以根据需要具有多种只读副本。这让我们的客户扩展了他们的Web服务。

由于我们是一家工程驱动的公司,我们的客户是工程师,我们与伯克利DB顶部的人员建设应用程序非常密切相关。

vallis Newcomb在阀门软件中使用Berkeley DB作为蒸汽游戏平台的计费引擎,高端,分布式服务器应用程序。克里斯最终去了亚马逊,并将伯克利DB带到了那里,所以我们成为亚马逊发电机钥匙价值商店的第一个支持商店之一。

与此同时,Sharon Perl正在构建谷歌的账户管理基础架构,并将我们作为Google帐户背后的初始商店选择。


Margo Seltzer:我们决定使用复制构建高可用性产品。这是一个单一编写的系统:所有写入都转到一个节点,但您可以根据需要具有多种只读副本。这让我们的客户扩展了他们的Web服务。


像我们这样的主要客户与我们密切合作,以确保我们的高可用产品实际上是高度可用的。

然后我们通过多伦多证券交易所接触,该交易所希望为其分布式事务进行XA(扩展架构)界面。我们建立了一个XA框架,再次与其工程师密切合作。


Mike Olson:Berkeley DB在睡眠猫的整个寿命中稳步地改善。我们有一个很好的产品,我们非常擅长卖它。


奥尔森:我想拨出格雷格薰衣草,他刚刚在英特尔和innoSoft的人们队伍。他们很早就在他们的消息传递和目录产品中嵌入了我们。Sun Microsystems在我看来,在我的看法中购买了InnoSoft,因为太阳正在失去太多交易到Greg和Team。这将我们深入太阳的产品线。

我们的大多数客户以传统方式使用我们的产品,支付了良好的费用,并没有多少麻烦。但我们很幸运,几乎总是有六个左右的甚至拖延了我们的头发的北方,推动了艰难的可扩展性和性能和可靠性。通过与我们真正合作的那些客户,发展产品,我们已准备好在市场到达市场之前所需的市场。

Seltzer.:有两块棍子在我的头上。一个是与谷歌和亚马逊的对话,当他们说:“每天一次发生在一百万次以上发生的事情。”这是一种思考真正意味着什么的新方法。

另一部分是华尔街上的计算机化交易正在成为一件事。其中一个关键应用程序与销售订单匹配买单。华尔街上的每栋房子都需要这样做,并且他们需要超级有效地进行。几乎所有这些都在Berkeley DB的顶部建立了相同的应用程序。

我们会在客户A想要一个小功能的情况下找到自己的有趣情况,让他们能够更快地建立它。我们会弄清楚如何做到这一点,我们会发布功能A.

然后我们会去公司B,这有同样的问题;我们无法告诉他们他们的竞争对手正在使用特征A来解决问题。所以,我们会与他们集体讨论如何设计它,有时他们认识到我们刚添加的功能非常有用!其他时候,他们说,“不,不,不,我们不能这样做;我们需要别的东西。”整个华尔街客户仍将我们努力推动可扩展性和可靠性。

McKusick.:你说复制产品有一个写入点。这最终是否得到了修复?

Seltzer.:对于伯克利db的c版,它没有。我们永远留下了单一作家。但要澄清:如果作者崩溃,其中一位读者将作为作者接替,以便系统保持运行。

据我所知,C核心产品仍然是单一作家。我相信Java产品,现在是Oracle NoSQL数据库后面的发动机,支持多个作家,但我不是100%肯定。

McKusick.:复制,好的。还有什么添加到伯克利db?

Seltzer.:在2000年代初,XML都是愤怒!我们喝了一些kool-aid。我们有一些已经准备好,愿意,能够在Berkeley DB上建立XML数据库的一些人。我们采取了冲程并做到了,并且基本上存在XML数据库中的百万美元的市场。这几乎是一个完整的胸围。

但是,Java退还了。这是一个基思的想法。我们总是有一个Java API。最初,这是一个非常糟糕的Java API,所以我们聘请了一个实际上是Java程序员的人。我们有一个更好的Java API。

Keith认为我们的C存储引擎顶部的Java API是一个糟糕的技术匹配,他完全正确。他认为我们真的需要建立一个本土Java产品。

Linda Lee和Charlie Lamb船上了建造这个本土Java产品。我们认为会有一个大市场,但该市场在收购之前没有实现。

在课后,在Oracle内部,Java团队已继续成为Oracle NoSQL团队和Oracle NoSQL云团队。Berkeley DB Java Edition将继续到达Oracle Cloud NoSQL数据库下面的引擎。

McKusick.:嗯,很好地将我们带入Oracle收购。

奥尔森:Berkeley DB在睡眠猫的整个寿命中稳步地改善。我们有一个很好的产品,我们非常擅长卖它。

这是一个很好的小企业。每年我们都会采取我们的利润,并将其作为我们所有制股权的股息,以及我们的员工作为他们在建立产品,赢得客户的伟大工作中的利润分享,并使他们快乐。

每个人都喜欢这个!这款硅谷不屑于“生活方式企业”,但每年都有一大堆现金击中您的银行账户是一个非常好的生活方式。

Seltzer.:它也创造了一个非常不同的心态。由于公司的每个人都在公司所取得的每一美元的利润所获得的,因此员工就像自己的钱一样对待公司资金。您没有看到我们的销售团队花费荒谬金额或承诺为工程无法提供的功能。

奥尔森:我们一直支付自己的股息,并在一年同期持续30%的股息。这是一个坚实的表现,但我们担心我们在美国市场的存在下维持这种增长的能力。扩展到欧洲或亚洲显然将花费更多的钱。

我们或我们的配偶都不希望从我们的银行账户回到公司的资金流程。

我们真的有两种选择:我们可以找到一个风险投资家来支持这项业务,或者我们可以直接销售公司,从事桌面的所有风险。

我们意识到风险投资将真正改变我们。不会有更多的股息 - 进入我们的银行账户愚蠢。我们是根据我们的工程品味的自由推动战略的人。我们不会以与传统风险资本家称呼董事会拍摄的传统风险资本家相同的方式。

留下了两个选项二:卖掉公司。我们聘请了一家投资银行,他们让我们一群会议。转身曲柄产生了一些有关方面,其中最感兴趣的是甲骨文。

我遗漏了大量的细节,但我们在2006年谈判收购并宣布了情人节的交易。睡觉队的一部分很好的部分仍然是甲骨文。

Seltzer.:有趣的是,由Michael Cahill和Keith Bostic的左侧左右,左右左右,左右左右,左右左右形成了公司WireTtiger,自1990年以来建立一个新的存储引擎,反映了硬件变化。发动机也是开源。它目前是MongoDB的底层存储引擎,是分布式NoSQL数据库空间中的主要参与者,包括其图表云服务。

McKusick.:从睡觉到Wiredtiger!那太棒了。

奥尔森:在Cloudera,我留下了甲骨文后的公司,我们也聘请了来自原始Sleepycat团队的几个人。睡觉的经历创造了一个非常紧密的船员。

McKusick.:据点,Berkeley DB仍在开源世界中。

Seltzer.:无论好坏,Berkeley DB继续是开源的。我说“更好或更糟”的原因是,每个想要展示他们的数据库的速度有多快,建立一个2020技术,然后将其与Berkeley DB进行比较,这是为非常不同的硬件构建的。然后,它们将其从盒子中运行,这是专为微小的嵌入式环境而设计并具有显微镜缓存。

因此,它们在64-gigabyte服务器上运行它,给系统60千兆字节的缓存,并为伯克利DB 64千字节的缓存。然后他们说,“哇,我们真的很快!”

奥尔森:我想谈谈软件背后的哲学。

UNIX哲学是建立丰富的可组合工具。我们希望Berkeley DB严格遵守这种哲学。我们不希望用一大堆功能和功能困扰它,这些功能并不是其使命中的核心:可靠地存储应用程序的数据。

我们曾经一直喊叫,因为我们没有SQL接口。我们的观点是,世界上有很多良好的SQL接口,包括一个在MySQL,你可以在伯克利DB上移植。我们是当天回到MySQL的桌面管理器。任何想要添加这些功能的人都可以采取我们精心制作的高性能发动机,并添加他们喜欢的任何东西。我们不想妨碍核心库。

我们有一个特殊的技术团队。我们的两个创始人,基思和Margo是世界一流的工程师。Keith的我最喜欢的引号是,在每个版本的软件中,他都希望删除比他添加的更多代码行。这并没有真正发生,但这种无情地关注简化和精简受益伯克利DB。

Oracle继续开发C和Java版本,两者都可以作为开源提供。直到我在2019年退休,我在邮寄名单上,我收到了每一个新版本的公告。Oracle最终添加了SQL。

McKusick.:我们也看到了在BSD世界中。我们尝试删除或重新推荐大量代码以保持整体尺寸下降。同时,Linux基金会吹捧了它为Linux增加了一年增加了一百万行的代码。

奥尔森:你知道旧的说法:这么简单,显然没有错误,否则没有明显的错误。

Seltzer.: 正确的。

McKusick.:任何结论备注吗?

奥尔森:我非常自豪,我们赢得了ACM软件系统奖,我为伯克利DB团队获得了早期的ACM Sigmod系统奖。这是30年前创建的软件工件仍然处于广泛使用,并与Berkeley DB一样有影响力。

这是一个很棒的项目。Sleepycat是我曾经工作过的最好的公司之一。和朋友在一起很有趣。很高兴为我们懂得理解的观众。我觉得我们做了很多有趣和创新的事情。

回到顶部

参考

1.Seltzer,M.和Olson,M. Libtp:UNIX的便携式,模块化交易(1992年1月);https://dsf.berkeley.edu/papers/erl-m92-02.pdf.

2. StoneBraker,M.,Stettner,H.,Lynn,N.,Kalash,J.和Guttman,A.在关系数据库系统中的文档处理。(1983年4月);https://dl.acm.org/doi/10.1145/357431.357433

3. Litwin,W.线性散列:文件和表散列的新工具。在1988年律师的诉讼程序。Conf。非常大的数据库;https://dl.acm.org/doi/10.5555/48751.48788


作者/业主持有的版权。
请求权限(重新)从业主/作者发布

数字图书馆由Computing Machinery协会发布。版权所有©2022 ACM,Inc。


没有发现任何条目

登入完全访问
“ 忘记密码? »创建ACM Web帐户
文章内容:
Baidu
map