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



大型科技公司中的多个团队(拥有不同的系统组件/微服务)如何共享他们的数据库。

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

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

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

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

在微服务架构中,每个微服务都公开端点,其他微服务可以访问服务之间的共享信息。因此,一个服务将存储由另一个微服务管理的记录的最小信息。例如,如果用户服务想在电子商务案例中为特定用户获取订单,那么订单服务将暴露一个端点,给定用户id,则订单服务将返回与所提供的用户id相关的所有订单,以此类推……因此,从本质上讲,订单服务需要存储的与用户相关的唯一字段是用户id,其余用户详细信息与之无关。

为了进一步提高团队之间的凝聚力和理解力,还构建了数据发现API/文档,以便与其他团队共享数据库的元数据,以进一步解释每个表/字段对高效规划微服务意味着什么。您可以阅读更多关于此类公司如何构建数据发现工具的信息此处

如果我理解正确,您不确定公司中不同部门是如何接收数据的?

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

让我们笼统地说,我们正在寻找的公司是沃尔玛。沃尔玛的数据库中有数百万件商品。每个物品都有一个唯一的ID等。

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

现在,让我们假设沃尔玛已经决定建立一个应用程序。。。他们需要完全一样的东西!好的是,我们已经创建了这些API,我们将使用完全相同的API来获取数据。

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

^^这基本上允许沃尔玛只从其核心数据库中获取商品,该数据库只包含商品所需的详细信息(例如名称、尺寸、颜色、SKU、详细信息等),并将其链接到另一个数据库,也就是说,您的本地沃尔玛,该数据库仅包含与该商品的沃尔玛位置相关的信息(例如价格、库存、通道号等)。

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

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

由于不同的公司/组织文化以及对一致性和可用性的不同要求,大型科技公司之间甚至内部使用的方法有很大的多样性。

任何时候你都有一个明确的";查询另一个服务/另一个DB";依赖性,您有一个耦合,它倾向于将一个服务中的问题转化为两个服务中问题(这不一定是单向的:查询服务很可能遇到一个问题,该问题会级联为被查询服务中的一个问题(当缓存承载时,这种情况尤其可能发生,这在不久的过去导致了至少一个FANMAG的重大停机)。

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

最新更新