事件驱动架构是否应该针对所有数据和分析平台?
Should event driven architecture be targeted for all data & analytics platforms?
例如,
- 您有一个 IT 资产,其中混合存在来自多个系统的批处理和实时数据源,例如ERP、项目管理、资产、网站、监控等
- 目的是将数据源集成到云环境中(不可知)。
- 需要对所有数据源的组合进行报告和分析。
- 不可避免地,某些源系统无法进行流式传输,因此需要批量加载。
- 根据摄取的数据执行 functionality/changes/updates 的潜在用例。
在创建面向未来的平台的体系结构方面,您希望如何设计它?
这是一个非常开放的问题,但您可以采用一些好的原则来帮助您朝着正确的方向前进:
避免点对点集成,让一切都通过几个共同点——最好是一个。使用 API 网关是一个很好的起点,大公司(Azure、AWS、GCP)都有自己的选择,此外还有很多不错的独立公司,例如 Tyk 或 Kong。
批处理和事件流是完全不同的,但即便如此,您仍然可以通过网关路由它们,以便获得集中的可观察性(报告、分析、警报等)。
尽可能使用基于标准的 API 规范。基于适当资源模型的良好 REST API 是一项非常重要的任务,如果您正在处理大量不同的遗留集成,则不确定它是否适合您正在做的事情。如果您打算采用 REST,请将 OpenAPI to specify the API's. Using this standard not only makes it easier for consumers, but also helps you with better tooling as many design, build and test tools support OpenAPI. There's also AsyncAPI 用于 event/async API 的
做一些架构。 将 sh*t 移动到云并不会删除 sh*t - 它只是将它移动到云。不要在新地方重现旧问题。
- 找出新解决方案中的逻辑组件:每个组件的作用是什么(存在的理由是什么)?不要忘记 API 目录等辅助组件
- 考虑分层集成(通常取决于它们将如何使用以及它们需要扮演什么角色,例如系统界面、编排、经验 APIs 等)。
- 想要以一致的方式处理数据而不考虑来源(您的 'agnostic' 评论)?您需要考虑如何摄取和处理数据。这可能会让您更多地考虑以数据/ETL 为中心的考虑因素,而不是集成考虑因素。
协同设计集成主要是数据的进出?是与第 3 方集成还是严格内部集成?
如果您正在为外部/第 3 方消费者设计,那么建议采用协同设计流程,因为您实际上是在为他们设计 API。
如果 API 供内部使用,请考虑将它们设计为供外部使用,这样 when/if 您以后决定这样做就不会那么难了。
退一步:
- 不断问自己“我们要解决什么问题?”。通常,如果有充分理解的理由,并且有业务(非 IT)的坚定支持,技术发起人就会成功。
- 谁想要报告,为什么 - 他们想解决什么问题?
正如您提到的,它是一个 IT 资产,也就是批处理和实时的企业级解决方案组合,因此首先您必须确定此迁移的最终目标是什么。您可以考虑重构应用程序。如果您试图使其成为事件驱动的,那么请评估重构工作和成本。职责分离是重构和迁移的关键因素。
如果您正在考虑对您的解决方案进行未来验证,那么请考虑使用云来存储和处理您的数据。不一定便宜,但云和本地的混合可能是一种方式。云提供商提供的服务可以以最低的成本移动您的数据。云原生解决方案可用于对您的数据进行分析。 AWS 或 Azure 中的数据库迁移服务可以移动数据,然后捕获持续的变化。因此,您可以继续使用本地数据库和应用程序并在云上执行报告分析。它将减轻您的事务数据库的负载。大多数从本地到云端的数据同步几乎是实时的。
例如,
- 您有一个 IT 资产,其中混合存在来自多个系统的批处理和实时数据源,例如ERP、项目管理、资产、网站、监控等
- 目的是将数据源集成到云环境中(不可知)。
- 需要对所有数据源的组合进行报告和分析。
- 不可避免地,某些源系统无法进行流式传输,因此需要批量加载。
- 根据摄取的数据执行 functionality/changes/updates 的潜在用例。
在创建面向未来的平台的体系结构方面,您希望如何设计它?
这是一个非常开放的问题,但您可以采用一些好的原则来帮助您朝着正确的方向前进:
避免点对点集成,让一切都通过几个共同点——最好是一个。使用 API 网关是一个很好的起点,大公司(Azure、AWS、GCP)都有自己的选择,此外还有很多不错的独立公司,例如 Tyk 或 Kong。
批处理和事件流是完全不同的,但即便如此,您仍然可以通过网关路由它们,以便获得集中的可观察性(报告、分析、警报等)。
尽可能使用基于标准的 API 规范。基于适当资源模型的良好 REST API 是一项非常重要的任务,如果您正在处理大量不同的遗留集成,则不确定它是否适合您正在做的事情。如果您打算采用 REST,请将 OpenAPI to specify the API's. Using this standard not only makes it easier for consumers, but also helps you with better tooling as many design, build and test tools support OpenAPI. There's also AsyncAPI 用于 event/async API 的
做一些架构。 将 sh*t 移动到云并不会删除 sh*t - 它只是将它移动到云。不要在新地方重现旧问题。
- 找出新解决方案中的逻辑组件:每个组件的作用是什么(存在的理由是什么)?不要忘记 API 目录等辅助组件
- 考虑分层集成(通常取决于它们将如何使用以及它们需要扮演什么角色,例如系统界面、编排、经验 APIs 等)。
- 想要以一致的方式处理数据而不考虑来源(您的 'agnostic' 评论)?您需要考虑如何摄取和处理数据。这可能会让您更多地考虑以数据/ETL 为中心的考虑因素,而不是集成考虑因素。
协同设计集成主要是数据的进出?是与第 3 方集成还是严格内部集成?
如果您正在为外部/第 3 方消费者设计,那么建议采用协同设计流程,因为您实际上是在为他们设计 API。
如果 API 供内部使用,请考虑将它们设计为供外部使用,这样 when/if 您以后决定这样做就不会那么难了。
退一步:
- 不断问自己“我们要解决什么问题?”。通常,如果有充分理解的理由,并且有业务(非 IT)的坚定支持,技术发起人就会成功。
- 谁想要报告,为什么 - 他们想解决什么问题?
正如您提到的,它是一个 IT 资产,也就是批处理和实时的企业级解决方案组合,因此首先您必须确定此迁移的最终目标是什么。您可以考虑重构应用程序。如果您试图使其成为事件驱动的,那么请评估重构工作和成本。职责分离是重构和迁移的关键因素。 如果您正在考虑对您的解决方案进行未来验证,那么请考虑使用云来存储和处理您的数据。不一定便宜,但云和本地的混合可能是一种方式。云提供商提供的服务可以以最低的成本移动您的数据。云原生解决方案可用于对您的数据进行分析。 AWS 或 Azure 中的数据库迁移服务可以移动数据,然后捕获持续的变化。因此,您可以继续使用本地数据库和应用程序并在云上执行报告分析。它将减轻您的事务数据库的负载。大多数从本地到云端的数据同步几乎是实时的。