大型科技公司如何在多个团队之间共享数据库?

How big tech companies share databases across multiple teams?

一家大型科技公司的多个团队(拥有不同的系统 components/micro-services)如何共享他们的数据库。

我可以想到多个需要这样做的用例。例如,在电子商务公司中,相同的产品将在多个团队之间共享,例如产品首先是产品引导服务的一部分,然后可能是目录服务(存储所有产品和类别),然后是搜索服务、购物车服务、下单服务、推荐服务、取消&return服务等。

如果他们不共享任何数据库,那么

  1. 他们是否都拥有具有相同产品 ID 的产品的冗余副本并且
  2. 在多个团队之间实现一致性不是一个挑战吗?

在这两种情况下,无论他们是否共享数据库,我都有多个相关的疑问。 我浏览了多个关于软件设计的技术博客和视频,但仍然没有得到令人满意的答案。一定要分享一些资源,这些资源可以提供大型科技公司端到端工作方式的完整工作流程。 谢谢

如果我没理解错的话,你不确定一个公司的不同部门是如何接收数据的?

我们的想法是创建可重用且有效的 API 来解决这个问题。

一般来说,我们正在寻找的公司是沃尔玛。沃尔玛的数据库中有数百万件商品。每个项目都有一个唯一的 ID 等

如果沃尔玛通过 walmart.com 在线销售商品,他们必须有办法获取这些商品,因此他们创建 API 并根据特定查询条件使用它们来获取商品.

现在,假设沃尔玛已决定构建一个应用程序...好吧,他们需要那些完全相同的商品!好吧,幸好我们已经创建了那些 API,我们将使用完全相同的那些来获取数据。

现在,沃尔玛如何管理哪些商品在哪些商店有售,价格是多少?他们通常会 link 通过额外的数据库模式表并将它们与主键和外键绑定在一起的元数据。

^^ 这实质上允许沃尔玛仅从其 CORE 数据库中获取仅包含商品所需详细信息(例如名称、尺寸、颜色、SKU、详细信息等)的商品,并且 link 它到另一个数据库,也就是说,您当地的沃尔玛,其中包含仅与您的沃尔玛位置相关的关于该项目的信息(例如价格、库存、过道编号等)。

所以从某种意义上说,使用多个数据库是的。

也许这会让您走更多的路:https://learnsql.com/blog/why-use-primary-key-foreign-key/ https://towardsdatascience.com/designing-a-relational-database-and-creating-an-entity-relationship-diagram-89c1c19320b2

在微服务架构中,每个微服务都会公开端点,其他微服务可以在这些端点访问服务之间的共享信息。因此,一个服务将存储由另一个微服务管理的记录的最少信息。 例如,如果用户服务想要在电子商务案例中获取特定用户的订单,那么订单服务将公开一个端点,给定用户 ID 将 return 所有与提供的用户 ID 相关的订单等等...所以本质上,订单服务需要存储的与用户相关的唯一字段是用户 ID,其余用户详细信息与其无关。

为了进一步提高团队之间的凝聚力和理解力,还构建了数据发现 apis/documentation 以与其他团队共享数据库的元数据,以进一步解释每个 table/field 对有效计划的意义一个微服务。您可以阅读更多有关此类公司如何构建数据发现工具的信息 here

在不同的 company/org 文化以及对一致性和可用性的不同要求的推动下,大型科技公司之间甚至内部使用的方法都非常多样化。

任何时候你有一个明确的“查询另一个 service/another 数据库”依赖,你有一个耦合往往会把一个服务中的问题变成两个服务中的问题(这不一定是单向的事情:查询服务很可能遇到一个问题,这个问题会级联成被查询服务中的问题(当缓存变得承载时,这尤其可能导致至少一个 FANMAG 发生重大中断在不远的过去))。

这导致一些可以被称为大型科技公司的公司在他们的服务设计中避开这种方法,通常是通过让服务发布描述已更改为持久日志(仅附加存储)的内容的事件。其他服务订阅该日志并使用事件来构建他们自己对其他服务拥有的数据的最终一致视图(即存在某种程度的数据重复,服务存储它们运行所需的数据)。