06月 5th, 2008 | by 邓芝 |

小插曲:一种业务依赖的思考

存在业务A,例如IM工具绑定,用户只有绑带了IM才能使用我们的新闻订阅服务;后来,基于IM工具,我们又开发了交易产品。业务规定:如果用户取消了IM工具绑定,那么IM交易产品也取消。从数据上看,IM交易产品,要是适用IM绑定产品的信息,存在数据上的依赖。

起初系统部署在一个JVM内,当取消IM绑定的时候,也会随着取消IM交易协议(用户选择适用IM交易产品的过程,从业务本质看是客户与我们的签订协议过程,因此取消也是一个协议过程,为什么适用这么复杂的概念?在程序级别就是一个删除或更新。)。

现在2个产品部署在不同服务器上,当取消IM绑定的时候,是否需要取消IM交易协议,在那个点来取消,就引起了争论。


如图所示:第一阶段程序都是Jar依赖,可以认为在一个JVM中,执行取消IM绑定倒也方便。第二阶段,业务分布式部署之后,就对IM交易协议如何处理引发争议。

注:IM绑定、IM交易、客户平台、管理平台都是系统。

观点1:取消IM绑定,IM交易协议也取消。解决方法:客户平台、管理平台直接调用IM绑定、IM交易。

观点2:取消IM绑定,IM交易协议也取消。解决方法:客户平台、管理平台直接调用IM绑定,IM绑定调用IM交易。

观点3:取消IM绑定,IM交易协议也取消。解决方法:客户平台、管理平台直接调用IM绑定,IM绑定利用ESB的可靠Pub/Sub机制触发IM交易。

观点4:取消IM绑定,忽略IM交易协议。由IM交易产品自己获取IM绑定状态,从而做出业务处理。

1-3观点,从业务上是一致的,4是独立的。

从用户的角度来说,好像只要最终不能适用IM交易,系统目标就完成,对于做业务的人这样看问题是否合适?也可以,毕竟是2个独立系统吗,只要数据上作一次判读,就不会有任何问题,这个解释也可以接受的。典型程序员思维,系统作出正确表现即可。

从OO的角度来看,IM交易的是IM绑定的扩展,本体不存在,扩展存在还有什么意义?

从业务角度看,用户2次绑定,意味着发生了2次签约,第一次和第二次是否可以认为是一个签约,如果不是,IM交易协议以谁为依据。对于IM交易系统,它从IM绑定系统获取数据,不是为了验证是否存在IM绑定,而是要验证合约与数据是否一致。从这个角度看,IM绑定取消,意味着IM交易的自动失效。

[注:在单系统的时候,由于方便,往往不会像太多,反正方便,也没有人有啥疑义;一旦分布之后,业务独立切分了,大家都麻烦了,就开始思考了,此时采用什么方式往往由业务本性(什么是业务本质=?本性,我也定义不清楚)来决定。]

既然皮之不存,毛将焉附?1,2,3好像都满足,此时,我们在从业务出发,就会发现2,3更合乎业务,触发IM交易取消的事件不是用户直接发出的指令,而是IM绑定发生业务变化之后,通知它的粉丝(依赖着)。

2与3的选择,从架构扩展性,SOA治理,服务化的角度来看,选择3为佳。

有以下几个细的出发点供参考:

  1. 服务化,就是要确保每个独立业务的稳定性,采用观点2,一旦再有一个IM物流业务,就需要修改IM绑定业务。
  2. 大规模群集环境下,直接xfire之类的框架调用,需要独立引入软件负载,或者采用硬件负载。
  3. IM绑定和IM交易可以接受有限制异步模式,这对于性能,有很多帮助。如果IM交易,又依赖其它业务,同步访问的稳定性和性能会受到影响,事务处理也头痛。参考:SOA,想说爱你不容易
  4. SOA化之后,对服务的监控、治理要求会逐步提高,由统一的一个ESB产品来解决,会更好一些。

对于业务性比较强的公司和项目,多一些业务本质上的思考,少一些程序、数据角度的解决方案,带来的益处还是很多的。

对于这一类的业务,至于选择哪个方案,还要结合业务量,业务发展速度,成本,时间,人力等多个角度来衡量,对于我们合适的方案未必适合每一个人。

  1. 10 Responses to “小插曲:一种业务依赖的思考”

  2. By samliwa on Aug 13, 2008 | Reply

    您好,请问一下,这些服务(IM绑定,IM交易)是以sca的组件服务形式发布的?还是以webservice/rest方式?

    另外最后您说“对于这一类的业务,至于选择哪个方案,还要结合业务量,业务发展速度,成本,时间,人力等多个角度来衡量,对于我们合适的方案未必适合每一个人”感觉有点画蛇添足。既然是soa,那当然应该选择最好的方式,而不应该考虑成本和时间,人力的因素。不然就不是soa!既然第三种方案是最佳的,也是从业务出发的,理所当然应该被采用。当然是否需要异步模式那就看要根据需求了。

    希望最后的评论没有影响到这篇文章的质量。

  3. By 邓芝 on Aug 14, 2008 | Reply

    第一个问题:我们已OSGI组件的形式发布(组件模型的选择以够用即可),我们定制的底层组件可以支持同时发部为ws、rest、hessian。
    第二个问题:任何架构的改造,都必须考虑业务发展速度,成本,时间,人力等,技术最好未必是架构的最好。架构设计不是简单的技术问题,它是一种选择的艺术,例如,投入300万改造好了,由于业务发展比较慢,需要2年才收回成本,如果用了一个简单的方案,只投入日了30万,2年内同样能够满足业务的发展,那如何选择?最后这句话比较含糊,它的基本意思就是:依据这几个条件,为SOA架构选择合适的技术体系。

  4. By samliwa on Aug 15, 2008 | Reply

    感觉这样的架构和思想都非常的棒!赞一个!也就是说你们还没有采用sca?另外一个问题就是事务的控制。osgi目前是不是对事物的支持已经做的很好呢?能不能有一张比较overview的图能说明一下这样一个整体架构呢?我的理解是:你们每个服务组件之间是用osgi来实现的,并且这样一个组件可以扩展以支持不同的发布形式。每个服务之间的调用都是通过远程调用(这样就可以方便以后使用ESB或者JBI来进行整合这些服务)。当然不知道我的理解是否正确?
    另外事务的处理是一个很大的难题,不知道作者可以指导以下。

    对于你的第二个回答,我是totally agree了。确实选择某种技术和架构是一种艺术。也就是首席架构师所要认真考虑的问题。
    再次感谢你的回答。

  5. By 邓芝 on Aug 15, 2008 | Reply

    1、整体架构图可能出于某些原因,不便于绘制
    2、我们基于Base原则,定制了分布式事务(可以参考http://www.infoq.com/cn/news/2008/03/ebaybase,http://acmqueue.com/modules.php?name=Content&pa=showpage&pid=540&page=1,此外可以参考事务监控器、事务补偿、事务超时等一些概念)
    3、ESB已近是我们的技术架构的关键部分

  6. By samliwa on Aug 15, 2008 | Reply

    感谢作者这么快的回复!我之前的回复中还有以下几个问题:
    我的理解是:你们每个服务组件之间是用osgi来实现的,并且这样一个组件可以扩展以支持不同的发布形式。每个服务之间的调用都是通过远程调用(这样就可以方便以后使用ESB或者JBI来进行整合这些服务)。当然不知道我的理解是否正确?

    osgi目前是不是对事物的支持已经做的很好呢?

    作者还没有回答这些问题呢?不知道是不是不方便透露?另外对于osgi的使用是不是必要的呢?请问你们是出于什么样的考虑呢?谢谢

  7. By 邓芝 on Aug 15, 2008 | Reply

    1.你的理解是正确的。
    2.osgi自身不能很好支持事务,我们自己订制。
    3.osgi不是SOA的必须,我们的主要目的是:统一编程模型、切分接口和实现、鼓励扩展、为未来使用更多osgi特性做一些技术储备。

  8. By wft3000 on Nov 11, 2008 | Reply

    Nice post man i just signed up to flickr to!

  9. By youssef on Nov 15, 2008 | Reply

    Thanks for the great tips.

  10. By myzobra on Nov 15, 2008 | Reply

    Good post.

  11. By ozgul2 on Nov 16, 2008 | Reply

    Thanks a lot for this post

Post a Comment