AWS Aurora的出现让人眼前一亮,这种云原生生态的数据库产品大大简化了用户数据库使用门槛,只不过Aurora没有线下版本,因此也很难进入寻常百姓家了。前阵子我一个客户也和我讨论了Serverless Database的问题,他们企业中存在数百个规模不大,重要性也不高的系统,数据库系统的建设与运维管理一直占用了大量的企业IT资源,能不能想个办法,用Serverless Database来替代现在的云上的大量的小型MYSQL RDS实例。最好是计算可以放到k8s里,数据可以持久化到S3的。
正好前几天群里有个朋友提到Neon Database这个开源数据库,我就简单地研究了一下。
从Neon的官网上我们可以看到Neon是一个serverless的开源数据库,可以作为AWS Aurora Postgres的替代。它对PG进行了存算分离改造,将PG的存储层改造为一个分布式的集群。
经过对PG的架构进行重构后,Neon的计算单元是部署在k8s pods中的postgresql兼容SQL引擎,应用可以通过PG客户端或者PG兼容的JDBC/ODBC引擎连接计算单元来访问数据库。Neon可以为每个租户创建一个独立的数据库实例,其SQL引擎跑在K8S pods里,当有会话访问数据库实例的时候,容器被激活,向外提供服务。当一段时间内没有会话访问数据库的时候,POD会被清理,从而回收资源。Neon目前支持PG 14/PG15,与原生态的PG保持极高的兼容性,支持大量的PG插件。
Safekeeper集群:负责数据库的持久化。PostgreSQL将预写日志(WAL)流式传输到Safekeepers,Safekeepers持久地存储WAL,直到它被Pageserver处理并上传到云存储。同时WAL也可以在对象存储中持久化保存。如果Safekeeper可以把数据存储在高性能SSD上,那么数据修改可以快速落盘,实现较大并发的数据写入。
Pageserver:负责处理读取请求。为此, Pageserver将传入的 WAL 流处理为自定义存储格式,使所有page版本都易于访问。Pageserver还将数据上传到云对象存储,并按需下载数据。同时,Pageserver还承担了一个缓冲层,存储了经常会被数据库访问的较热的PAGE。
Neon 使用 S3 等云对象存储进行长期数据存储。存储的数据是静态加密的。持久化的数据和不怎么访问的数据页存储在S3中,价格低廉,容量巨大,扩展方便的对象存储为持久化数据提供了有效的存储。
在这个架构中,Safekeepers可以被认为是一个超可靠的写入缓冲区,它保存最新的数据,直到它被处理并上传到云存储。Safekeepers通过Paxos协议以确保可靠性。Pageserver还用作云存储的读缓存,提供对数据页面的快速随机访问。在这个架构中,已经消除了bgwriter,因为物理PAGE已经不需要写入,而是完全通过WAL异步回放。
目前Neon已经开放了公有云服务,并且提供免费试用,于是我在新加坡的Neon公有云免费申请了一个数据库。申请完毕后,就可以通过本地的psql客户端连上去使用了。
我在上面创建了一个测试PG表连接的DEMO。然后测试一下几个表连接的语句。
EXPLAIN ANALYZE SELECT count(*) FROM join1 j1 INNER JOIN join2 j2 ON j1.id = j2.id WHERE J1.ID>1 AND J1.ID<10;
128毫秒执行时间,性能一般,不过还不算坏。
Neon 允许以与分支代码相同的方式即时对数据进行分支。可以快速且经济高效地对数据进行分支,用于开发、测试和各种其他目的,从而提高开发人员的工作效率并优化持续集成和交付 (CI/CD) 管道。分支数据可以方便地通过云存储的复制克隆来实现。可以从当前或过去的状态创建分支。例如,您可以创建一个分支,其中包含截至当前时间点或更早时间点的所有数据。
分支与其原始数据隔离,因此您可以自由地使用它,修改它,或者在不再需要它时删除它。对分支的更改是独立的。分支及其父分支共享相同的历史记录,但在分支创建时会有所不同。对分支的写入将另存为增量。创建分支不会增加父分支上的负载或以任何方式影响它,这意味着您可以随时创建分支,而不会影响生产系统的性能。每个 Neon 项目都是使用一个名为 的主分支创建的。您创建的第一个分支是从项目的主分支分支。后续分支可以从主分支或以前创建的分支上进行。
我可以在管控台上快速创建一个分支。如果创建一个branch仅仅为了备份,可以不创建compute endpoint,否则需要创建一个compute endpoint。我创建了一个分支,就可以用它来做一些其他的应用了,比如用于测试或者研发,亦或是交给审计部门去使用。每个compute endpoint都有一个独立的pod来承载,可以作为一个独立数据库使用,系统会生成一个访问连接串。
Neon总体来说看上去不错,后续我们团队会进行本地化部署和验证。不过Neon的历史还比较短,功能也还比较简单,可靠性也欲待验证。
目前Neon对备份和灾备的支持还比较简单,数据的安全完全依靠云平台和对象存储来保障。这决定了Neon还很难承载关键性的大型应用,不过企业中的一些小型数据库应用使用还是足够的,其最大的好处是方便。
Neon是以Apache V2开源的,我们目前可以到GITHUB上去下载,项目名称为NervanaSystems/neon。整个项目是用Rust开发的,其易读性不错,作为数据库产品,性能应该也没问题。Neon使用Postgresql作为嵌入项目,目前Neon支持PG14/PG15两个版本,有兴趣的朋友可以去试试。Neon的出现,将会大大丰富PG数据库生态,以此为基础开发一个云原生数据库产品也是可行的。