Cloudflare无服务器服务Workers现在支持关系型数据库

Cloudflare宣布在其无服务器运算服务Workers,加入关系型数据库的支持,来完善Cloudflare所提供的存储解决方案。因此用户现在也可以将应用程序搬迁到Workers上,并且处理存储于包括Postgres和MySQL关系型数据库中的资料。

过去Cloudflare已经提供多种存储解决方案,包括Workers KV、R2和Durable Objects,另外,Cloudflare也和Fauna、MongoDB和Prisma等第三方存储解决方案合作,供用户使用全球可大规模扩展的存储服务,但官方提到,存储解决方案还缺一大块拼图,便是关系型数据库。

而之所以Cloudflare迟迟尚未提供关系型数据库支持,官方解释,无服务器数据库连接不是一件简单的工作,并非简单地传递字符串给数据库驱动程序就能完成,有许多障碍需要克服。Workers存在限制,并无法简单地连接到数据库,应用程序与数据库的连接通常需要TCP连接,因为两者间的连接被假设为长期连接,但是Workers Runtime并不支持TCP连接,因此只能支持基于HTTP的数据库和代理。

光是创建连接也还不够,开发人员使用数据库客户端函数库,来简化查询提交,还有管理回应的过程,由于Workers Runtime并不完全兼容Node.js,因此Workers要支持关系型数据库,Cloudflare还要推出自己的数据库函数库,或是找一个未使用不受支持函数库的数据库。另外,考量数据库的敏感性,通常需要使用外部函数库,来共享应用程序服务器和数据库间的连接,因为创建这些连接的成本往往很高。

Cloudflare现在一一克服了这些问题,首先Cloudflare利用现有的基础设施,创建一个由Cloudflare到用户私人网络基础设施的安全信道,并且利用WebSockets,支持代理HTTP成TCP,官方解释他们的做法,通过提供与现有函数库兼容的Socket接口,并将读写操作重定向Websocket。

Cloudflare提到,这个方法快速且安全,但缺点在于他们无法控制最终连接的目的地,虽然该问题不难解决,但是在这之前,Cloudflare还需要改进延迟以及性能上的问题。Cloudflare也创建了一个垫片层,调整热门Runtime中的Socket API,使其能利用WebSocket直接连接到数据库,如此Cloudflare便能够按照原样捆绑程序代码,不需要额外分叉或是以其他方式大改数据库函数库。

目前这项工作才刚开始,目的是要让用户能在构建新的应用程序,或是将原有应用程序搬迁到Workers的时候,具有处理关系型数据库资料的能力,接下来还会进行一连串改进。官方提到,他们着手更新Runtime原生支持TCP,以更好地连接数据库,而且也能够扩展Workers Runtime更广泛地处理数据库基础设施。

Cloudflare会利用当前构建代理HTTP到TCP服务,并将其以连接池服务的方式提供,并代表用户管理数据库的连接,而且Cloudflare也要使用自家网络缓存资料的能力,让用户低延迟访问全球资料。