四年增长 100 倍的 Figma,数据库团队是怎么活下来的!

【Figma技巧】如何把Figma里面每个frame分散为单独的page 在Scripter插件或浏览器控制台里输入以下代码: let af = figma.currentPage.findAll(n => { return n.type === "FRAME" }) af.forEach(n => { let p = figma.createPage() p.appendChild(n) }) 以上代码来自@Mr. Biscuit 阅读详情

Figma 是近几年全球增速最快的 SaaS 服务之一。作为新一代的在线协同设计软件,Adobe 曾一度计划以 200 亿美金收购 Figma,最后因为反垄断的顾虑而终止。本文介绍了 Figma 数据库团队过去 9 个月如何赶在数据库无法支撑业务前,完成了技改。

这是一场持续 9 个月的历程,我们对 Figma 的 Postgres 进行了水平分片,来实现(几乎)无限的可扩展性。


自 2020 年以来,Figma 的数据库增长了近 100 倍。这是一个甜蜜的烦恼,因为这意味着我们的业务在扩张,但也带来了一些棘手的技术挑战。在过去的四年里,我们付出了巨大努力保持领先地位,并避免潜在的成长烦恼。2020 年时,我们运行着一个单体 Postgres 数据库,托管在 AWS 最大的物理实例上;到 2022 年底,我们已经建立起具有缓存、只读副本和十几个垂直分区数据库的分布式架构。我们将相关表组(如「Figma文件」或「组织”」)拆分到它们自己的垂直分区,这使得我们能够获得渐进式扩展收益,并保持足够空间提前应对增长。
尽管我们在渐进式扩展方面取得了进展,但我们始终知道垂直分区只能让我们走到这一步。我们最初的扩展工作集中在减少 Postgres CPU 利用率上。随着我们的集群规模越来越大且更加异构化,我们开始监控一系列瓶颈。我们使用历史数据和负载测试相结合来量化数据库从 CPU 和 IO 到表大小和写入行数的扩展限制。识别这些限制对于预测每个分片还能撑多久至关重要。然后,我们可以在问题发育成主要可靠性风险之前优先处理扩展问题。

数据显示,我们的一些表格包含数 TB级,数十亿行数据,已经变得太大以至于无法放入单个数据库中。在这种规模下,我们开始看到 Postgres vaccume 操作期间出现可靠性问题,这些操作是 保持Postgres 不会用尽事务 ID (Transaction Wraparound) 并崩溃的关键后台操作。我们最高写入量的表格增长太快了,以至于很快就会超过 AWS RDS 支持的每秒最大 IO 操作次数(IOPS)。由于垂直分片不能解决问题,因为分片的最小单位只能一个单独的表。为了防止我们的数据库倒塌,我们需要更大的杠杆。

整装待发

我们列出了一些目标和必备条件,以解决短期挑战,并为顺利长期增长做好准备。我们的目标是:

  • 尽可能不影响开发人员:我们希望能处理大部分应用程序已有的复杂关系数据模型。应用程序开发人员可以专注于在 Figma 中构建令人兴奋的新功能,而不是重构我们代码库中的大部分内容。
  • 应用无感扩展:在未来的扩展中,我们不希望在应用程序层面进行额外的更改。这意味着,在做任何初始工作使表兼容之后,未来的规模扩大对我们的产品团队应该是透明的。
  • 避免昂贵的回填 (Backfill):我们避免了涉及在 Figma 的大表或每个表进行回填的解决方案。考虑到我们表格的大小和 Postgres 吞吐量限制,这些回填将需要数月时间。
  • 递进式扩展:我们确定了可以逐步扩展的方法,以逐步降低生产变更的主要风险。这减少了重大故障的风险,并使数据库团队能够在迁移过程中保持 Figma 的可靠性。
  • 避免单向迁移 (one-way migraiton):即使在完成物理分片操作后,我们仍保持了回滚的能力。这降低了在发生未知情况时没有回头路。
  • 保持数据一致性:我们希望避免像双写这样复杂的解决方案,这些解决方案很难在不停机或牺牲一致性的情况下实施。我们还希望找到一个可以让我们进行水平扩展且几乎零停机时间的解决方案。
  • 发挥我们的优势:由于我们是在有严格的死限压力下开展工作,尽可能地,我们倾向于先能逐步解决我们增长最快的那些表。我们希望利用已经具备的专业知识和技术。

方案调研

有许多流行的开源和托管解决方案可用于水平分片数据库,这些解决方案与 Postgres 或 MySQL 兼容。在我们的评估过程中,我们探索了 CockroachDB、TiDB、Spanner 和 Vitess。然而,切换到任何这些替代数据库都需要进行复杂的数据迁移,以确保两个不同数据库存储之间的一致性和可靠性。此外,在过去几年里,我们已经积累了大量关于如何在内部可靠地运行 RDS Postgres 的专业知识。如果要迁移到这些新数据库,我们将不得不从头开始重建领域专业知识。考虑到我们非常激进的增长速度,剩余时间只有几个月。相比可能更容易但存在更高不确定性的选项,我们更倾向于选择已知的低风险解决方案,可控性更高,

NoSQL 数据库是另一种常见的默认可扩展解决方案。然而,我们建立在当前 Postgres 架构之上的关系数据模型非常复杂,并且 NoSQL API 并不提供这种多样性。我们希望让工程师专注于发布出色功能和构建新产品,而不是几乎重写整个后端应用程序;NoSQL并非一个可行的解决方案。

一番权衡后,我们开始探索在现有的垂直分区 RDS Postgres 基础架构之上构建一个水平分片解决方案。对于我们的小团队来说,在内部重新实现一个通用的水平分片关系数据库是没有意义的;这样做会使我们与大型开源社区或专门的数据库供应商构建的工具竞争。然而,由于我们将水平分片定制为 Figma 的特定架构,因此可以提供更小的功能集合。例如,我们选择不支持原子跨 Shard 事务,因为我们可以通过解决跨 Shard 事务失败来绕过它们。我们采取了一种最大程度减少应用层所需更改的 colocation 策略。这使得我们能够支持与大多数产品逻辑兼容的 Postgres 子集。同时,我们还能够轻松地在带有 Sharded 和未经 Sharded 处理过的 postgres 之间保持向后兼容性。如果遇到未知问题,那么很容易回滚到未经 Sharded 处理过的 Postgres 上去。

水平分片 (Sharding) 之路

即使有了这些精简的要求,我们知道水平分片将是迄今为止我们最大、最复杂的数据库项目。幸运的是,过去几年里我们采取的增量扩展方法为我们做了准备。在 2022 年底,我们着手解锁几乎无限的数据库可伸缩性,而水平分片——即将单个表或一组表拆分并将数据跨多个物理数据库实例进行划分——就成了关键。一旦一个表在应用层被水平切割,它可以支持任意数量的物理层碎片。通过简单地运行物理碎片拆分,我们总是可以进一步扩展规模。这些操作在后台透明地进行,并且只需很少停机时间,并不需要应用级别变更。这种能力将使我们能够摆脱所剩无几的数据库扩展瓶颈,消除 Figma 的最后一个主要扩展挑战之一。如果垂直分片让我们加速到高速公路速度,那么水平分片则可以关掉限速,并让我们飞起来。

file

file

水平分片比我们之前的扩展工作复杂得多。当一个表被分割到多个物理数据库中时,我们失去了在 ACID SQL 数据库中视为理所当然的许多可靠性和一致性属性。例如:

  • 某些 SQL 查询变得低效或无法支持。
  • 必须更新应用程序代码,以提供足够的信息,尽可能高效地将查询路由到正确的分片。
  • 必须协调所有分片之间的 Schema 变更,以确保数据库保持同步。
  • Postgres 不再能强制执行外键和全局唯一索引。事务现在跨多个分片,这意味着 Postgres 不能再用于强制保持事务性。现在可能会出现对某些数据库的写入成功而其他失败的情况。必须注意确保产品逻辑能应对 「部分提交失败」(脑补一下将团队在两个组织间移动,结果发现他们一半数据丢失了!)。

我们知道实现完全的水平分片将是一个持续多年的努力。在交付增量价值的同时,我们需要尽可能降低项目风险。我们的第一个目标是尽快对生产中一个相对简单但访问量非常高的表进行分片。这将证明水平分片的可行性,同时延长我们最繁忙数据库上能继续服务的时间。然后,在逐步对更复杂组合的表进行分片时,我们可以继续构建额外功能。即使是最简单可能的功能集仍然是一项重大工作。从头到尾,我们团队花了大约九个月来对第一张表进行分片。

我们独特的方法

我们的水平分片工作也是基于前人的经验,但有一些不同寻常的设计选择。以下是一些要点:

  • Colos:我们将相关的表组队放在一起,称为 colos,这些表共享相同的分片键和物理分片布局。这为开发人员提供了一个友好的抽象,以与水平分片表进行交互。
  • 逻辑分片:我们在应用层将“逻辑分片”的概念与 Postgres 层的“物理分片”区分开来。我们利用视图执行更安全、成本更低的逻辑分片部署,然后再执行风险较高的分布式物理 failover。
  • DBProxy 查询引擎:我们构建了一个 DBProxy 服务,拦截应用程序层生成的 SQL 查询,并动态路由查询到各个Postgres 数据库。DBProxy 包含一个能够解析和执行复杂水平分片查询的查询引擎。DBProxy 还允许我们实现诸如动态负载调节等功能。
  • 影子应用准备就绪:我们添加了一个“影子应用准备就绪”框架,能够预测活跃生产流量在不同分片切割下会如何工作。这使产品团队清楚地知道需要重构或删除哪些应用逻辑以准备应用进行水平切割。
  • 完整逻辑复制:我们避免实施“过滤式的逻辑复制”(仅将数据子集复制到每个分片)。相反,我们复制整个数据集,然后只允许读/写操作针对给定分片所属数据子集进行操作。

我们的分片实现

在水平分片中,最重要的决定之一是选择使用哪个分片键。水平分片增加了许多围绕着分片键的数据模型约束。例如,大多数查询需要包含分片键,以便将请求路由到正确的分片上。某些数据库约束(如外键)只有在外键是分区键时才有效。为了避免引起可靠性问题或影响可伸缩性的热点,分片键还需要将数据均匀地分布在所有分片上。

Figma 跑在网页端,许多用户可以同时在同一个 Figma 文件上进行协作。这意味着我们的产品由一个相当复杂的关系数据模型驱动,保存文件元数据、组织元数据、评论、文件版本等等。

我们考虑使用相同的分片键来处理每个表,但在我们现有的数据模型中没有一个单一的好候选项。要添加统一的分片键,我们必须创建一个复合键,在每个表的架构中添加该列,运行昂贵的回填以填充它,然后大幅重构我们产品逻辑。相反,我们根据 Figma 独特的数据模型量身定制了我们的方法,并选择了像 UserID、FileID 或 OrgID 这样少数几个分片键。Figma 几乎每张表都可以使用这些关键字进行分片。

我们引入了 colo 的概念,为产品开发人员提供友好的抽象:在 colo 内部的表支持跨表连接和完整事务,当限制为单个分片键时。大多数应用程序代码已经以这种方式与数据库交互,这最大程度地减少了应用程序开发人员需要做的工作,使表适合水平切分。下图展示了使用 UserID 和 FileID 的分区各自组合在了一起。

file

file

一旦我们选择了分片键,就需要确保数据在所有后端数据库中均匀分布。不幸的是,我们选择的许多分片键使用了自增或雪花时间戳前缀 ID。这将导致存在显著热点,其中一个单个分片包含大部分数据。我们探索过迁移到更随机化的ID,但这需要进行昂贵且耗时的数据迁移。相反,我们决定使用分片键的哈希值进行路由。只要选择足够随机的哈希函数,就能确保数据均匀分布。其中一个缺点是,在范围扫描 shard keys 时效率较低,因为连续键会被散列到不同的数据库 shards 上。然而,在我们代码库中这种查询模式并不常见,所以这是一个可以接受的权衡方案。

「符合逻辑」的方案

为了降低水平分片的风险,我们希望将在应用程序层准备表格的过程与运行分片拆分的物理过程隔离开来。为此,我们将「逻辑分片」与「物理分片」进行了区分。然后,我们可以解耦迁移的两个部分以独立实施和降低风险。逻辑上的切割使我们对技术栈有信心,并采用低风险、基于百分比的发布方式。当发现错误时回滚逻辑分片只需简单更改配置。回滚物理碎片操作是可能的,但需要更复杂的协调以确保数据一致性。

一旦一个表被逻辑分片后,所有读写操作都会像该表已经被水平分片那样执行。从可靠性、延迟和一致性角度看,尽管数据仍然位于单个数据库主机上,但我们似乎已经完成了水平分片工作。当我们确信逻辑分片按预期工作时,则执行物理分片操作。这是从单个数据库复制数据、到把分片散步到不同数据库上,然后通过新数据库重新路由读写流量的过程。

file

两个物理分片,每个物理分片又包含两个逻辑分片。

刚好的查询引擎

为了支持水平分片,我们不得不对后端技术栈进行重大改造。最初,我们的应用服务直接与连接池层 PGBouncer 通信。然而,水平分片需要更复杂的查询解析、规划和执行。为了支持这一点,我们构建了一个新的 golang 服务DBProxy。DBProxy 位于应用程序层和 PGBouncer 之间。它包括负载均衡逻辑、改进的可观测性、事务支持、数据库拓扑管理以及轻量级查询引擎。

file

查询引擎是 DBProxy 的核心。其主要组件包括:

  • 查询解析器读取应用程序发送的 SQL,并将其转换为抽象语法树(AST)。
  • 逻辑规划器解析 AST 并从查询计划中提取查询类型(插入、更新等)和逻辑分片 ID。
    物理规划器将查询从逻辑分片 ID 映射到物理数据库。它重写查询以在相应的物理分片上执行。

file

在水平分片的世界中,一些查询相对容易实现。例如,单片段查询被过滤到一个单个分片键。我们的查询引擎只需要提取分片键并将查询路由到适当的物理数据库。我们可以将查询执行的复杂性「下推」到 Postgres 中。然而,如果查询缺少分片键,则我们的查询引擎必须执行更复杂的「发散-归并」。在这种情况下,我们需要将查询发到所有分片(发散阶段),然后汇总结果(归并阶段)。在某些情况下,如复杂聚合、连接和嵌套 SQL 等情况下,这种发散-归并可能非常复杂。此外,有太多发散-归并会影响水平划分可伸缩性。因为这些查询必须触及每个单独的数据库,在未经划分时每次发散-归并都会产生同样数量的负载。

file

如果我们支持完整的 SQL 兼容性,我们的 DBProxy 服务将开始看起来很像 Postgres 数据库查询引擎。我们希望简化 API 以减少 DBProxy 的复杂性,同时也减少应用程序开发人员需要重新编写任何不受支持查询的工作量。为了确定正确的子集,我们构建了一个“影子规划”框架,允许用户为他们的表定义潜在分片方案,然后在实时生产流量之上运行逻辑规划阶段。我们将查询和相关查询计划记录到 Snowflake 数据库中,在那里可以进行离线分析。根据这些数据,我们选择了一种支持最常见 90% 查询的查询语言,但避免了在查询引擎中出现最坏情况下的复杂性。例如,所有范围扫描和点查都是被允许的,但只有当连接两个位于相同 colo 中且连接在分片键上时才允许 join 操作。

面向未来的 View(视图)

然后我们需要想办法封装我们的逻辑分片。我们探索了使用单独的 Postgres 数据库或 Postgres schemas 对数据进行分区。不幸的是,当我们在应用程序中逻辑地分片时,这将需要物理数据更改,这与执行物理分片拆分一样复杂。相反,我们选择用 Postgres 视图来表示我们的分片。我们可以为每个表创建多个视图,每个视图对应给定分片中数据子集。看起来像:

CREATE VIEW table_shard1 AS SELECT * FROM table WHERE hash(shard_key) >= min_shard_range AND hash(shard_key) < max_shard_range`)

所有对表格的读取和写入都通过这些视图发送。通过在现有未经过划分的物理数据库之上创建划分视图,在执行任何风险较高的物理重新划分操作之前,我们可以在逻辑上进行划分。每个视图通过自己独立的连接池服务,连接到它们所属于的分片实例上。连接池仍然指向未经过分片处理的物理实例,从而呈现出被进行了分片处理后效果。通过查询引擎中特性开关(feature flag)渐进地发布,以减少风险。并且回滚到主表,只需几秒钟即可,将流量重定向回去。当我们第一次执行重新分片操作时, 我们已经对于分片拓扑的安全性胸有成足。

file

通过在非分片数据库中创建多个视图,我们可以像数据已经被物理分片一样查询这些视图。

当然,依赖视图也引入了额外的风险。视图会增加性能开销,并且在某些情况下可能从根本上改变 Postgres 查询规划器优化查询的方式。为了验证这种方法,我们收集了一组经过脱敏的生产查询语句,并进行了带有和不带有视图的负载测试。我们确认,在大多数情况下,视图只会增加最小的性能开销,在最糟糕的情况下不到 10%。我们还构建了一个影子读取框架,可以通过视图发送所有实时读取流量,比较使用视图与不使用视图查询之间的性能和正确性。然后我们确认,视图是一种可行的解决方案,并且对性能几乎没有影响。

应对我们的拓扑

为了执行查询路由,DBProxy 必须理解我们表和物理数据库的拓扑结构。因为我们已经将逻辑分片与物理分片的概念分开,所以我们需要一种方式在拓扑结构中表示这些抽象概念。例如,我们需要能够将一个表(用户)映射到其分片键(user_id)。同样地,我们需要能够将逻辑分片 ID(123)映射到相应的逻辑和物理数据库。在垂直划分方面,我们依赖于一个简单、硬编码的配置文件来将表映射到它们的分区。然而,在向水平切割转变时,我们需要更复杂的东西。当进行切片拆分时,我们的拓扑结构会动态改变,并且 DBProxy 需要迅速更新其状态以避免请求被路由至错误的数据库。由于每次对拓扑结构进行更改都是向后兼容的,在网站关键路径上从未出现过这些更改。我们建立了一个包含复杂水平切割元数据并可以在不到一秒内提供实时更新信息的数据库拓扑结构。

file

拥有独立的逻辑和物理拓扑结构也使我们能够简化一些数据库管理工作。例如,在非生产环境中,我们可以保持与生产相同的逻辑拓扑结构,但从更少的物理数据库中提供数据。这样既节约成本又降低复杂性,而不会在各个环境之间进行过多变更。拓扑库还使我们能够强制保证跨整个拓扑结构(例如,每个分片 ID 应映射到一个物理数据库)的约束,这对于维护系统正确性至关重要,特别是在我们建立水平分片的整个过程中。

物理分片操作

一旦表准备好进行分片,最后一步是从未分片到已分片数据库的物理 failover 转移。我们能够重复使用许多相同的逻辑来进行水平切分,但也有一些显著的不同之处:我们不再将数据从一个数据库移动到另一个数据库,而是从一个数据库移动到N个数据库。我们需要使 failover 过程能应对新的失败模式,在这些模式下,分片操作可能仅在我们的部分数据库上成功。尽管如此,在做垂直分片的时候,许多风险最高的组件已经被解决了。我们能够比以往更快地朝着第一次物理分片操作迈进,这本来是不可能实现的。

筚路蓝缕

当我们开始这段旅程时,我们知道水平分片将是对 Figma 未来可扩展性的多年投资。我们在 2023 年 9 月交付了第一个水平分片表。我们成功进行了故障切换,数据库主节点仅出现了十秒的部分可用性问题,副本没有受到影响。在分片后,我们没有看到延迟或可用性方面的退化。从那时起,我们一直在处理写入速率最高的,并且相对简单的数据库分片。今年,我们将对越来越复杂的数据库进行分片处理,这些数据库有数十个表和成千上万个代码调用点。

为了拔掉最后阻碍我们无限扩展的钉子,我们需要在 Figma 上水平分片每个表。一个完全水平分片的世界将带来许多其他好处:提高可靠性、节约成本和开发速度。在这过程中,我们需要解决所有这些问题:

  • 支持水平分片模式更新
  • 全局唯一 ID 用于生成水平分片主键
  • 用于核心业务的跨 shard 的原子事务
  • 分布式全局唯一索引(目前仅支持包含 sharding key 的索引上的唯一索引)
  • 一个可以增加研发效能,但不会受到水平分片影响的 ORM
  • 完全自动化的重分片操作,一健运行。

一旦我们有足够的时间余地,我们还将重新评估内部 RDS 水平分片的整套方案。18个月前,我们开始了这段旅程,并面临极其紧迫的时间压力。NewSQL 持续精进,而我们也终于将有时间来重新评估沿着当前路径继续下去还是转向开源或者托管方案。我们在水平分片旅程中取得了许多令人振奋的进展,但挑战才刚刚开始。


点评:Figma 在时间压力下,采用了更稳妥成熟的水平分片方案。类似方案之前已经在国内外互联网公司里广泛应用。国外的 Instgram (Postgres),GitHub (MySQL) 也都做过详细的分析。而最后 Figma 列出的剩余问题,也正是 NewSQL 路线的强项。比如国内的 TiDB, OceanBase 都能比较好的解决。所以就像 Figma 所说的,等他们缓过来后,也要重新评估一下。

另外一方面,Figma 也提到了水平分片后对于研发带来的挑战。本来只要变更一个数据库,现在可能就要变更 100 个数据库。如何保证这些变更的一致性?Bytebase 里正好提供了批量变更模式,可以把水平分片的数据库放在一组,一起进行变更。

file


💡 更多资讯,请关注 Bytebase 公号:Bytebase

Lovable增长范式革命:当70%传统经验失效时,产品即增长引擎 在注意力稀缺与渠道红利消退的今天,SaaS增长正从‘外部驱动’转向‘产品内生’——用户价值交付速度成为新北极星指标。本文基于Lovable从0到2亿美元ARR的真实实践,解析如何将增长指标深度耦合进产品设计、交互逻辑与代码结构,实现LTV预测、动态定价、行为引导等关键能力的产品化封装。核心围绕‘价值确认点’‘首价值时间’‘跨工具协同’三大技术锚点,揭示增长不再依赖运营干预或渠道采购,而是通过前端工程化、数据埋点即功能、实验代码化治理等手段,让增长能力长在产品毛细血管中。适合正面临付费率停滞、CAC攀升、A/ 阅读详情

相关推荐

生成式AI商业化临界点:13%周活用户如何触发变现加速

生成式AI已从技术概念迈入规模化商业阶段,其核心标志并非模型参数或算力突破,而是用户行为密度达到临界阈值——当周活跃用户覆盖全球在线人口的13%,意味着市场教育完成、价值认知固化、付费意愿显性化。这一拐点背后是用户从‘尝鲜体验’向‘生产力依赖’的跃迁,驱动广告、订阅制、企业级API、垂直SaaS等多元变现模式落地。尤其在L2效率增强层与L3生产力依赖层(合计占48%)中,会话深度、文件上传频次、插件调用率等行为指标成为高转化关键信号。当前商业化成败,取决于能否将AI能力精准锚定于客户可量化的业务成本项,而非

weixin_33787529的博客 427

Figma入门-实战列表页

本文介绍Figma上手过程,实操实现Web端经典列表页,包括标题、搜索框、列表项和分页。采用侧边栏+主内容区布局,使用自动布局实现内外边距,绘制内容列表和分页器,最后进行微调。

我码玄黄的博客 2101

Notion AI如何成为团队的第二大脑:生产力迁移实战指南

在信息过载与多工具割裂的现代办公环境中,‘认知摩擦’正成为组织效能的最大瓶颈。Notion AI并非以模型参数见长,而是凭借深度嵌入工作流的上下文感知能力,实现对结构化信息的精准理解与实时响应。其核心价值在于将非创造性、高重复性的标准化认知劳动(如会议纪要生成、客户反馈聚类、知识库保鲜)自动化处理,显著降低信息形态转换损耗。结合数据库字段约束、权限继承与指令模板沉淀,它让AI行为可审计、可复用、可治理,真正支撑起从个人提效到组织级人机协同的演进路径。本文聚焦Notion AI在真实业务场景中的能力边界与落地

weixin_33739646的博客 385

使用Figma进行微信小程序原型设计

大模型内容整合:使用Figma进行小程序设计

ZERMOREldw的博客 5651

Codex官方14个插件工作流重构指南:消灭上下文切换

Codex并非传统AI编程助手,而是一种嵌入开发者工具链的‘第二大脑’,其核心价值在于解决跨工具协作中的语义断层与上下文切换损耗。它通过多模态tokenization理解设计稿、代码与文档的深层语义,并依托可验证的副作用控制和确定性上下文边界保障工程安全。技术价值体现在自动化PR评审、Figma-to-Code同步、Notion需求到测试用例生成等真实场景,显著压缩人工比对、复制粘贴与窗口切换耗时。本文聚焦GitHub、VS Code、Figma、Notion四大高频插件的底层机制与实操配置,揭示如何以‘锚

angou6476的博客 578

挨踢项目中的四维设计法:架构、模块、数据库与体验协同求生

在IT项目管理中,'挨踢项目'特指需求模糊、技术不确定、工期与预算双紧的高危交付场景。设计在此类项目中并非可选环节,而是将业务目标转化为可执行、可验证、可度量技术决策的关键成本转化器。其核心价值在于前置识别风险、收敛返工成本、保障关键路径稳定性。通过架构设计划定红黄绿生存区、模块设计明确契约边界、数据库设计锚定业务状态机、用户体验设计消除操作歧义,形成覆盖全链路的防御体系。本文聚焦实战导向的四维协同方法论,为中小型团队提供可落地的设计决策框架。

ciyinzhi8788的博客 804

Figma:如何在数据库规模四年增长近100倍的挑战中“活”下来?

Figma在数据库规模四年增长近100倍的挑战中“活”下来的秘诀在于:一方面,通过技术架构的升级与优化、智能化管理与运维等手段,提高了系统的稳定性和运行效率;在未来的发展中,Figma将继续秉持创新、协作、共赢的理念,不断追求卓越,为用户和社会创造更多价值。随着数据库规模的扩大,传统的手工管理方式已无法满足需求。同时,Figma还引入了先进的负载均衡技术,确保在高并发场景下,系统能够保持稳定、高效的运行。为此,Figma积极探索与各行业企业的合作机会,通过提供定制化的解决方案和服务,满足客户的多样化需求。

蒲松龄 1292

提示工程架构师的跨领域合作神器:5个好用的工具

作为提示工程架构师,你的核心职责不是“写更好的提示”,而是“连接不同角色,让提示工程更高效”。Notion:连接需求与信息;:连接设计与技术;LangChain:连接工作流与非技术角色;:连接版本与数据;:连接沟通与效率。通过这些工具,你可以把跨领域合作从“痛点”变成“优势”——产品经理提供清晰的需求,设计师提供符合视觉的参数,数据科学家提供有价值的数据,你提供专业的技术支持,所有角色一起优化提示,最终实现更好的效果。

移动开发前沿的博客 433

数据库规模四年增长近100倍,Figma 如何“活”下来?

随着数据库集群变得越来越大,越来越多样化,我们开始监控一系列瓶颈。我们结合了历史数据和负载测试来量化数据库扩展的限制,比如CPU、IO乃至表的大小和写入的行数。找出这些限制对于预测每个分片还剩多少空间至关重要。这样,我们就可以在这些限制演变成重大可靠性风险之前,优先处理扩展问题。原文链接:https://www.figma.com/blog/how-figmas-databases-team-li...

优快云资讯 6770

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 473

C#实践项目1

需求: 在CAD内实现两个坐标系的转换。 转换方式为文件内的所有图形从一个坐标系下的坐标,转换到另一个坐标系下的坐标。 进行坐标转换后,仅仅是坐标发生改变,图层、样式等等不会发生变化。

weixin_51182789的博客 5328

聊聊这个SaaS领域爆火的话题

导读:本文主要介绍近几年全球SaaS赛道非常热门的话题——产品驱动增长(Product-Lead Growth,PLG)。本文从PLG的定义与适用范围入手。作者:田原来源:大数据DT(ID:hzdashuju)PLG是企业J形增长的动因之一,也可以理解成一种进入市场的策略(Go To Market,GTM)。增长是个系统工程,要用模型化思维去理解和掌握。产品一直是驱动企业...

大数据 1495

Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈

Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。

士多啤梨先生の博客 994

锚定智能经济新赛道:蒙特以全链路建站能力赋能品牌长效增长

2026年AI经济上升为国家战略背景下,蒙特网站(Mountor)凭借26年行业积淀,成为企业数字化转型的核心服务商。

Hanbo17c的博客 161

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

使用 curl,telnet,或 Python websocket-client 库可以本地模拟 WebSocket 握手行为,帮助分析服务端响应状态。避免使用 http:// + ws:// 组合方式部署 Jupyter Lab,特别是在远程或跨域访问场景。建议统一采用 https:// + wss:// 方式部署,确保浏览器信任并兼容。确认 WebSocket 已升级为 wss://,内核可正常启动。但在远程访问时,浏览器出于安全策略,默认拒绝 ws:// 协议。

weixin_43866043的博客 1861

【计算机视觉40例】案例08:石头剪刀布手势识别

计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。......

计算机视觉之光 2157

45人8个月达成1亿美金:SaaS增长的反脆弱架构与人效飞轮

SaaS增长本质是单位经济模型的持续优化,核心在于单客户获取成本(CAC)与生命周期价值(LTV)的动态平衡。本文基于真实可复现案例,解析如何通过反脆弱架构设计——将公司构建为可监控、可熔断、可自动进化的增长引擎——实现人力投入与收入增长的强耦合。关键技术路径包括:长尾问题词驱动的精准获客、结果保障型LTV拉升机制、低代码自动化工具链支撑的跨职能人效跃迁,以及以UTV(单位时间价值产出)为标尺的数据驱动决策体系。适用于已有MVP和早期付费客户、正面临增长瓶颈的SaaS团队,提供从0到1000万美元ARR的结

weixin_30825199的博客 788

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

干货!这 8 款 AI 编程工具,帮你少走弯路!

随着人工智能技术的飞速发展,AI 编程工具已从新奇玩具演变为软件开发的核心生产力工具。2025 年,全球 AI 编程市场规模已突破 6.8 万亿元,中国市场年增长率高达 68.5%。面对琳琅满目的工具选择,开发者们常常陷入选型困境。本文基于最新行业数据和实测经验,为你带来八大主流 AI 编程工具的深度测评,帮助你在技术选型中少走弯路。

u012725843的博客 1316

XR Interaction Toolkit实战:为HTC Vive Cosmos打造抓取、投掷与UI交互(Unity 2023教程)

本文详细介绍了如何使用Unity 2023和XR Interaction Toolkit为HTC Vive Cosmos开发抓取、投掷与UI交互系统。通过实战案例'VR投掷训练室',从基础配置到高级功能实现,涵盖物理抓取、精准投掷机制和VR UI交互设计,帮助开发者提升VR交互开发技能。

weixin_30562507的博客 257

本地AI助手部署指南:DeepSeek Harness与Ollama集成实践

AI Agent作为当前人工智能领域的热门技术,通过模拟人类决策过程,能够自主规划、调用工具并执行复杂任务。其核心原理在于将大语言模型的推理能力与外部工具API相结合,形成可闭环的工作流。这种技术架构的价值在于显著提升了AI系统的实用性和自动化水平,使其从单纯的对话工具转变为能够解决实际问题的智能助手。在应用场景上,AI Agent广泛应用于代码生成、数据分析、自动化办公等领域。本文聚焦于如何通过DeepSeek Harness平台与Ollama本地模型的集成,实现隐私安全、离线可用的AI助手部署方案,特别

dengjuanshou7445的博客 476

初创团队如何用规范驱动开发实现高效协作

规范驱动开发(Spec-Driven Development)是一种以可执行契约为核心的技术协作范式,其本质是将需求、接口、数据模型等关键约定转化为机器可读、人工可懂、流程可验的轻量规范。它源于软件工程中的契约式编程思想,通过OpenAPI、JSON Schema、TypeScript接口等技术载体,实现跨角色(产品/前端/后端/测试)的语义对齐与自动化校验。相比大厂依赖流程冗余兜底,初创公司更需spec作为‘组织能力替代品’,在无专职BA、无成熟治理平台的前提下,规避需求歧义、减少返工、控制技术债。典型落

weixin_30265103的博客 448

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

团队协作编程平台与AI编程助手的四层能力评估体系

现代软件开发正从单点智能补全迈向协同式AI工程化——核心在于平台能否深度理解代码语义、承载跨角色协作任务、嵌入安全治理机制并驱动组织知识沉淀。这涉及上下文理解(语法/语义/契约三层)、协作动作粒度(原子/事务/流程级)、数据驻留与权限继承等治理能力,以及知识捕获-更新-应用的闭环效率。GitHub Copilot、Cursor、Manus等工具在这些维度表现差异显著,尤其在金融、IoT、SaaS等复杂业务场景中,上下文理解深度和AI协作动作承载力直接决定PR吞吐、新人上手与线上缺陷率。本文基于14个月、17

weixin_30800987的博客 564

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

未来SaaS创业者将不再沉浸于「大合同」狂欢

国内多数早期企业服务SaaS公司还处在追求规模化销售、提高销售人效比的阶段。但是始终不要忘记关注NDR,了解你的产品或服务是否能够满足客户的需求并吸引老客户。来源:ToB行业头条 (ID:wwwqifu)作者:方凯未来几年企服行业将在新人群、新场景、新生态和新行业四个方向发生巨大变化。与此同时,专注产品的SaaS公司更具资本和成长效率,容易获得从0-1的产品增长飞轮,而...

ITValue的专栏 419

2021年至今GitHub星标增长最快TOP26-30项目深度解析

2026年GitHub热门开源项目TOP26-30概览:Tauri(85k+⭐)成为Electron轻量替代,用Rust构建高性能桌面应用;AFFiNE(35k+⭐)是本地优先的Notion开源替代品;Bruno(28k+⭐)以离线优先特性挑战Postman;HTMX(35k+⭐)以14KB体积实现服务器驱动UI;Excalidraw(75k+⭐)凭借手绘风格成为最受欢迎绘图工具。这些项目分别在跨平台开发、知识管理、API测试、前端框架和协同设计领域产生重大影响,共同特点是解决现有工具痛点、推动技术范式转变

欢迎光临~知1而N的博客 258

AI Agent实战:一人公司如何用6个智能体重构团队运营

AI Agent作为人工智能领域的重要分支,其核心原理是通过特定任务训练或提示工程,使模型能够自主或半自主地执行复杂工作流。这项技术的价值在于将人类从重复性、流程化的任务中解放出来,实现降本增效与规模化执行。在工程实践中,AI Agent已广泛应用于自动化办公、智能客服、代码生成、数据分析等场景。本文以一人公司的实际运营为例,详细拆解了如何构建由六个专业化AI Agent组成的虚拟团队,分别负责战略分析、产品反馈、代码开发、内容创意、法务风控和财务数据等核心职能。通过GLM-5-Turbo、Claude C

weixin_34393428的博客 373
上一篇: 80岁图灵奖得主再度出山,打造基于数据库的云原生操作系统 DBOS
下一篇: 搭建基于 Snowflake 的 CI/CD 最佳实践!
Bytebase
博客等级 码龄5年 1349粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值