专栏首页程序你好系统集成模式介绍

系统集成模式介绍

在当今的mashup-driven(混搭驱动)的世界中,使用集成来提取、转换和利用数据是大多数软件工程师的首要任务。理解经过验证的集成模式很重要,它可以帮助简化集成过程和流程。

集成风格

在定义一个或多个不同源之间的集成时,必须回答“How”问题才能继续进行。换句话说,一个人必须决定怎么样进行集成。这通常称为集成样式。

远程过程调用

远程过程调用(Remote procedure invocation, RPI)是集成领域的先驱,是在计算早期实现API的首选方法。在这种方法中,提供者将允许外部进程向封闭的应用程序发出请求。外部调用者具有发出请求的规范,以及对响应的期望,但是所有逻辑都是使用黑盒方法进行的。在本例中,RPI是用于对目标系统执行某些操作的机制。

我们来看一个处理金融事务的应用程序,在RESTful API流行之前,供应商可能会提供一个允许从外部源发布事务的API。这个API是用RPI实现的。

开发人员将编写一个程序来收集所需的信息,然后使用RPI连接到应用程序。RPI/API请求的结果打包在响应中,该信息由调用应用程序处理。

共享的数据库

共享数据库集成样式利用数据库来连接两个或多个应用程序。因此,每个应用程序都将维护到共享数据库的连接,其中包含要集成的数据信息。

例如,在数据库的staging表中使用INSERT语句可能会触发一个存储过程,该存储过程将执行业务逻辑——最终为使用相同的共享数据库集成的其他应用程序更新数据库中的其他属性。

Messaging

消息收发集成式开始于面向服务的体系结构(SOA)实现,利用企业服务总线(ESB)作为消息本身的基础。

使用金融事务示例,自定义应用程序可以简单地在ESB上放置一条消息,请求发布某个事务。该系统提交消息,并依赖消息集成样式来处理剩余的任务。

在金融系统方面,放在总线上的消息触发和事件使用消息并根据消息的性质采取适当的操作。基于消息本身中使用的消息队列和/或元数据,金融系统理解需要执行的任务。

当完成时,金融系统可能会在总线上放置一个新的消息,这个消息可以被原始系统使用。在这种情况下,可能与附加到原始请求的惟一事务信息有关,以进行审计验证。

消息的概念

集成的信使主要基于消息传递的概念。这与其他技术驱动的解决方案没有什么不同,因为有些东西被用来将重要的信息传递给手边的解决方案。以RESTful api为例,courier通常是传递到POST请求或从GET请求返回的有效负载。

消息传递系统

消息传递概念的一个主要好处是,异步消息不需要两个系统同时在线和可用。一个系统可以将消息放置在ESB中,ESB可以立即由另一个系统处理,也可以在几个小时后按计划处理。无论哪种方式,都可以在不影响其他条件的情况下处理这两种情况。

消息系统使用通道(或队列)来组织和分类需要集成的信息。例如,如果源系统需要与财务系统和人力资源系统进行通信,消息将为每种消息类型使用不同的通道。

消息路由

消息路由的思想通常在更复杂的集成场景中实现,在到达目标目的地之前,可能需要消息跨多个通道路由。

在这种情况下,消息路由器可以提供帮助,允许将消息提交给专用组件,该组件将分析消息并使用业务逻辑根据消息本身的内容确定消息路由的位置。

在金融事务示例中,源系统只需要发布一个事务。如果公司维护多个金融系统,源系统可能无法详细了解哪个系统处理哪些事务。消息路由器将成为消息的来源,并将有适当的知识,以完成消息的传递到适当的渠道。

消息路由更深入,可以使用大量的模式来帮助路由过程。一些常见的模式包括:

消息过滤:允许根据消息中的属性过滤消息。

散集:允许同步消息同时发送到多个源。

消息聚合器:允许对来自多个源的消息进行处理,并将其推入到单个结果消息中,可能用于处理散点收集的结果。

消息转换

将不同的系统连接起来通常会暴露出给定的响应与源系统的预期响应或首选响应不匹配。消息转换是在两个系统之间执行必要的数据转换的一种机制。

使用金融系统示例,源系统可能希望用JSON发送数据,但金融系统希望使用XML。使用消息转换,传入的JSON数据将被分析和转换(即将)转换为XML,以准备通过SOAP web服务进行处理。这基本上是使用中的规范化程序集成模式。

一些已建立的消息转换模式包括:

Content Enricher:允许修改元数据,以满足目标系统的期望。

索赔检查:暂时简化消息,以便删除元数据,这些元数据在当时并不需要,但可以用于以后的处理。

内容过滤器:从消息中完全删除元数据,比上面提到的索赔检查方法更持久。

系统管理

基于集成样式和给定消息的流程和处理,集成的管理是解决方案的核心。

控制总线

控制总线模式是集成系统中的管理层。正如预期的那样,控制总线使用集成系统实现的相同概念。

当管理层需要将用户报告给系统管理员时,使用集成系统捕获的消息数据来报告状态或遇到的任何已知问题。

消息存储

管理任何系统通常都需要一定程度的历史信息或度量。在不影响消息本身的瞬态性质的情况下检查消息的度量标准的挑战。消息存储模式通过向消息存储发送消息的副本来满足这一需求。一旦消息的副本存储在消息存储库中,就可以维护必要的指标并将其传递给控制总线以进行处理和报告。

智能代理

消息通常流经一个固定的输出通道。但是,在某些情况下,组件需要将回复消息发送回原始请求中指定的通道。当这种需求出现时,可以使用智能代理模式。

智能代理包括拦截消息的逻辑,以便捕获发件人指定的返回地址。一旦处理完成,智能代理将用接收到原始请求时捕获的地址替换固定的输出通道目的地。

结论

保持对集成风格、消息概念和系统管理模式的理解,可以帮助指导集成开发人员使用跨任何集成项目(无论行业如何)转换的实践。这样做将减少作为额外资源支持和维护现有集成项目的过渡时间。

本文分享自微信公众号 - 程序你好(codinghello)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 消息通知子系统用户需求

    程序你好
  • 大规模分布式系统的跟踪系统:Dapper设计给我们的启示

    程序你好
  • 符合架构的测试

    程序你好
  • 使用消息中间件时,如何保证消息仅仅被消费一次?

    原文链接:https://www.toutiao.com/i6803224493616529927/

  • 你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你

    昨天我们将消息队列这个组件加入到了我们的商城系统里,并且通过秒杀这个实际的案例进行了实际演练(秒杀系统每秒上万次下单请求,我们该怎么去设计),知道了它对高并发写...

    架构师修炼
  • 使用消息中间件时,如何保证消息仅仅被消费一次?

    消息中间件使用广泛,常用来削峰填谷、系统解耦、异步处理。异步处理可能是使用的最多的场景了,比如现在的技术博客网站,都采用积分制,用户发表一篇文章后,可以获取想要...

    平头哥的技术博文
  • CSS魔法堂:更丰富的前端动效by CSS Animation

    ^_^肥仔John
  • CSS魔法堂:更丰富的前端动效by CSS Animation

     在《CSS魔法堂:Transition就这么好玩》中我们了解到对于简单的补间动画,我们可以通过transition实现。那到底多简单的动画适合用transti...

    ^_^肥仔John
  • R in action读书笔记(4)-第六章:基本图形(下)

    其中的x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。在定义直方图中的单元时,默认...

    统计学家
  • 检查Android是否具有摄像头

    通常我们进行摄像头操作,如扫描二维码需要判断是否有后置摄像头(Rear camera),比如Nexus 7 一代就没有后置摄像头,这样在尝试使用的时候,我们需要...

    技术小黑屋

扫码关注云+社区

领取腾讯云代金券