Cloudflare发布无服务器存储方案Durable Objects

Cloudflare发布用于无服务器服务Workers KV的边缘存储服务Durable Objects,使无服务器应用程序能够存储状态,客户端也能够协调沟通,让开发者能够用来开发聊天室、购物车或是游戏服务器等应用,以创建真正边缘运行的分散应用程序。

Cloudflare所推出的无服务器运算服务Workers,可在网络边缘高性能执行程序代码,并且简化部署和降低成本,不过,Workers的缺点,便是无法稳定地管理状态,或是完全在边缘上,让多个客户端相互即时协调,也就是说,用户还是需要将部分应用程序,托管在其他平台上。

而Cloudflare新推出的存储服务Durable Objects,便是要来解决这个问题,除了提供无服务器存储与状态解决方案,也提供一种多客户端间协调的方法,作为补齐Workers堆栈的最后一部分,将可让整个应用程序在边缘上执行,不需要集中式服务器。

Durable Objects的Object,指的是面向对象的对象,Durable Object是一个类别的实例,该类别的方法定义了公开接口,一个对象便是一个具有私有状态的类别实例,而每个对象都拥有全局唯一识别码,该对象仅会存在一份,知道该对象ID的Worker,都能对该对象发送消息。

不过,Durable Object的对象,与JavaScript的普通对象不同,Durable Object会持久状态存储在磁盘上,每个对象的持久状态,都是该对象的私有状态,官方提到,这代表访问存储将会非常快速,且对象能够在内存中,维持一致的状态副本,并以零延迟的速度执行,在空闲时内存中的对象会被关闭,并且按需重新创建。

Durable Objects主要功能有两个,存储以及协调。每个对象都有持久的存储空间,存储会和对象在同一个位置,除了提供交易一致性之外,存储速度也非常快,官方解释,Durable Objects是将无服务器的概念,应用到存储中,他们把传统大型数据库,拆分成许多细小的逻辑单元,使得存储能够易于扩展,也减少维护负担。

在过去,每个请求都会因为负载均衡,被随机分配到一个Worker实例上,因此无法控制由特定实例接收客户端的请求,因此也无法强制要求两个客户端,与同一个Worker进行通信,所以客户端也无法通过Workers进行协调,但是有了Durable Objects之后,相关的请求可以发送给同一对象,因此客户端就能够进行协调。

对传统数据库或是有状态基础设施来说,用户通常需要考虑存储的地理位置,以便将资料存储在使用地区附近,但是在Durable Objects没有这样的问题,Cloudflare系统会根据需求,透明地自动搬移对象。官方提到,用户可以使用Durable Objects,来满足应用程序的存储需求,以文件编辑器来说,每个文件就是一个对象,而对聊天应用程序来说,每个聊天对话就是一个对象,由于对象的成本开销很小,因此可以创建数百万,甚至是数十亿个对象。

Cloudflare把Durable Objects视为低端分布式系统的低端原语,不过官方提到,目前Durable Objects还在封闭测试阶段,也还不是完整的数据库解决方案,每个对象只能看到自己的资料,要跨多个对象执行查询或是交易,应用程序需要执行一些额外的工作,他们将会持续发展Durable Objects,完善其功能。