服务自治原则和交易问题
2008-03-04 18:00
218 查看
我们都知道,微软定义服务四大原则,其中很重要的一个是说服务自治原则:
服务是实体,它们独立地配置、更新和管理。开发者不应该对于服务边界之间的空间做出假设,因为这些空间会比服务边界本身变得还快。比如,服务边界应该是静态的,将减小版本的更新给用户带来的影响。服务的边界一般都是稳定的,而关于策略、地理位置或网络技术等服务配置选项则会经常地变化。http://www.microsoft.com/china/MSDN/library/architecture/SOADesign.mspx
那么服务自治是否意味着服务不互相依赖?WCF中出现的新功能(包括WS-AtomicTransaction (WS-AT) protocol以及OLE Transactions protocol两种方式)使得我们可以将多个服务做为一个交易(AtomicTransaction),也就是将交易的边界扩充到服务之间而不是像以前的web service那样集中在服务内部,这样做是否违反了服务自治原则?
首先,从概念上讲,其实服务自治并不表示开发的服务都是自治的,这个有点像语言游戏.
服务自治的真实含义是服务可以被独立的开发和维护,由于通过contract和message去和服务打交道,所以,没有二进制依赖,服务可以开发在不同的平台,不同的语言.
而自治的服务(is a service whose ability to function is not controlled or inhibited by other services.)是我们追求的目标,也就是服务之间更松的耦合关系,一个服务出现了问题另外一个服务不会受到影响.要实现这样的目标,同步调用基本上不可能,必须是异步的,而且这种AtomicTransaction基本上也是不可能的了.
所以,从这个概念上讲,多个service之间的自动交易并不违反服务自治原则,但是很难作一个自治的服务.
可以参考这篇文章: http://msdn2.microsoft.com/en-us/arcjournal/bb245672.aspx
但是,如果我们把概念再延伸一下,这个其实也可以理解为一个服务边界的问题,并不是说一个WCF的Service就是你定义的一个服务,我们的服务是从业务抽象来的具有一定业务功能的服务,而WCF的Service只不过提供了一种用来分布式调用的技术手段,如果我们将几个WCF的Service看作是一个服务内部的几个组成部分,那么这个时候你用AtomicTransaction的时候可能就更加放心了.
在Ron Jacobs的ARCast中,微软的Juval Lowy的一段对话也可以给我们另外一些启示。
http://channel9.msdn.com/ShowPost.aspx?PostID=324141
这里提到,首先,也许很多东西我们无法用AtomicTransaction来实现,而只能通过自己定义的交易补偿的方法来实现交易控制,这种一般是长交易,如果这种场景也使用AtomicTransaction,可能会将你的数据锁住很长的时间,显然不可取。但是,如果你的交易很短,你能够支持AtomicTransaction,那么就大胆的使用,但是有一个前提,就是你信任对方,如果对方要求你的服务嵌套在他的交易中,那么你一定要信任对方,你可能知道对方是谁,而且你知道可以保证你的锁的是将会很短,对方不会要求你的交易启动了,但是由于其他问题,不发给你commit的请求等等。这个思路和前面的交易边界原理上很像,互相信任的几个服务,也许在服务的边界上就是一个服务呢?
相关文章推荐
- 服务自治原则和交易问题
- 每日学习总结:CSS:Clear属性的用法、重复交易提示框、弹出提示框后页面变形、asp.net调用smtp服务发送邮件问题
- 每日学习总结:CSS:Clear属性的用法、重复交易提示框、弹出提示框后页面变形、asp.net调用smtp服务发送邮件问题
- WCF服务以控制台程序为宿主时的跨域访问问题(附源码)
- 函数中的DML语句的执行问题--自治事务
- wamp apache服务故障问题
- 解决关于ArcGIS10.2服务手动启动的问题
- 无法访问内网WEBServices服务的问题
- MongoDB安装成为Windows服务及日常使用遇到问题总结
- MongoDB安装成为Windows服务及日常使用遇到问题总结
- Mongodb 安装过程与服务无法启动100、48问题
- centos7 DNS主从服务搭建及问题故障排错
- spring rest 容易被忽视的后端服务 chunked 性能问题 推荐
- 解决MySQL无服务问题
- [转]解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- [软件错误处理原则] 局部问题缩小,全局问题放大 推荐
- 在Java中怎么使用定时服务计时器Timer 处理隔断执行问题
- 调用Excel Dcom服务权限问题
- Centos7.2中DNS服务named无法启动问题解决方案
- NFS服务的安全问题