单个数据摄取服务与多个单独的微服务?
Single data ingestion service vs multiple individual microservices?
我试图了解针对每个数据源使用单个数据摄取微服务与使用多个单独微服务的优缺点。
上下文:
从客户第一次注册到我的平台开始,我需要获取多个数据源来检索客户数据;但是,每个来源,例如 Strava、Garmin、Endomondo(健身数据来源),它们都有不同的提取数据的方法,其中一些方法比其他方法更复杂。
单个数据摄取的优点:
- 会出现更少的微服务,因此可能更少的集成问题
- 开发时间减少
- “更少”的团队需要负责,因为只有一项服务(如果我们遵循每个服务规则一个团队)
单一数据摄取的缺点:
- 更难查明服务中的故障
- 所有数据源的可用性都可能受到影响,因为从技术上讲存在单点故障
- 随着未来更多资源的出现,代码库将变成一个迷你单体
当前决定
从利弊来看,从事实来看,为每个来源提供单独的服务看起来是一个更好的选择。如果我要继续,我正在考虑使用:
- API 网关模式 封装各个微服务。
- 共享数据库模式 用于存储身份验证令牌,例如
- 异步消息传递模式将从源检索到的数据发送到最终目的地
我期待听到我是否遗漏了关于收养论点的任何利弊或一些反驳点!
首先,我不得不说,在我看来,你选择了正确的选项,这个选项的最大优点是你没有耦合不同的源,因此,不同的 API提供者可以改变或其中一些消失,或者如您之前所说,出现更多来源,而您的其他来源根本不会受到影响。没有源代码更改,也没有更新的版本来修复它。
使用异步消息传递模式可以保证您的最终目的地不会与您的源耦合。
我唯一不完全同意的一点是共享数据库模式,用于在每个提供者中进行身份验证的令牌是否相同?在那种情况下,无论如何,如果唯一需要在服务之间持久化和共享的数据是令牌,我会使用像 redis 这样比关系数据库更快的分布式缓存
我试图了解针对每个数据源使用单个数据摄取微服务与使用多个单独微服务的优缺点。
上下文: 从客户第一次注册到我的平台开始,我需要获取多个数据源来检索客户数据;但是,每个来源,例如 Strava、Garmin、Endomondo(健身数据来源),它们都有不同的提取数据的方法,其中一些方法比其他方法更复杂。
单个数据摄取的优点:
- 会出现更少的微服务,因此可能更少的集成问题
- 开发时间减少
- “更少”的团队需要负责,因为只有一项服务(如果我们遵循每个服务规则一个团队)
单一数据摄取的缺点:
- 更难查明服务中的故障
- 所有数据源的可用性都可能受到影响,因为从技术上讲存在单点故障
- 随着未来更多资源的出现,代码库将变成一个迷你单体
当前决定 从利弊来看,从事实来看,为每个来源提供单独的服务看起来是一个更好的选择。如果我要继续,我正在考虑使用:
- API 网关模式 封装各个微服务。
- 共享数据库模式 用于存储身份验证令牌,例如
- 异步消息传递模式将从源检索到的数据发送到最终目的地
我期待听到我是否遗漏了关于收养论点的任何利弊或一些反驳点!
首先,我不得不说,在我看来,你选择了正确的选项,这个选项的最大优点是你没有耦合不同的源,因此,不同的 API提供者可以改变或其中一些消失,或者如您之前所说,出现更多来源,而您的其他来源根本不会受到影响。没有源代码更改,也没有更新的版本来修复它。 使用异步消息传递模式可以保证您的最终目的地不会与您的源耦合。
我唯一不完全同意的一点是共享数据库模式,用于在每个提供者中进行身份验证的令牌是否相同?在那种情况下,无论如何,如果唯一需要在服务之间持久化和共享的数据是令牌,我会使用像 redis 这样比关系数据库更快的分布式缓存