基本架构
Postgrest是Supabase软件架构中的核心组件,是Supabase采用的所有开源组件中历史最悠久的一个,2014年就发布了第一个版本,到今天已经有9年的历史了。在Supabase出现之前,Postgrest已经被广泛应用于各种场景,是一个非常便捷的PostgreSQL应用开发中间件。
Postgrest架构非常简洁,全部使用Haskell开发,采用Haskell的Warp作为HTTP Server,Haskell的Hasql作为数据库连接池。除了深度依赖PostgreSQL数据库外,没有引入其他外部依赖,一个单体应用就可以完成部署。Postgrest是无状态的,因此支持增加更多的节点来实现横向扩展。
下面是Postgrest的架构图:
Postgrest是用Haskell编写的,是比较冷门的编程语言,这也是目前制约Postgrest发展的最主要的因素,要找到合适的维护人员比较困难。甚至因为这个原因,出现了一个使用Golang开发的prest(https://github.com/prest/prest)项目。
Postgrest使用Haskell的Warp作为其HTTP Server,Warp是一个高性能的web server,这里有一个很古老的性能对比文章(https://www.yesodweb.com/blog/2011/03/preliminary-warp-cross-language-benchmarks),展示了Warp在相同硬件下处理http请求的性能对比,从数值上来看,还是非常厉害的:
Hasql是Haskell的数据库连接池。众所周知,到目前为止(Postgres 16),PostgreSQL的连接是多进程模型,每个数据库连接都会启动一个pg进程,消耗一定数量的CPU和内存资源,因此PostgreSQL的连接数通常都是需要进行限制的。对于高并发的Web应用场景,就需要采用数据库连接池的方案,来复用数据库连接。
PostgREST核心解决哪些问题
对于大多数Web应用程序,通常就是前端 + 后端 + 数据库的模式,而后端的主要工作就是对数据库进行CRUD,久而久之,开发者就不禁会想,对于这种业务场景,能不能直接在前端对数据库进行CRUD操作呢?这就是PostgREST的核心出发点。为了解决这个核心需求,衍生出来的一些其他的基本需求,包括用户认证授权、高并发等,因此PostgREST提供了如下一些内置的能力:
-
用户认证授权
</