几年前,我被要求参加一个会议的小组会议。观众提出的一个问题是我们认为“下一件大事可能是什么”。 panel大部分都在谈软件,毕竟是软件大会,大家都是软件人。我记得人们在谈论函数式编程和将 Lambdas 添加到 Java 等等。
当时惠普宣布他们破解了忆阻器后不久,我的回答是“大规模、非易失性 RAM”。
如果您像我一样是一名程序员,那么这听起来可能不像函数式编程或 Java 中的 Lambda 那样性感,但让我来说明一下……
从数字时代开始,内存相对较差的性能就一直是我们设计系统的基本限制。
我们计算机系统的一个基本组成部分,因为帮助我们赢得第二次世界大战的布莱切利公园的秘密计算机是 DRAM。 DRAM 中的“D”代表动态。这意味着这种内存是泄漏的。它会忘记,除非它被动态刷新。
Bletchley Park 的计算机有一大堆电容器,代表系统的工作记忆,这是用纸带刷新的。从那以后,这几乎就是计算的模式。我们有一个相对较小的 DRAM 工作存储,由更大、更便宜、更耐用的某种非易失性存储器存储支持。
除了易失性 DRAM 和非易失性后备存储之间的这种划分之外,还一直存在很大的性能差距。
处理器速度快,存储空间小,DRAM 速度慢但存储更多,闪存非常慢但存储很多,磁盘更慢,但确实很大!
现在想象一下,我们在硬件游戏中出色的同事想出了一些开始模糊这些分歧的东西。如果我们拥有快速且非易失性的巨大内存会怎样?
暂停片刻,想想这对您设计软件的方式可能意味着什么。我认为这将是革命性的。如果您可以将所有数据存储在内存中,而不用费心将其存储在磁盘、SSD 或 SAN 上,会怎样? “承诺”或“节省”的想法是否仍然有意义?好吧,也许他们会,但他们肯定会更抽象。在许多问题领域,我认为“节省”的想法会消失。
现代 DRAM 需要提供电流来保持电容器充电,电容器代表我们程序和数据中的位。因此,当您在晚上关闭计算机时,它会忘记一切。现代消费者操作系统会做一些聪明的事情,比如实现复杂的“睡眠”模式,这样当您关闭时,DRAM 的内存状态就会写入磁盘或 SSD。如果我们拥有神奇的、海量的、非易失性存储,那么我们只需关闭电源,我们的记忆状态就会保持不变。至少在这方面可以简化操作系统,并实现真正的“即时启动”。
如果我们的软件系统被设计为在具有这种内存的计算机上运行,它们会是什么样子?也许我们最终都会创建我们在领域驱动设计中谈论的那些非常理想的“问题领域的软件模拟”?也许避免泄漏抽象会更简单,因为我们想要的业务逻辑与在 RDBMS 或列存储中存储某些东西的现实不匹配,这种情况很常见?或者我们可能只是将我们的大规模非易失性 RAM 的一部分分区,并假装它是一张光盘,继续构建基于 3 层体系结构的糟糕系统并完全在内存中运行它们?
我认为这很有趣。我认为它可以更好地改变我们思考软件设计的方式。
我为什么要谈论这个假设的未来?好吧, 英特尔和美光刚刚发布了 3D XPoint 内存 。这几乎就是我刚才描述的全部内容。它比传统内存 (DRAM) 密度高 10 倍,比 NAND(闪存)快 1000 倍。它的耐用性也比会磨损的 NAND 高 1000 倍。
这还不是我所说的 DRAM 替代品。这是因为虽然这种内存比 DRAM 密度高得多,比 NAND 快得多,但它仍然比 DRAM 慢得多,但差距正在缩小。如果相信营销规格,那么新的 3D XPoint 内存比 DRAM 慢大约 10 倍,而耐用性大约是 DRAM 的一半。在硬件性能方面,这真的相差不远。
我认为性能足以取代 DRAM 的大规模非易失性 RAM 即将到来。它可能还需要几年时间,但当它到来时,我认为它将引起软件设计的一场革命。我们将在如何设计事物方面拥有更大的灵活性。我们将不得不明确地决定近年来我们认为理所当然的事情,我们将有一套全新的课程要学习。