欢迎访问深圳敏捷云计算科技有限公司!

甲骨文云OCI -APP应用开发 - 高效消息传递

2024-03-07 原创文章

消息解决方案连接您的应用程序组件,使它们能够可靠地交换数据、透明地扩展并达到高可用性水平。它们使您能够将处理过程与数据生产者解耦,有效地缓冲未处理的消息,并提供消息持久性、处理可扩展性和应用程序弹性。面向消息的应用程序涵盖了一系列架构 - 组件之间的数据传输可能是一个定义良好的分布式和融合处理管道的一部分,或者组件可能向多个独立的下游系统发布消息,这些系统独立发展。有三种常见的现代消息模型,每种模型都有共享和独特的应用程序需求:


事件流处理a

事件流处理应用程序摄取高容量和高速度的数据流,这些数据必须实时处理。原始数据必须处理以提取见解,这些见解可能被其他应用程序组件使用,用于监控,或者可能存储以供以后分析。



此示例事件流处理应用程序使用甲骨文云基础设施流媒体或甲骨文事务性事件队列(TEQ)作为底层消息解决方案,甲骨文云基础设施函数用于实时处理,以及甲骨文自主数据库作为后端存储。


发布-订阅

发布-订阅或pub/sub是一种通信模式,其中数据生产者将数据发布到特定主题,然后任何数量的下游消费者可以通过订阅这些主题来消费这些数据。生产者和消费者之间的耦合相当松散,以便消费者可以独立发展,而不影响上游生产者。


此示例展示了如何使用甲骨文云基础设施流媒体或甲骨文TEQ来实现发布/订阅消息模式。


消息队列

消息队列使分布式有状态处理成为可能,其中上游和下游组件紧密绑定并共同实现应用程序工作流。消息解决方案必须支持至少一次交付等语义,以确保消息在被消费之前不会丢失。



此示例展示了如何使用甲骨文云基础设施队列或甲骨文TEQ来实现消息队列。


设计原则

构建消息应用程序或平台时,请使用以下设计原则。

将应用构建为一组使用REST API通信的服务

  • 使用行业标准API,如Kafka和JMS,以提供应用程序互操作性并无缝构建混合云和多云消息应用程序。甲骨文云基础设施(OCI)流媒体提供Kafka兼容API,甲骨文事务性事件队列(TEQ)支持Kafka和JMS API。Kafka和JMS都被第三方产品广泛支持。例如,您可以使用Confluent Kafka JMS连接器在甲骨文TEQ和Kafka之间传输消息。您还可以在甲骨文容器引擎Kubernetes集群上部署的Kafka Connect连接到第三方产品。甲骨文云基础设施队列可以使用RESTful API定义(带有OpenAPI规范)或使用行业标准STOMP协议调用。
  • 使用托管服务消除应用开发和运维的复杂性
  • 使用内置基础设施维护和安全补丁的完全托管服务,如OCI流媒体、OCI队列和甲骨文TEQ以及甲骨文自主数据库(ADB)的高级队列(AQ)功能。这些服务高度可用,自动在可用性域间复制,并支持响应变化负载的扩展自动化。
  • 保持应用层无状态
  • 与消息相关的状态,如消息队列中的位置,永远不应存储在应用或本地文件系统中,因为这样做可能导致数据丢失,如果应用实例失败。应用程序可能缓存消息内容以供处理,但消息解决方案应保持所有消息数据的唯一真实来源。相关元数据,如消息队列中的位置,应存储在数据库或对象存储中,以避免消息丢失并确保幂等操作。这有助于故障恢复,同时也使服务扩展或缩减更易于实现,而不会丢失正确性。
  • 实现端到端监控和追踪
  • 保持对应用程序健康状况、性能和运营状态的权威理解。使用甲骨文云可观察性和管理平台的服务组合在应用程序堆栈的所有层面获得可见性和可操作的洞见,从数据生产者和消费者到消息管道本身。监控队列长度和处理持续时间,以捕获错误和瓶颈并检测订阅主题的服务问题。
  • 通过自动数据复制和故障恢复消除单点故障
  • 将消息数据备份到持久存储以满足监管和合规需求。使用跨区域备份进行灾难恢复。在消息应用程序中实现幂等性,例如通过在OCI队列中使用消息可见性超时。将无法恢复的错误写入单独的流、死信队列或持久存储,而不阻塞主执行管道。
  • 实施自动化的深度防御方法来保护您的应用和数据
  • 实施甲骨文云基础设施身份和访问管理(IAM)政策,仅允许授权用户从OCI流媒体和队列创建、发送或接收数据。应用最小可达性原则,通过使用私有端点和服务网关保护对消息端点的访问,从而限制互联网的访问。使用OCI流媒体、OCI队列和TEQ的开箱即用功能来加密静态和传输中的数据,以实现数据机密性。然而,如果您需要更多的密钥轮换所有权,使用甲骨文云基础设施金库服务来安全管理您的主密钥。



架构

以下图表展示了如何使用OCI流媒体实现事件流处理。

使用OCI流媒体实现事件流处理和发布/订阅消息模式,并使用甲骨文云基础设施队列实现消息队列。使用甲骨文自主数据库来持久化处理后的事件数据。OCI函数可用于处理事件数据,然后由下游应用程序组件消费或持久化到数据库之前。


通过为您的应用程序、数据库和消息服务使用专用子网来实现网络隔离。通过使用私有端点来保护您的流访问。使用甲骨文云基础设施身份和访问管理(IAM)政策来限制对队列的访问。


使用甲骨文云基础设施对象存储进行长期消息保留。使用像服务连接器这样的无服务器服务,无缝地将数据从OCI流媒体移动到对象存储,并启用对象存储的跨区域备份来实现多区域备份。使用部署在容错的甲骨文容器引擎Kubernetes(OKE)环境上的Kafka MirrorMaker 2.0实现跨区域灾难恢复策略,以异步复制流之间的数据。这种设置使恢复时间目标(RTO)和恢复点目标(RPO)达到几分钟。使用远程VCN对等连接以确保数据传输过程中的最小延迟。


使用死信队列隔离问题消息。创建队列时会自动创建死信队列。死信队列可以帮助您避免失败的消息阻塞主执行管道。然后可以分析死信队列中的消息,以确定它们为什么失败。


通过在外部存储(如对象存储)中存储处理过的消息的偏移量,将幂等性纳入应用程序。通过查询外部存储来检测和丢弃重复消息。分类容易恢复的错误,并允许消息重放。



此架构使用以下服务和技术:

流媒体

  • 甲骨文云基础设施流媒体提供了一个完全托管、可扩展且持久的存储解决方案,用于摄取连续的、大量的数据流,您可以实时消费和处理这些数据。您可以将流媒体用于摄取大量数据,例如应用程序日志、操作遥测、Web点击流数据;或者用于其他数据持续且按顺序在发布-订阅消息模型中产生和处理的用例。

队列

  • 甲骨文云基础设施队列提供了一个可扩展的系统来处理消息,同时处理复杂的管理任务,如保证至少一次处理、跟踪和客户隔离。这个集中式服务还管理消息排序和处理状态,允许无状态的客户端进程卸载游标跟踪。

函数

  • 甲骨文云基础设施函数是一个完全托管的、多租户的、高度可扩展的、按需的函数即服务(FaaS)平台。它由Fn Project开源引擎驱动。函数使您能够部署代码,并直接调用或响应事件触发它。甲骨文函数使用托管在甲骨文云基础设施注册表中的Docker容器。

服务连接器

  • 甲骨文云基础设施服务连接器中心是一个云消息总线平台,协调OCI中服务之间的数据移动。您可以使用服务连接器将数据从源服务移动到目标服务。服务连接器还允许您选择性地指定在数据交付到目标服务之前执行的任务(例如函数)。
  • 您可以使用甲骨文云基础设施服务连接器中心快速构建安全信息和事件管理(SIEM)系统的日志聚合框架。



数据库中心的替代架构

此架构使用事务性事件队列(TEQ)来实现现代应用程序中的消息模式。TEQ是甲骨文自主数据库的内置功能。



此架构通过消除使用外部流媒体或队列服务的需求,提供了简化性,并提供了简化常见微服务模式的事务性消息功能。


TEQ将数据和消息处理结合在一个可扩展的基础设施中,简化了生命周期管理、安全性和灾难恢复,同时提供高性能。TEQ支持常见的消息模式,包括流媒体、队列和发布/订阅。您可以使用TEQ实现跨消息和数据库操作的事务,并使用极少量甚至无需额外代码就能轻松实现像事务性出站和恰好一次消息等消息模式。甲骨文TEQ为在数据库中运行的应用程序提供恰好一次消息传递。这意味着您不需要维护消息ID来检查重复消息或在应用程序级别构建幂等消费者。TEQ支持事件处理中常见的小消息以及与业务工作流相关的更大有效负载,并且还可以作为安全的事件网格。


消除外部流媒体或队列服务简化了状态管理。事件和消息存储在应用程序使用的同一个数据库中。这使您能够轻松实现并维护事件、消息和应用程序更改之间的一致性。如果出现需要进行时间点恢复或灾难恢复的故障,所有内容(事件、消息和应用程序数据)都会自动恢复到一致状态。


TEQ受益于自主数据库的高可用性。TEQ中的消息数据通过ADB的跨区域复制自动备份并受到自治数据防护的保护。您可以使用甲骨文实时应用集群和甲骨文活动数据防护的高可用方式部署甲骨文TEQ,这两者都是甲骨文自主数据库的内置功能。甲骨文实时应用集群在区域内提供可用性,而甲骨文活动数据防护提供跨区域灾难恢复保护。



如果您的应用程序需要执行以下任何操作,请使用此架构:

  • 需要实现消息队列并要求具有诸如事务性出站之类的语义
  • 不需要独立扩展数据库和消息基础设施


此架构使用以下服务和技术:

  • 事务性事件队列(TEQ)和高级队列(AQ)
  • 事务性事件队列(TEQ)和高级队列(AQ)是与甲骨文数据库集成的强大且功能丰富的消息队列系统。事务性事件队列(TEQ)是一种高性能的分区内存实现,每个队列有多个事件流。高级队列(AQ)适用于更简单的工作流用例。这些功能利用甲骨文数据库来持久化消息并提供高吞吐量和可扩展性。
  • 函数
  • 甲骨文云基础设施函数是一个完全托管的、多租户的、高度可扩展的、按需的函数即服务(FaaS)平台。它由Fn Project开源引擎驱动。函数使您能够部署代码,并直接调用或响应事件触发它。甲骨文函数使用托管在甲骨文云基础设施注册表中的Docker容器。

不推荐的架构

  • 单体消息和服务总线应用程序
  • 诸如RabbitMQ之类的消息解决方案可能通过开放标准和API支持与其他组件的集成。然而,这些解决方案需要显著的SME(主题专家)管理工作,并且可能不提供分布式冗余和高可用性,除非自行管理复杂的拓扑。
  • 在自管云或本地环境中的Kafka集群
  • 尽管这种解决方案提供可扩展性和高可用性,但它需要显著的专业开发人员知识和广泛的SME运营管理开销。由于生产前的准备时间和高总拥有成本(TCO)风险,选择此选项之前请谨慎考虑。


考虑因素

在实现消息设计模式时,请考虑这些实施选项。

根据您的应用程序需求选择合适的消息平台

基础平台和服务可能看起来相似且具有共同的特性。然而,每个平台都有其独特的特性和优势,这可能更符合您的应用程序需求。例如:

  • 如果您的应用程序需要一个实时、高吞吐量的消息平台,提供消息重播和发布-订阅能力,请使用OCI流媒体或事务性事件队列。
  • 如果您需要一个可扩展且可靠的点对点缓冲区来异步移动数据,请使用事务性事件队列。
  • 使用服务连接器中心(SCH)来启用与基础设施资源的集成。
  • 在设计与甲骨文自主数据库集成的新微服务时,请在数据库中使用事务性事件队列(TEQ)。



公开案例研究

基于甲骨文流媒体的架构

Tango Eye将监控视频转换为零售行业的可操作洞见。

  • 甲骨文云基础设施(OCI)流媒体作为各种微服务的低维护发布-订阅消息系统。
  • 甲骨文云基础设施函数执行无服务器作业,无需任何工程监督。
  • 甲骨文云基础设施对象存储的生命周期策略自动归档和清除数据,降低成本,同时不减少Tango Eye基于AI的分析的价值。
  • 基于甲骨文TEQ的架构
  • FedEx使用甲骨文E-Business Suite和使用甲骨文TEQ构建的业务事件管理器,处理每天交付的1550万包裹的应收账款。
  • FedEx已将E-Business Suite移至甲骨文云基础设施对象存储,使用Exadata云服务。E-Business Suite工作流和业务事件系统完全基于甲骨文高级队列(AQ)消息构建。
  • 甲骨文AQ简单易用,适合工作流编排。对于高吞吐量事件,甲骨文TEQ是高性能的即插即用替代品,每个队列有多个事件流,与Apache Kafka互操作。


部署

通用健康组织(UHO)是一个符合现代应用程序开发框架原则的示例应用程序。特别是,它实现了Web或移动端、消息传递和事件驱动架构模式的元素,并且可在GitHub上获取。

  1. 访问GitHub。
  2. 克隆或下载仓库到您的本地计算机。
  3. 按照README文档中的指示操作。



开启您的Oracle云之旅:Agilewing - 您的智能云服务伙伴

作为Oracle的高级合作伙伴,Agilewing正重新定义企业体验Oracle云服务的方式。借助于其简化的开户流程和一流的技术支持,Agilewing将复杂的开户和操作流程转化为一种轻松、直观的体验。通过我们的一站式服务,您可以迅速开启并享受Oracle云的全方位服务,从而无缝融入云端世界。


Agilewing的AgileCDN服务,结合了OCI的云基础服务,提供了一流的全球内容加速解决方案。超过2800个全球POP节点和7000个直连点的强大网络,确保了无论您的业务扩展到全球哪个角落,都能保持高效稳定的运行。


利用Oracle云的先进技术,Agilewing致力于简化云服务搭建、云迁移和业务出海的过程。我们的合作模式为客户带来经济高效的解决方案,使他们能够更加专注于核心业务,同时享受Oracle云的高性能和安全保障。


Oracle云服务,作为一个充满潜力的领域,以其高性能、安全性和全球统一的服务标准,为各类企业开启了新的机遇之门。通过Agilewing的专业服务,无论是个人用户还是企业,都能轻松步入这个充满技术革新和高效能的新时代。现在,就让Agilewing引领您开始探索Oracle云服务,打开一个全新的世界大门