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,完善其功能。
