返回

文章详情

如何每天发送数据库

Hacker News2026年8月17日 13:56

2026年8月14日 • Tarun Pothulapati(工程师)每天,turbopuffer的客户都会提出需求:新的查询计划、新的API、新的索引结构。对此,我们每天在集群中部署数十个数据库升级,许多都是在我们打开PR的同一天发出的。快速交付是让每位客户都感觉自己是唯一客户的方式。我们不想限制你使用turbopuffer的地点,因此我们支持三种部署模型下的多个区域:公共SaaS、单租户SaaS和BYOC。总的来说,我们运营着超过100个集群,是6个月前的两倍,并且随着我们增加更多公共区域和更多BYOC部署而持续增长。 ╔═ turbopuffer云账户 ═════════════════════╗ ╔═ 客户云账户 ═══╗ ║ ║░ ║ ║░ ║ ┏━ 公共 ━━━━━━━━━━┓ ┏━ 单租户 ━━━━━┓ ║░ ║ ┏━ BYOC ━━━━━━━━━━━━━━━┓ ║░ ║ ┃ AWS | GCP ┃ ┃ AWS | GCP ┃ ║░ ║ ┃ AWS | GCP | Azure ┃ ║░ ║ ┃ 共享资源 ┃ ┃ 专用资源 ┃ ║░ ║ ┃ 客户的资源 ┃ ║░ ║ ┃ ┃ ┃ ┃ ║░ ║ ┃ ┃ ║░ ║ ┃ tpuf操作员 ┃ ┃ tpuf操作员 ┃ ║░ ║ ┃ 无tpuf操作员 ┃ ║░ ║ ┃ 访问 ┃ ┃ 访问 ┃ ║░ ║ ┃ 访问 ┃ ║░ ║ ┗━━━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━━━━━┛ ║░ ║ ┗━━━━━━━━━━━━━━━━━━━━━━┛ ║░ ║ ║░ ║ ║░ ╚═════════════════════════════════════════════════╝░ ╚════════════════════════════╝░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ╔═ tpuf账户 ═══════════╗ ║ ┏ 公共 ━━━━━━━━━━━━━━┓ ║ ║ ┃ AWS | GCP ┃ ║ ║ ┃ 共享资源 ┃ ║ ║ ┃ tpuf操作员访问 ┃ ║ ║ ┗━━━━━━━━━━━━━━━━━━━━━━┛ ║ ║ ┏ 单租户 ━━━━━━━┓ ║ ║ ┃ AWS | GCP ┃ ║ ║ ┃ 专用资源 ┃ ║ ║ ┃ tpuf操作员访问 ┃ ║ ║ ┗━━━━━━━━━━━━━━━━━━━━━━┛ ║ ╚══════════════════════════╝ ╔═ 客户账户 ═══════╗ ║ ┏ BYOC ━━━━━━━━━━━━━━━━┓ ║░ ║ ┃ AWS|GCP|Azure ┃ ║░ ║ ┃ 客户的资源 ┃ ║░ ║ ┃ 无tpuf操作员 ┃ ║░ ║ ┃ 访问 ┃ ║░ ║ ┗━━━━━━━━━━━━━━━━━━━━━━┛ ║░ ╚══════════════════════════╝░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ BYOC的问题 BYOC集群位于我们客户的云账户内部,而我们默认不持有任何凭据。我们不能直接SSH或使用kubectl。有些BYOC供应商通过要求客户划出一个专用云账户并授予供应商持久的管理员凭据来解决这个问题。这保持了客户云账户的其他部分隔离,但每个专用账户都会产生安全监控+合规性+账单的开销,这通常是我们希望避免的。我们不希望BYOC和SaaS有不同的控制平面,因此我们必须设计适应最低公分母。我们必须能够在不进入集群的情况下操作每个集群。你如何操作一个无法触摸的数据库集群?这一切的唯一方法是我们需要对集群执行的每个操作都能在没有我们介入的情况下运行。集群必须能够独立地将其操作驱动到终态,即使它失去了与中央控制平面的连接。解决方案是标准的Kubernetes技术。在每个集群上,我们运行一个本地集群代理,实施一个简单的状态机。一个叫做TurbopufferOperation的Kubernetes自定义资源定义(CRD)表达每种操作,包括升级到整理。一个Kubernetes控制器通过协调循环将每个自定义资源(CR)从状态推进到状态,直到达到终态。操作默认会自动推进,但BYOC客户可以在批准或维护窗口上对操作进行限制。这些作为等待状态烘焙进CRD,在批准被给予或窗口打开时推进。 ╔═ 操作生命周期 ═══════════════════════════════════════════╗ ║ ║░ ║ ║░ ║ ┏━━━━━━━━━━━━━━━━━━━┓ ║░ ║ ┃ 需要批准 ┃ ┃░░░ ▒▒▒▒▒▒▒▒▒ ┃ ┗━━━━━━━━┯━━━━━━━━━━┛ ║░ ║ │批准(自动或手动)║░ ║▼ ╔══════════════════════════════════ ╚═════════════════════════════════════════════════════════════════╝░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 操作生命周期 ╔═ 操作生命周期 ════╗ ║ ┏━━━━━━━━━━━━━━━━━━━━━━┓ ║░ ║ ┃ 需要批准 ┃ ║░ ║ ┗━━━━━━━━━━━┯━━━━━━━━━━┛ ║░ ║ ▼ 批准 ║░ ║ ┏━━━━━━━━━━━━━━━━━━━━━━┓ ║░ ║ ┃ 等待中 ┃ ║░ ║ ┗━━━━━━━━━━━┯━━━━━━━━━━┛ ║░ ║ ▼ 启动(start()) ║░ ║ ┏━━━━━━━━━━━━━━━━━━━━━━┓ ║░ ║ ┃ 运行中 ┃ ║░ ║ ┗━━━━┯━━━━━━━━━━━┯━━━━━┛ ║░ ║ ▼ 轮询(poll()) ▼ ║░ ║ ┏━━━━━━━━━┓ ┏━━━━━━━━━┓ ║░ ║ ┃ 成功 ┃ ┃ 失败 ┃ ║░ ║ ┗━━━━━━━━━┛ ┗━━━━━━━━━┛ ║░ ╚══════════════════════════╝░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 关键是定义足够通用的状态模型来适应各种操作类型,包括现有和未来的,但又足够有限,使得协调者总能将其驱动向终态。我们从不......

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡