作者:小丫2502895573 | 来源:互联网 | 2024-10-19 19:57
系统被描述为不依赖于底层技术的服务服务通过消息实现1SOA涉及到服务的提供者和消费者参与SOA的系统是服务提供者,还是服务的消费者,要视工作流而定服务和消息是无状态的2服务和消费者
系统被描述为不依赖于底层技术的服务 |
服务通过消息实现1 |
SOA涉及到服务的提供者和消费者 |
参与SOA的系统是服务提供者,还是服务的消费者,要视工作流而定 |
服务和消息是无状态的2 |
服务和消费者通常由不同的程序语言开发,并运行在不同的Rum-time环境中 |
SOA涉及到服务自身,可用服务的清单(service directory),消费者连接并使用各服务的公共契约(service negotiation) |
SOA与传统C/S架构的区别在于,SOA服务是通用的3并且是无状态的,而C/S架构的客户端和服务端是紧耦合的。
SOA实现必须权衡目标环境以提供一致的设计。遵守以下8项原则可达到SOA的设计一致性:
1. | 标准化的服务契约 |
2. | 消费者与服务之间,服务与服务之间的松耦合 |
3. | 抽象实现细节;消费者只需要知道契约,不需要关心服务的实现细节 |
4. | 可组装4服务而不需关心组装的复杂性 |
5. | 运行时自治5 |
6. | 无状态 |
7. | 可复用6 |
8. | 可通过元数据或公共契约定义发现服务 |
根据这些原则,SOA社区的Pioneers归纳出如下一些SOA的设计模式。其中用到的模式符号及其含义如下图所示:
批注:
1. 消息既不能理解为服务和消费者之间的传递的实体对象,也不是Web Service中描述Web Method的XML,而是符合契约(Contract)的信息,消费者通过这些信息告诉服务要做什么,而不是直接告诉服务怎么做;
2. 状态信息的保存,会阻碍松耦合,Services应最大限度地处于无状态;但是要设计无状态的服务,必须尽量在业务层面考虑服务的幂等性;
3. 原文是universally available,个人认为应该理解为“可被所有遵循契约的消费者使用”;
4. 原文是Compose,似乎有些版本会译成“编排”,个人认为有些confusion.多个服务应该是可以被组合成一个更大的服务,实现可组装才是实现了可重用;
5. 运行时自治意味着服务是可以控制生命周期、可用性和边界的。用一个反面例子SQL 2000数据库和代理可以说明,两个服务都是作为Windows服务里托管的,但是代理服务有一个内置的数据库服务依赖。停止数据库服务意味着代理服务也会停止。这个服务间的紧耦合意味着它们不可能分开,或者独立的版本升级。紧耦合降低了买个服务的灵活性和在企业里的应用。
6. 复用性越好,意味者粒度越小,当需要一个粗粒度服务时,可参考原则4;