最近公司的项目要实现几个子系统的数据同步,讨论了几种方式,现记录如下.背景介绍:
子系统 职责
MarketResearch 实时更新基金产品价格数据,为其它子系统提供数据服务
Order Managment System customer下单管理系统,管理各种交易订单,需要MR和CRM数据
CRM 客户关系管理
方案一: 把所有需要公共交换的数据独立出一个子系统,所有其它的子系统通过一公共API访问.由于CRM是外购其它的公司的产品,改动风险太大,外加其它非技术因素,此方案被不否决.
方案二: 各系统提供单独的API实现数据的交互. 但也有二种方式.
1)消息机制 + pull 模式 数据源发出数据更新通知,其它数据接收者接到通知后自行调用数据源API获取数据
2)push 模式 数据源直接调用其它数据获取者API更新数据
由于各个子系统需要的数据不同, 因此需要一个统一方式描述数据. XML自然是首选,即我们定义一个统一的XML格式来描述各种数据,各个子系统只需要解析一个统一XML文件. 各个子系统也可以实现相对的松藕合.
插一点个人体会:本质上我们最终是定义了一个简单的XML通迅协议,一直觉得协议通信应该也算一种模式,而且在我目前所见的模式中也许是最"松"的藕合.