`
tyvincent
  • 浏览: 7742 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SOA 新业务语言 新系统架构——SOA原则

 
阅读更多

面向服务的一般原则---摘自《SOA概念、技术与设计》第八章

在第3中我们建立了不止一个SOA定义。也有不止一个掌控定义面向服务背后原则的标准体。同样,对于面向服务的组成,也有许多源自公开的IT组织、厂商及咨询机构观点。
据称面向服务的根源在于软件工程理论所谓的“关注点分离”。这一理论基于这样的观念:将一个大的问题分解为一系列单个关注点是有益的。这使得逻辑将需要解决的问题分解成更小的、相关片段的集合。每一段逻辑处理一个特定的关注点。
这个理论已经被不同的开发平台以不同的方式实现。例如,面向对象的编程与基于组件的编程方法,通过使用对象、类和组件而实现了关注点分离。
面向服务能够被视作以截然不同的方式来实现关注点分离。面向服务原则提供了一个支持此理论的方法,同时实现了一种基本范式,在此基础上可构建诸多当代SOA特征。实际上,如果你再次研究这些特征,将会注意到数个(直接或间接)与关注点分离理论有联系。
如前所述,没有官方的面向服务原则。然而,却有一些最常与面向服务关联的原则。现将这些原则罗列如下,本节将做进一步描述。
  • 服务可复用不管是否存在即时复用的机会,服务被设计为支持潜在可复用。
  • 服务共享一个正式契约为了与服务交互,只需要共享描述每个服务信息交换术语定义的正式契约。
  • 服务是松散耦合的服务被设计为无需紧密的、跨服务的依赖而交互。
  • 服务是底层逻辑的抽象只有经由服务契约所暴露的部分服务对于外部世界是可见的。契约之外所表达的底层逻辑是不可见的,且与服务请求者无关。
  • 服务是可组合的服务可能组合其他服务。这允许表示不同粒度的逻辑,并促进复用及抽象层的创建。
  • 服务是自治的逻辑由服务所控制,并位于一个清晰的边界内。服务已经在这个边界内被控制,并且不依赖于执行其控制的其他服务。
  • 服务是无状态的服务应当不需要管理状态信息,因此能够其维持松耦合性。服务应当尽可能设计成无状态的,即便这意味着要将状态管理移至别处。
  • 服务是可发现的服务应当允许其描述被发现,并被人工和可能会利用其逻辑的服务请求者所理解。
在这八条原则中,自治性、松散耦合、抽象、以及需要正式契约被视为形成SOA根本基础的核心原则。如同在本章后面面向服务原则内部如何关联一节所解释,这四个原则直接支持其他原则(及其相互之间)的实现。

《WCF编程》——面向服务概述

架构原则

面向服务方法学负责管理服务之间所发生的内容(参见图A-1)。它有一套设计原则与最佳实践,用于构建面向服务应用程序,称为面向服务架构原则:
服务边界是明确的
任何服务总是被限制在边界例如实现技术和分布位置之后。服务公开的契约与数据类型不会将它的实现技术与分布位置透露给客户端,从而隐藏了这些边界的本质。坚持这一原则可以使得服务与位置和技术无关。不管是以何种方式思考这一原则,它所表达的思想就是客户端知道服务的实现越多,则客户端与服务的耦合度就越高。要减小潜在的耦合度,服务就必须明确地公开它的功能,而且只有操作(或数据契约)才会被明确地被公开给客户端共享。服务的其余内容会被封装起来。面向服务技术采用了默认为“否决(Opt-Out)”的编程模型,公开的内容则被明确标记为参与(Opt-In)[注]。
译注:Opt-Out与Opt-In本身属于发送广告中的两种不同行为与授权方式。在这里,Opt-Out指的是如果服务的成员没有明确地进行设置,则默认是不暴露的,即否决机制。Opt-In则指的是只有明确标记了需要暴露的成员,则该成员才会参与到服务中,能够被跨越服务边界调用。
服务是自治的
服务无需获取它的客户端或其它服务的内容。服务的运行与版本应该与客户端无关。这一原则允许服务脱离客户端单独演化。服务的安全也是独立的,它能够保护服务自身以及传递的消息,而不用考虑客户端使用的安全级别。这样做(除了尽人皆知的常识之外)同时也能够解除客户端与服务安全之间的耦合。
服务共享操作契约与数据样式,而不是类型与特定技术的元数据。
服务要做的就是决定公开在服务边界之外内容应与技术无关。服务能够将本地的数据类型转换为某种与技术无关的表示形式,而不是共享本地的、特定技术的内容,例如程序集版本号或者它的类型。此外,服务应该禁止客户端知道本地的实现细节,例如实例管理模式或并发管理模式。服务只公开逻辑操作。服务对于操作的实现方式以及执行方式,对于客户端而言是不透明的。
服务与策略保持一致
服务应该发布一种策略,指示它所能完成的内容以及客户端与服务交互的方式。策略所体现的访问约束(例如可靠通信)不应依赖于服务的实现细节。并非所有的客户端都能与所有的服务交互。这种不兼容性是完全有效的,它能够防止特殊的客户端访问服务。发布的策略是客户端决定它们能否与服务交互的唯一方法,同时不应有任何的带外机制让客户端做出这样的决策。不同的是,服务必须能够在策略的标准表达形式中,表示服务能够执行的内容以及客户端能够与之通信的方式。如果无法表示,就意味着服务的设计是拙劣的。注意,如果服务是私有的(即不是公有服务),那么实际上它可能不会发布任何策略。这一原则暗示如果服务需要,就应该能够发布策略。

实用原则

前面列举的原则是非常抽象的,对它们的支持主要体现在开发、调用以及设计服务的技术方面。因此,应用程序可能会不同程度地遵循这些原则,正如开发者可以在C++中编写非面向对象的代码那样。然而,精心设计的应用程序应该力图坚持这些原则。因此,我又补充了一些更加实用的原则:
服务是安全的
服务与它的客户端必须使用安全通信。至少,从客户端传递到服务的消息必须是安全的,客户端必须具有验证服务的方法。同时,客户端可能会在消息中提供它们的安全证书,这样服务才能够对它们进行授权与认证。
服务在系统中应保持一致的状态
执行客户端请求时,禁止进行部分替换的条件。服务访问的所有资源在客户端调用之后必须是一致的。服务不能有任何剩余内容作为错误的结果,例如部分地影响系统状态。服务不应寻求它的客户端的帮助,在发生错误后,服务会将系统恢复为一致的状态。
服务是线程安全的
服务必须设计为线程安全,才能够维持多线程的并发访问。服务同样能够处理因果关系或逻辑线程的重入。
服务是可靠的
如果客户端调用服务,客户端总是能够以确定的方式获知消息是否被服务接收。消息应该按照发送的顺序处理,而不是接收的顺序。
服务是健壮的
服务与它的错误分离能够防止错误影响服务本身或其它服务。服务不能要求客户端根据服务遇到的错误类型改变它们的行为。这能够有助于客户端与错误处理层面上的服务解耦。

可选原则

我们可以将实用原则看作是强制原则,同时还有一套可选原则,这些原则并非所有应用程序所必需的,虽然坚持这些原则通常是一个不错的主意:
服务是互操作的
设计的服务应该能够被任意的客户端调用,而不用考虑客户端的技术。
服务的规模是不变的
不管客户端有多少,也不管服务的承载是多少,服务代码都应该相同。随着系统的发展,这样的设计才能够极大地降低维护服务的成本,服务也能够支持不同的部署场景。
服务是可用的
服务总是能够接收客户端的请求,而不会因此停止。如果服务不可用,则意味着客户端需要解决服务的问题,反过来就会引入耦合。
服务是及时响应的
服务开始处理客户端的请求时,不能让客户端等待太久。如果服务不能及时响应,则意味着客户端需要解决服务的问题,反过来就会引入耦合。
服务是受限的

服务执行的任意操作应尽可能短,不能消耗太多时间去处理客户端的请求。长时间的处理过程意味着客户端需要解决服务的问题,反过来就会引入耦合。

分享到:
评论

相关推荐

    从大型电商架构演进看互联网高可用架构设计——内训方案.pdf

    - **SOA架构的问题**:引入服务网格技术,如Istio,简化服务间的交互和管理。 - **服务SLA的应用实践**:实施熔断、降级、限流等策略,提高系统的容错能力和稳定性。 #### 四、大型电商系统存储架构的演进 **从...

    校友录系统:Web服务调用和SOA架构+部署docker容器——亲测可用

    校友录系统:Web服务调用和SOA架构+部署docker容器——亲测可用

    SOA实践指南-分布式系统设计的艺术.pdf

    系统和更现代化的业务流程连接起来,《SOA实践指南》都阐明了SOA如何满足你的需 要。 目录 第1章:动机 1.1 大型分布式系统的特征  1.2 魔术总线故事  1.3 魔术总线故事给我们的启示  1.4 soa历史  1.5 ...

    SOA开放标准大观园——架构的导航

    SOA(Service-Oriented Architecture,面向服务的架构)作为一种设计和实现软件系统的方法论,近年来在信息技术领域引起了广泛的关注。SOA的核心理念是通过一组松耦合的服务组件来构建应用,这些服务组件通过标准...

    执行SOA——SOA实践指南

    在信息技术领域,Service-Oriented Architecture(SOA,面向服务架构)是一种设计和构建软件系统的方法,它强调通过松散耦合的服务来实现业务流程。这篇博客文章和相关的资源集合,"执行SOA——SOA实践指南",为我们...

    大规模SOA系统治理中的架构支持-程立

    - 随着技术的进步和业务需求的变化,组织需要不断地对其SOA架构进行优化和迭代。 - 通过持续改进,可以更好地应对未来的挑战,确保SOA体系能够长期支持业务发展。 综上所述,支付宝在其SOA系统的演进过程中,不仅...

    soa整体架构规划

    SOA架构通过打破“信息孤岛”,实现了企业内外部系统的无缝集成,提升了企业的业务灵活性和竞争力。对于面临复杂IT环境挑战的企业而言,SOA提供了一种高效且可持续的解决方案。通过合理规划和实施SOA,企业可以更好...

    IBM银行SOA架构

    IBM银行SOA架构案例研究聚焦于一家虚构的二级银行——JKHL Enterprises的银行业务部门JKHL Bank。过去几年间,JKHL Bank通过收购五家较小的区域性银行,扩大了其地理覆盖范围。面对银行业日益激烈的竞争环境和不断...

    IBM讲解:基于SOA的业务流程管理——技术和实践

    【IBM讲解:基于SOA的业务流程管理——技术和实践】 在信息技术领域,业务流程管理(Business Process Management,BPM)是一种系统化的方法,用于设计、实施、监控和优化企业的核心业务流程,以提高效率和响应速度...

    SOA原则:服务设计

    **服务导向架构(Service-Oriented Architecture, SOA)**是一种软件设计方法论,它将应用程序的不同功能单元通过服务接口联系起来,这些接口是采用中立的方式进行定义的,与实现服务的硬件平台、操作系统和编程语言...

    SOA治理——框架和最佳实践

    ### SOA治理——框架与最佳实践 #### 引言 在服务导向架构(Service-Oriented Architecture,简称SOA)的背景下,治理往往是一个被误解的概念。有些人将SOA治理视为服务生命周期治理,即从创建到部署的服务管理...

    SOA解决方案——BEA的SOA解决方案,绝对经典!

    **SOA(Service-Oriented Architecture,面向服务架构)是一种软件设计范式,它提倡将独立的功能通过服务的形式暴露,并允许这些服务通过网络进行交互,从而实现系统的集成和协同工作。BEA公司(已被Oracle收购)是...

    179系统架构设计师讲义.zip

    1. **系统设计基础**:这部分可能涵盖软件设计的基本原则,如模块化、抽象、封装和继承等,以及软件架构的五种基本类型——层状架构、微服务架构、事件驱动架构、客户端-服务器架构和面向服务架构(SOA)。...

    基于 SOA 的教务管理系统的研究与实现

    总结来说,【基于 SOA 的教务管理系统】是通过采用SOA的松散耦合、粗粒度服务和标准化接口等原则,利用Web Service和J2EE技术,构建了一个可复用、高效率的教务管理解决方案,解决了传统系统中信息孤岛和重复开发的...

    SOA银行业务分析举例

    新设计的流程将利用SOA原则,将业务分解为可重用的服务,如客户信息验证、信用评分、贷款审批等。这些服务可以通过标准化接口调用,减少跨系统查询的时间,同时确保数据一致性。此外,通过服务的集中化,银行能够更...

    2020年系统架构设计师讲义pdf版本

    《2020年系统架构设计师讲义》是希赛教育为准备参加高级软考——系统架构设计师考试的学员提供的一份详细学习资料。这份PDF版本的讲义涵盖了该领域内的核心知识点,旨在帮助考生全面理解和掌握系统架构设计的相关...

    SOA架构方法与实践——第五届中国软件工程大会

    SOA架构方法与实践在第五届中国软件工程大会上被深入探讨,演讲者毛新生先生是IBM中国开发中心的Web 2.0首席架构师,他在企业级软件领域具有深厚的理论基础和实践经验。毛新生先生在IBM的工作涵盖了信息检索、语音...

    架构解密——从分布式到微服务

    本书详细介绍了分布式系统中的经典理论,对内存、soa架构、分布式存储、分布式计算、全文检索和消息队列中间件进行了深度解析。

Global site tag (gtag.js) - Google Analytics