实际中碰到的一个异构系统之间数据交换的处理方式设计

标签: 系统 数据 交换 | 发表时间:2013-07-05 15:56 | 作者:cyq1984
出处:http://blog.csdn.net

情况描述:

两个不同的业务系统M系统与E系统,两者之间的数据交换采用ESB平台,从而可以保证ESB内部的数据传递流程可以具有一个全局的事务,一旦发生任何异常,都会回滚。

数据传递的方向为从M系统传递至E系统。

前期约定的内容,ESB获取M系统的数据,数据获取方式为从ESB与M系统约定的数据库中间表中获取(相当于M系统的前置机),调用E系统的WebService,将数据写入E系统,并且将调用是否成功的结果写回与M系统约定的中间表中(写回M系统中间表的工作由ESB负责完成),调用E系统的WS之后,除了回写与M系统的中间表,还会有一些其他的数据库更新等操作。

问题:

  1. 事务的问题可以交由ESB来处理,可以忽略。
  2. 调用WS如果数据未能写入E系统,WS不会抛出异常,而是会返回一个未能写入的代码,并返回原因。
  3. 调用WS成功,并且成功写入E系统,但是,在后续ESB处理其他事情的过程中发生异常,事务照样回滚。而E系统的WS,没有补偿机制,不会对数据是否已经存在进行判断,而且E系统的WS由于各种原因,调用时性能不佳

解决方案:

对于问题1。无需关注。

对于问题2。由于前期ESB与M系统约定,一旦发生ESB调用E系统的WS未能写入的情况,M系统会重新生成新的数据,而不是对原有数据进行修改。ESB只需将调用E系统的WS的结果返回写入中间表即可,不管任何一方发生异常,均由M系统重新生成数据,重新传递。这样ESB只需监控新增的数据,并按顺序执行相应操作即可。

对于问题3。就需要在调用E系统的WS之前,对E系统中是否存在相应数据进行判断,如果存在,并且同时最近一次调用时返回的结果为正常,则不再重复调用WS,而是直接执行后续操作;如果不存在或者调用时返回的结果不正常,甚至没有返回结果,则重新从头开始执行相应操作。

另外,如果没有与M系统关于调用E系统WS未能写入的情况的约定,则ESB需要根据E系统的WS的返回值进行判断,如果不正常,则可以直接抛出一个异常,从而回滚整个事务(当然,也可以暂时将异常数据暂存至另外的数据库表中或者其他什么位置,防止此问题数据重复出现),保证流程下次可以再次取得此数值。当然,这样也存在一个问题,就是回滚整个事务,与M系统约定的中间表中,就无法取到调用结果是否正常的信息,除非在ESB平台中有一个地方可以查看异常信息及数据,并且有专人来处理此类事情,否则,表面看起来就是ESB停在某条数据那里不动了,会对业务产生影响。

还有一种方案就是由于监控的增量数据都会记录在一个表中,如果发生调用E系统的WS未能写入数据的情况,则不允许ESB将监控到的增量数据删除,并不是抛出异常回滚整个事务,也就能够正常查看到产生错误的原因。

个人认为最后的解决方案是一个比较不错的思路,记录一下以飨自己。

作者:cyq1984 发表于2013-7-5 15:56:57 原文链接
阅读:73 评论:0 查看评论

相关 [系统 数据 交换] 推荐:

实际中碰到的一个异构系统之间数据交换的处理方式设计

- - CSDN博客架构设计推荐文章
两个不同的业务系统M系统与E系统,两者之间的数据交换采用ESB平台,从而可以保证ESB内部的数据传递流程可以具有一个全局的事务,一旦发生任何异常,都会回滚. 数据传递的方向为从M系统传递至E系统. 前期约定的内容,ESB获取M系统的数据,数据获取方式为从ESB与M系统约定的数据库中间表中获取(相当于M系统的前置机),调用E系统的WebService,将数据写入E系统,并且将调用是否成功的结果写回与M系统约定的中间表中(写回M系统中间表的工作由ESB负责完成),调用E系统的WS之后,除了回写与M系统的中间表,还会有一些其他的数据库更新等操作.

BSON:易于数据交换的格式

- Ken - python.cn(jobs, news)
BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式. BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性. BSON主要会实现以下三点目标:. 对JSON格式来说,太大的JSON结构会导致数据遍历非常慢.

数据交换和SOA服务共享

- - 人月神话的BLOG
数据本身只是一种资源,而服务是一种能力;数据仅限于各种结构化和非结构化的数据资源,对于数据资源提供的能力可以使一种数据服务,而数据资源+业务规则形成的某种业务能力也可以作为一种服务提供,也就是说各种技术,数据,业务,平台,流程能力都可以做为服务提供. 交换本质是资源会从一个系统通过传输的方式进入到多个系统,资源在多个系统中形成多种拷贝.

医疗信息交换生态系统概览

- - 透明思考
(以下内容基本都针对经济欠发达国家). 医疗信息交换(Health Information Exchange, HIE)是在国家范围内共享医疗信息的IT系统. 整个HIE不是一个IT系统可以承载的,这个IT生态系统由几大块IT应用组成:参考数据、国家级信息系统、共享医疗记录和前线医疗系统. (以上架构参考了 OpenHIE的架构概念).

应用 HTML5 的 WebSocket 实现 BiDirection 数据交换

- - IBM developerWorks 中国 : 文档库
HTML5 是新一代的 Web 标准. 虽然 HTML5 标准还没有最终确定但是它已然成为主流,各大厂商都开始提前实现其草案中的功能. HTML5 提供了很多新特征,比如 Canvas、离线存储、多线程、视频标签等等. 其中一个很重要的特征是 WebSocket,它提供了一种双向全双工的服务器和客户端通信的功能.

数据交换格式protobuf/json/xml/binary/Thrift

- - 互联网旁观者
一条消息数据,用 protobuf序列化后的大小是 json的10分之一, xml格式的20分之一,是 二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明显的. protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,详情访问 protobuf的google官方网站.

Activity跳转的数据交换问题---学习笔记

- - CSDN博客推荐文章
问题一:有两个Activity(A和B),从A跳转到B,同时B需要A中的数据:. MainActivity类:. String sex = sex_rbtn.isChecked()?"男":"女";. //启动intent对应的Activity. SecondActivity类:. //获取启动该Result的Intent.

交换机原理与应用(附数据链路层封装)

- - 掘金 架构
连接多个以太网物理段,隔离冲突域. 对以太网帧进行高速而透明的交换转发. 自行学习和维护MAC地址信息. 交换机工作在二层,可以用来隔离冲突域,在OSI参考模型中,二层的作用是寻址,这边寻址指的是MAC地址,而交换机就是对MAC地址进行转发,在每个交换机中,都有一张MAC地址表,这个表是交换机自动学习的.

8种Nosql数据库系统对比

- xcv58 - 伯乐在线 -博客
  导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 文章由敏捷翻译 - 唐尤华编译.   虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破. 这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举.