数据库架构是否该随着公司估值一起变化?

云计算 | 公有云IaaS层行业概况分析总结+主要竞争力决定因素及估值方法探讨 原文地址 商业模式 (Business Model) 通俗点来讲,公有云IaaS层就是底层IT资源/基础设施租赁售卖这么一个模式,与传统服务器租赁的区别主要就在于是否通过“云”的方式交接给终端客户。用户在网站上点一点就可以获得计算、存储、数据库、网络(目前从占比来看主要这四个)资源。 ** 上游供应端 (supply-side) 从上游供应侧来看,IaaS供应商的数据中心主要分为自建与租用模式。从... 阅读详情

原文|The growing pains of database architecture

作者|Tim Liang, Software Engineer at Figma


2020 年,因为 Figma 不断加入新功能,筹备第二条产品线和用户不断增长导致数据库流量每年以 3x 速度增长,我们的基础设施遇到了增长瓶颈。很清楚的是,原本的基础设施无法扩展以满足新需求,我们用了单个大型 Amazon RDS 数据库来存储元数据,比如权限、文件信息和评论等,虽然可以丝滑处理大多核心协作功能,但只有一个数据库的话限制很大。尤其在高峰期,流量达到 65% 以上时,单个数据库查询量过大导致 CPU 利用率上升。随着使用接近极限,数据库延迟变得越来越不可预测,严重影响用户体验。

如果数据库完全饱和,Figma 就会停止工作。

我们离宕机还挺遥远,但作为基础设施团队,我们得主动识别并解决可扩展性问题。需要一种解决方案以减少潜在的不稳定因素,并为未来的规模铺平道路。在实施该解决方案时,性能和可靠性是首要考虑因素;我们的团队旨在构建一个可持续发展的平台,使工程师能够快速迭代 Figma 而不影响用户体验。如果说 Figma 的基础设施是道路,那我们不能关闭高速公路来进行工作。

我们从一些修复开始,先延长一下道路的生命,并为一个更完整解决方案打下基础:

  • 将数据库升级到最大实例(从 r5.12xlarge 到 r5.24xlarge),以最大化 CPU 利用率。
  • 创建多个读取副本以扩展读取流量。
  • 为新用例建立新数据库以限制原始数据库增长。
  • 添加 PgBouncer 作为连接池器来限制新增连接(已经达到上千)所产生影响。

file

我们加入了 PgBouncer 作为连接池

虽然以上措施改善了些许,但也有局限性。分析了数据库流量后,我们发现写入操作,比如收集、更新或删除数据对消耗了大量数据库利用率。此外,并非所有数据读取都可以移动到副本中,因为应用程序对复制延迟滞后的敏感度不同。因此,从读和写两个方面来看,我们仍需要给原始数据库减压。是时候摆脱渐进式变化并寻找长期解决方案了。

探索之路

首先,我们探索了水平扩展数据库的可能。Figma 使用的数据库管理系统是 Postgres,很多流行的托管解决方案并不兼容。如果我们决定使用可水平扩展的数据库,那要么找到一个兼容 Postgres 的托管解决方案,要么自托管。

迁移到 NoSQL 数据库或 Vitess (MySQL) 要复杂的双重读写迁移,特别是对于 NoSQL 来说还要进行工程浩大的应用程序端更改。如果用支持 Postgres 的 NewSQL 数据库,我们将会是云上分布式 Postgres 中的最大单集群,我们不想冒险成为第一个遇到缩放问题的客户。对于托管方案,我们能控制的比较少,因此在没有经过针对我们规模级别的压力测试就依赖它们会带来更多风险。如果不用托管方案,那就得自托管。但由于迄今为止我们一直依赖托管方案,在团队能够支持自托管所需大量培训和投入,这意味着成本,也会分散我们主要关注的可扩展性 - 这才是个生死攸关的问题。

在决定不采取水平分区的两种前进路径之后,我们决定垂直分区。这同时具有短期和长期效益:垂直分区现在可以缓解原始数据库的压力,并为以后水平划分子集提供了一条路。

我们的分区方法

在开始前,我们首先需要确定要将哪些表分区到自己的数据库中。有两个重要因素:

  • 影响:移动表应该能够解决大部分工作负载
  • 隔离性:这些表不应与其他表紧密相连

为了衡量影响,我们参考了查询的平均活跃会话(AAS),它描述了在某一时刻给定查询的活跃线程数量的平均值。我们通过以 10 毫秒间隔查询 pg_stat_activity 来计算 AAS,以识别与查询相关联的 CPU 等待,并按表名聚合信息。

每个表「隔离」的程度对于是否容易进行分区至关重要。当我们将表移到另一个数据库同时,我们也失去了重要功能,例如原子事务、FK 验证和连接表。因此,移动表可能会需要开发人员重新编写 Figma 中很多代码,成本较高。我们最好通过识别易于分区的查询模式和表来制定策略。

但是,从后端角度看这很困难。Ruby 作为我们应用程序后端,服务了大部分 Web 请求,它们生成了大部分数据库查询语句,开发人员使用 Active Record 编写这些查询语句。由于 Ruby 和 Active Record 的动态性,仅通过静态代码分析很难确定哪些物理表受到 Active Record 查询的影响。首先,我们创建了运行时验证器,这些验证器连接到 Active Record。这些验证器将生产查询和事务信息(例如调用者位置和涉及的表)发送到 Snowflake(我们的云上数仓)中进行处理。我们使用此信息查找经常引用相同组表格的查询和事务。哪儿工作负载成本高,那这些表就作为垂直分区的主要候选项。

管理迁移

一旦确定了要分区的表,就要制定一个计划来在迁移。虽然离线操作很简单,但对于我们来说不是一个选项 - Figma 需要始终保持在线和高效以支持用户的实时协作。我们要协调跨数千个应用程序后端实例的数据移动,以便它们可以在正确的时刻将查询路由到新数据库。这样就可以在没有维护窗口或停机时间(这会对用户造成干扰,并且还需要工程师进行非工作时间内的工作)情况下分区数据库。我们的解决方案要满足以下目标:

  • 将潜在可用性影响限制在 1 分钟内
  • 自动化该过程,使其易于重复执行
  • 近期的分区操作能撤回

没能找到符合我们要求的预构建解决方案,而且我们也希望灵活地适应未来情况。只有一个选择:自己构建。

定制的解决方案

高层次上,我们进行了以下操作(第 3-6 步在几秒钟内完成,以最小化停机时间):

  • 准备客户端应用程序以从多个数据库分区查询
  • 将表从原始数据库复制到新数据库,直到复制延迟接近 0
  • 暂停原始数据库的活动
  • 等待数据库同步
  • 将查询流量重新定向到新的数据库
  • 恢复活动

正确准备客户端应用程序是一个重要问题,Figma 应用程序后端的复杂性让我们很焦虑。如果在分区之后错过了某些边缘情况会怎么样呢?为降低风险,我们靠 PgBouncer 层来获取运行时可见性,并确保应用程序正确配置。与产品团队合作,以确保应用程序兼容分区后的数据库后,我们创建了单独的 PgBouncer 服务虚拟分流流量。安全组确保只有 PgBouncer 可以直接访问数据库,这意味着客户端应用程序始终通过 PgBouncer 连接。首先分区 PgBouncer 层将给客户留出余地。尽管我们能检测到路由不匹配,但由于两个 PgBouncer 具有相同的目标数据库,客户端仍将成功查询数据。

file

初始状态

file

将 PgBouncer 分区后的数据库状态

一旦验证了应用程序已准备好为每个 PgBouncer 建立单独的连接(并正确发送流量),我们继续进行下一步。

file

数据库分区后的状态

合乎逻辑的选择

在 Postgres 中,有两种复制数据的方式:流复制或逻辑复制。我们选择了逻辑复制,因为它允许我们:

  • 传输一部分表格,这样开始时,我们可以在目标数据库使用更小的存储占用(减少存储硬件占用可以增加可靠性)。
  • 复制到运行着不同 Postgres 版本的数据库中,这意味着我们可以进行最小停机时间主版本升级。AWS 针对主版本升级支持蓝绿部署,但该功能尚未在 RDS Postgres 上提供。
  • 设置反向复制,使我们能够回滚操作。

使用逻辑复制的主要问题是我们有几个 TB 的生产数据,因此初始数据副本可能要数天甚至数周才能完成。我们希望避免这种情况,不仅为了将窗口期限制在最小范围内,也为了减少重新启动的成本。我们考虑过在正确的时间进行快照恢复并开始复制,但一个快照恢复就淘汰了能有较小存储占用空间。于是,我们开始调查为什么逻辑副本性能如此低下。原来拷贝降速是由于 Postgres 在目标数据库中维护索引的方式导致的。逻辑复制批量复制行,但它更新索引的效率低下:一次更新一行。删除目标数据库中的索引并在初始数据副本之后重建索引后,制作副本时间缩短到了几小时。

通过逻辑复制,我们能够从新分区数据库构建反向复制流,并返回原始状态。在原始数据库停止接收流量后,立即启动此复制流。对新数据库进行修改将被回传到旧数据库,在回滚事件中旧数据库会有这些更新。

关键步骤

解决了复制问题后,我们到了协调查询重定向的关键步骤。每天每时都有数千个客户端服务查询数据库。跨越这么多客户端节点进行协调很容易出问题。通过分两个阶段(先对 PgBouncers 分区,然后再是数据)执行切片操作,关键的数据分区操作只需要在为分区表提供服务的少量 PgBouncer 节点之间进行协调。

以下是正在进行中的操作概述:我们短暂地跨节点暂停所有相关数据库流量,方便同步新数据库以实现逻辑复制(PgBouncer 可以方便地支持暂停新连接和重定向)。当 PgBouncer 暂停新连接时,在原始数据库上撤销客户端对已分区表的查询权限。经过短暂的宽限期后,我们会取消任何剩余未完成的查询。由于我们的应用程序大多只会发出短时查询,因此通常会取消不到 10 个查询请求。此时,在流量暂停状态下,我们需要验证两个数据库是否相同。

在重定向客户端之前确保两个数据库相同是防止数据丢失的基本要求。我们使用日志序列号(LSN)来确定两个数据库是否同步。一旦确认没有新写入,就从原始数据库中取样一个 LSN,然后等待副本回放到此 LSN。此时,原始数据库和副本中的数据是相同的。

file

同步机制

在确认副本已经同步之后,我们停止复制并将副本提升为新数据库,并如前所述设置反向复制。然后恢复 PgBouncer 中的流量,不过现在查询被转到了新数据库。

file

过程总结

为未来规划

我们已经在生产环境中成功执行了多次分区操作,每一次都达到了最初的目标:在不影响可靠性的情况下解决可扩展性问题。我们第一次操作涉及移动两个高流量表,而 2022 年 10 月的最后一波操作涉及 50 个表。在每个操作期间,我们观察到大约 30 秒的部分可用性影响(请求丢失率约为 2%)。现在,每个数据库分区都具还有大量空间。我们最大的分区 CPU 利用率约为 10%,并且我们已经减少了一些低流量区所分配的资源。

现在还有很多工作要做。数据库很多时,客户端应用程序必须维护对每一个数据库的了解,并且随着添加更多数据库和客户端路由复杂度呈乘法级别增长。因此,我们引入了新的查询路由服务来集中和简化路由逻辑以便于扩展到更多分区。一些表有高写入流量或数十亿行和数千兆字节磁盘占用空间,这些表将分别遇到磁盘利用率,CPU 和 I/O 瓶颈问题。我们清楚,如果仅依赖垂直分区,最终还是会碰到扩展限制。回到最大化杠杆的目标上来说,我们为垂直分区打造的工具将让我们更好地处理高写入流量表的水平切片。它为我们提供了足够的「跑道」来维护当前项目并保持 Figma「高速公路」的畅通,同时也可以看到未来发展方向。


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

某城商行理财子公司信息系统选型:POC验证思路 POC(Proof of Concept,概念验证)是在正式采购/立项前,用真实业务场景、真实数据、真实环境,对候选系统/方案进行的小范围、可量化、可复现的验证测试。维度Demo演示POC验证UAT验收目的展示功能亮点验证可行性确认交付质量数据厂商预制数据企业真实数据(脱敏)生产环境数据场景理想化流程核心业务痛点场景全功能覆盖周期1-2小时1-4周2-8周参与方厂商+IT业务+IT+厂商+合规业务+IT+厂商决策价值低(主观感受)高(客观数据)中(交付确认)解释。 阅读详情

相关推荐

数据编目在数据资产估值中的基础性作用

1. 边界定义挑战:数据资产缺乏物理实体边界,其范围和边界具有流动性和模糊性。一个数据集可能同时属于多个业务单元,或包含来自多个源头的数据。2. 价值多维性挑战:数据价值体现在多个维度——业务价值、成本价值、市场价值、战略价值等,这些维度难以用统一尺度衡量。3. 上下文依赖性挑战:数据价值高度依赖使用场景和上下文。相同数据在不同应用场景中可能具有截然不同的价值。4. 质量敏感性挑战:数据质量直接影响其价值,但质量评估本身就是一个多维问题,包括准确性、完整性、一致性、及时性等。5. 动态演化挑战。

2501_92132293的博客 778

teradata数据库分析函数_美股史上最大软件公司IPO诞生,数据仓库市场未来充满想象 | 爱分析洞见...

指导|黄勇调研 | 李喆冯伟撰写| 冯伟“ 硅谷独角兽Snowflake上月创造美股史上规模最大软件公司IPO,市值一度突破700亿美元。数据仓库市场经历20余年发展变革后,在云原生浪潮下即将迎来大洗牌?回顾历史,我们试图找到一条推动数据仓库市场发展的内在逻辑。硅谷数据仓库厂商Snowflake于2020年9月17日正式登陆纽交所,上市首日市值一度突破700亿美元。市场对于Sno...

weixin_39672572的博客 491

股市估值高低对养老金体系的长期影响

随着全球人口老龄化的加剧,养老金体系的可持续性成为了各国政府和社会关注的焦点。股市作为重要的投资市场,其估值的高低对养老金体系的长期发展有着深远的影响。本文旨在深入分析股市估值高低如何影响养老金体系的资产配置、投资收益和支付能力等方面,探讨其中的内在机制和潜在风险,为养老金管理机构、政策制定者和投资者提供理论和实践参考。研究范围涵盖了不同国家和地区的养老金体系,以及股市在不同经济周期下的估值变化情况。本文共分为十个部分。第一部分为背景介绍,阐述了研究的目的、范围、预期读者和文档结构。

AIGC应用创新大全的博客 655

Finance Skills公司估值深度解析:三重验证框架下的价值投资实践路径

你是否曾经在投资决策时感到困惑?面对一家公司的股价波动,究竟如何判断其真实价值?传统单一估值方法的局限性常常让我们错失良机或陷入风险。Finance Skills项目中的公司估值模块,正是为了解决这一核心问题而生——通过DCF、相对估值和SOTP三种方法的交叉验证,为投资者提供多维度的价值评估框架。 ## 问题:单一估值方法的局限性为何让我们错失良机? 在金融分析的世界里,没有一种估值方法是完

gitblog_00276的博客 295

运用VBA和SQL实现可变年金估值与数据库连接

本篇博客通过详细解析书籍中的章节内容,介绍了如何使用VBA宏和SQL语句来实现可变年金(GMDB)的估值和从Access数据库中提取特定年份发行的合同信息。文章首先展示了如何通过编程计算GMDB的公平市场价值,随后说明了如何利用ActiveX数据对象(ADO)连接外部数据库并操作数据。

weixin_30700095的博客 462

数据工程师——ETL

文章摘要 ETL(数据抽取、转换、加载)是数据处理的核心流程,负责将分散数据源整合为高质量数据。ETL与ELT的主要区别在于转换步骤顺序,分别适用于不同规模数据场景。数据仓库通过ETL从多个数据源集成数据,支持分析决策。维度建模中的事实表记录业务指标,维度表提供上下文信息。缓慢变化维度(SCD)处理随时间变化的维度数据,常见类型包括直接覆盖型、新增版本型等。数据清洗解决数据缺失、重复、错误等问题,确保数据质量。数据血缘记录数据流转路径,便于问题排查和影响分析。常用ETL工具如Kettle通过转换和作业实现数

weixin_45729710的博客 1562

AI驱动的公司估值:多维度智能体协作评估内在价值

公司估值是金融和投资领域的核心问题之一,准确评估公司的内在价值对于投资者做出合理的投资决策、企业进行战略规划和并购重组等都具有至关重要的意义。传统的公司估值方法往往依赖于有限的财务数据和主观的判断,难以全面、准确地反映公司的真实价值。随着人工智能技术的快速发展,利用AI驱动的方法进行公司估值成为了研究的热点。本文的目的在于探讨如何利用多维度智能体协作的方式,综合考虑公司的多个维度信息,更准确地评估公司的内在价值。

专注搜索引擎技术 467

[ESP32S3N16R8][LVGL8.3.0][IDF5.2.3]ST7701S RGB屏幕驱动[vscode最详细配置]

ST7701S ESP32S3 基于ESP-IDF5.2.3编写,编程环境为vscode。本教程详细讲述了esp32s3配置st7701s屏幕驱动以及gt911触摸驱动并关联到lvgl8.3.0,使用IDF5.23示例rgb_panel进行测试删除了其里面的屏幕驱动,改为单独编写屏幕和触摸驱动,最后完成了实列。

qq_44022379的博客 2608

传统数据仓库正在被 Agentic AI 吞噬?Agentic Data Stack 初探

从技术架构的角度看,我认为这一次的AI浪潮将深刻影响整个软件生态。DSS 系统的设计是以人作为最终消费者的决策支持逻辑为中心,然而,随着 Agentic AI 时代来临,最终的“消费者”更可能是 agent,对数据仓库和复杂 ETL 链路将被重新设计,甚至消失。传统数据仓库偏重结构与查询模式,会被 Agentic Data Stack 架构强调语义与响应模式取代。

Apache DolphinScheduler开源社区 1479

海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储

本文详细介绍了海康工业相机在LabVIEW平台上的二次开发实战,重点解析了相机参数配置的优化方法与图像高效存储策略。通过剖析曝光、增益、触发模式等核心参数的设置逻辑,并结合生产者-消费者设计模式,指导开发者构建稳定、高效的图像采集与异步存储流程,有效提升工业视觉项目的开发效率与系统稳定性。

weixin_29306317的博客 222

基于51单片机的电压表【0-20V,ADC0832,4051,自动量程】(仿真)

自动换挡式数字电压表就是一个基于单片机的能自动切换量程的数字电压表,其作用是在使用低位的AD转换实现高精度电压测量,可以测量0~20V的电压,并且具有0~0.2V(待测电玉低于0.2V时),0~2V(待测电压低于2V时)和0~20V三个量程自动匹配测量,当待测电压值发生变化时,电压表可以根据输入电压情况自动选择合适的量程进行测量,并且把测量结果显示出来。(2)实现电压表精度测试,最高精度要求0.01V;(1)实现0~20V分3档式电压表;

qq_63964231的博客 1500

AI创业公司估值回调背后的商业化真相

大模型技术已从概念验证迈入规模化落地阶段,其核心价值正由‘参数规模’和‘评测分数’转向‘真实场景可用性’与‘单位经济健康度’。在企业客户普遍启动ROI审计、资本市场严查毛利率与销售费用率的当下,单纯强调‘全栈自研’或‘Agent架构’的技术叙事,若无法映射到可量化、可归因、可复用的业务结果,便难以支撑持续估值。Minimax案例揭示了AI公司普遍面临的三重断层:技术先进性与80%场景95%可用性的落差、开源基座快速收敛带来的护城河收窄、以及从‘烧钱换增长’到‘现金流为王’的范式切换。理解这一逻辑,是开发者选

weixin_42548708的博客 318

关于StartAI本地部署相关问题解答

很多小伙伴们都有接入自己本地SD的需求,对此小编整理了一些相关问题~

HDJ9387的博客 940

【网格生成】Gmsh快速入门教程 --1.图形化界面使用

初探 Gmsh软件的主界面如下图所示。通过点击菜单“File” -> "Open"可选择打开已经存在的几何模型或网格文件,初次使用可选择tutorial目录下的t1.geo文件。打开后效果如图所示,t1.geo描述的是一个长方体。 接下来依次尝试左侧菜单栏的功能:Geometry(几何)、Mesh(求解器)。Solver模块需依赖外置求解器,不在本文介绍范围内。 Geometry 该菜单下是与几何相关的功能,如新增一个点/面、体,移动一个体等,具体功能很多可以在后续使用中逐渐尝试学习。本文仅介绍几个

DJ_xiaoming的博客 1万+

YOLOv11【第二章:核心模块进阶篇·第3节】LDConv线性可变形卷积改进YOLOv11!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 7441

Databricks完成10亿美元K轮融资,估值突破1000亿美元

Databricks完成10亿美元K轮融资,估值突破1000亿美元

zhidingkeji的博客 459

在 PFCG 中完成 SAP Fiori 对象分配:把 Business Catalog、Space、Page 与授权一次讲透

摘要:SAP Fiori权限配置的关键在于理解Business Catalog与Space的分层授权逻辑。传统SAP GUI中直接分配事务码的方式不适用于Fiori环境,必须通过PFCG为角色分配Catalog(提供应用访问权限)和Space(控制首页展示结构)。Catalog会自动解析所需OData服务授权,而Space则决定用户在Launchpad中看到的导航布局。常见错误包括直接分配Page而非其所属Space,或仅配置Space而忽略Catalog。最佳实践是优先使用Catalog驱动授权提议,再在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 327

联机分析处理系统与联机事务处理系统的区别和联系_美股史上最大软件公司IPO诞生,数据仓库市场未来充满想象 | 爱分析洞见...

指导|黄勇调研 | 李喆冯伟撰写| 冯伟“ 硅谷独角兽Snowflake上月创造美股史上规模最大软件公司IPO,市值一度突破700亿美元。数据仓库市场经历20余年发展变革后,在云原生浪潮下即将迎来大洗牌?回顾历史,我们试图找到一条推动数据仓库市场发展的内在逻辑。硅谷数据仓库厂商Snowflake于2020年9月17日正式登陆纽交所,上市首日市值一度突破700亿美元。市场对于Sno...

weixin_39837124的博客 580

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MongoDB 的估值和增长前景使其站稳脚跟

市场可能高估了 MongoDB 的未来增长潜力。

weixin_50604094的博客 190

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 从 Google 删库,到蚂蚁跑路,Care 与 Fear 点燃的 Flare
下一篇: 一文讲透研发,SRE,运维,DevOps 的区别
Bytebase
博客等级 码龄5年 1348粉丝 258原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值