内容提要
Tembo成立于2022年12月,旨在为工作负载提供优化的Postgres实例。平台由控制平面和数据平面组成,高度解耦。控制平面包括Web UI和处理CRUD请求的HTTP服务器。有限状态机用于管理Postgres实例的生命周期。平台的大部分代码使用Rust编写,包括状态机。平台使用队列在控制平面和数据平面之间缓冲任务。控制平面将CRUD事件发送到PGMQ,由数据平面的Conductor处理。控制平面接收来自数据平面的状态事件,并将其持久化到其Postgres数据库。该平台是开源的,并持续进行迭代。
延伸解读
控制平面与数据平面解耦的架构考量
Tembo 将平台划分为控制平面和数据平面,并假设一个控制平面可能对应多个数据平面,且控制平面不一定能直接访问数据平面(例如数据平面位于私有网络)。这种高度解耦的设计让控制平面可以快速迭代,而不会影响数据平面中托管的基础设施。对于需要为不同客户提供隔离环境的场景,这种架构提供了灵活性,但也要求通过队列等机制来缓冲跨平面通信。
有限状态机如何管理 Postgres 生命周期
Tembo 使用有限状态机来管理 Postgres 实例的生命周期,因为简单的 HTTP 请求验证不足以建模复杂的状态变化。状态转换由事件驱动,例如实例创建后处于 Submitted 状态,收到 Created 事件后转为 Up;Up 状态收到 Update 事件后可能转为 Configuring 或 Restarting,具体取决于扩展安装是否需要重启。无效的转换会返回错误且不改变状态。这种设计确保了状态变更的合法性,并支持多步骤操作。
队列在跨平面通信中的作用与容错
由于数据平面处理任务的时间可变(从毫秒到分钟),Tembo 在控制平面和数据平面之间引入队列来缓冲 CRUD 事件。队列让数据平面可以自主决定重试的时机和频率,并且当任一平面完全宕机时,系统不会立即失败,尽管队列会开始堆积。Tembo 基于 Postgres 实现了队列,并作为扩展 PGMQ 开源,这体现了其作为 Postgres 公司的技术选择。
状态一致性检查与闭环反馈
控制平面通过队列接收数据平面发来的状态事件,并将其持久化到控制平面的 Postgres 数据库中。同时,控制平面会进行状态一致性检查:当用户期望的状态与实际状态不一致时,会重新向数据平面发送事件;在其他情况下,则记录错误并触发告警。这种闭环机制有助于确保实例最终达到期望状态,并及时发现异常。
Q&A
Tembo平台的主要功能是什么?
Tembo平台旨在为工作负载提供优化的Postgres实例,允许用户创建实例、安装扩展并通过公共互联网连接。
Tembo的控制平面和数据平面有什么区别?
控制平面负责处理CRUD请求和用户界面,而数据平面则处理实际的Postgres实例和任务执行,二者高度解耦。
Tembo平台是用什么编程语言开发的?
Tembo平台的大部分代码是用Rust编写的,包括其有限状态机。
有限状态机在Tembo中如何管理Postgres实例的生命周期?
有限状态机通过事件驱动状态转换,管理Postgres实例的生命周期,确保状态变化的有效性和一致性。
Tembo如何处理控制平面和数据平面之间的任务?
Tembo使用队列来缓冲任务,确保在控制平面或数据平面出现故障时不会立即导致系统崩溃。
Tembo平台的开源情况如何?
Tembo平台是开源的,Kubernetes操作员和其他服务可以在Github上找到并进行探索。