学习~SOA面向服务框架

SOA面向服务架构

  首先Martin Fowler提出SOA歧义Service Oriented Ambiguity,认为"什么是SOA"是不可能回答,因为不同的人意味着不同的事情,SOA意味服务接口,意味流程整合,意味资源再利用,意味着管制,在下面SOA组件图中,服务和服务消费者(客户端)之间存在多个约束,当一个服务显式暴露后,客户端能够通过绑定定位到该服务,相当于两者签订了合同,规定了合同内容和如何实施,具体合同的描述是通过消息方式进行:

  由于Java等传统语言主要是以类表达对象,将功能行为封装在类内部,而业务客户一般都是注重软件的功能,包括同行业公司系统之间数据交流也是以功能服务为接口,因此,面向服务的架构SOA更加贴近业务客户,也更适合业务伙伴之间流程整合,各个行业已经诞生自己行业特点的SOA,例如电信联盟的NGOSS,已经成为电信行业业务支撑系统BOSS的标准。SOA不但是技术用语,也是业务销售用语,通过服务这个中间概念,可以实现业务和技术之间的无缝转换,如今SOA已经和REST DDD以及云计算等新技术方法结合。其内部主要概念有SCA ESB JBI等等,涉及工作流 规则引擎 消息总线等多个技术细节方面。

  通常,一个架构师进行系统架构顶层设计时,必须考虑使用者的利益,不能单单实现软件的功能,还要考虑到软件的性能Scalable 可用性available/usable 安全性等软件质量,还要借鉴社区的最佳实践和经验形成的模式和反模式,避免重蹈覆辙和陷阱,再大胆采取最新的软件技术(比如用REST替代SOAP等)。

  服务的提出其实隐含了两个概念,服务提供者和服务消费者,这两者之间有一个合同约定,这非常类似我们现实生活中签订的服务合同,A单位和B单位分别是服务的提供者和消费者,两者签订了一个服务合同,规定A为B提供某项服务。服务就是提供一些公共需求的设施,通过一个工作过程能提供帮助,使用,让使用者受益。

  服务具体有如下:Windows Service:如PC定位者RPC Locator, 事件日志EventLog, DHCP Client,;. 软件服务Software Service,如分布式服务Distribution Service, 警告服务Alert Service 安全服务 Security Service, 日志服务;业务服务Business Service,如 帐号和客户服务,销售服务,订单服务,采购服务。

  服务两个重要特点:自治和管制,自治代表服务不能被外部势力牵制,比如如果一个服务内部处理中需要调用外部资源或等待外部流程结束,这种等待不能影响服务本身的调用,如果一个服务分为显式对外和隐式内部两个部分,那么自治是针对隐式内部,意味着我们不能在具体一个服务中直接使用同步代码实现复杂功能。如:

public AServiceImpl implements AService{

  public void productSale(...){

    Product product = productService.getProduct();
    int inventory = InventoryService.getInventory(product);
    int price = priceService.getPrice(product);

  }

}

  在AServiceImpl的productSale方法中,我们获得商品的库存和定价,都是通过同步的RPC实现调用的,这样造成productSale方法依赖于InventoryService和priceService,无法实现自身自治。

  实现服务真正自治,实际就是解决类之间依赖耦合的问题,消息是一种方式,但是基于消息又有两种通讯方式,基于请求响应和基于事件的EDA。

  从服务自治可以看出,为什么要提出服务必须自治,因为服务是受管制的,在实际业务活动中,不同服务是被不同部分管理,比如定价服务归属财务部门系统,库存归属仓库系统,涉及系统之间调用协调不能自己使用同步RPC,而是需要消息。

  在实际应用中,很多单位使用SOA主要看中其能够无缝整合新旧系统,称为EAI企业应用整合,下图是苏宁的一种SOA图,使用ESB企业服务总线这样的消息系统整合了新旧各种系统。

  使用SOA和ESB能够灵活实现业务流程管理,工作流的管理BPM,如下图,一个订单的产生可能需要几个部门批准才能完成,而且这几个部门经常是变化的,如何灵活实现这种批准流程的定制也成为SOA实现的一部分,如下:

  注意图中1 2 3 4 5 6 7 8 9标注的订单处理流程步骤,这种不同服务之间调用处理顺序可通过BPM进行灵活定制。

  目前提供SOA全套解决方案和产品的厂商很多,包括IBM SAP和Oracle,国内金蝶用友浪潮软件等等,比如苏宁的SOA是以SAP为主的八国联军组装,既然SOA中间件服务商已经为我们提供了成熟的架构方案和产品,那么作为SOA使用者是否就无需顶层架构设计了呢?当然不是,SOA使用者要根据自己业务进行模块划分,进行领域建模设计,根据DDD领域驱动设计将业务分解为一个上下文模块,然后再用服务作为对外接口,内部封装的是DDD聚合根,而传统SOA作法是内部封装的是数据表的DTO,从而导致SOA服务内部腐烂堵塞,违背SOA自治和可用性等原则约束。具体可见DDD领域驱动设计

SOA的好处

1. 松耦合:由于服务自治,有一定封装边界,服务调用交互是通过发布接口。这意味着应用程序不感兴趣的服务如何被实现。
2.位置透明:服务的消费者不必关系服务位于什么地方。
3.可在异构平台间复用。可以将遗留系统包装成服务。
4.便于测试,能并行开发,较高可靠性和良好可伸缩性。

时间: 2024-10-11 02:19:21

学习~SOA面向服务框架的相关文章

SOA——面向服务的体系架构

上一篇博文中提到了"紧耦合"的现象,如何解决?SOA,采用面向服务的体系架构. 一.What? SOA=Service-oriented Architecture面向服务的体系结构 SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来. 我个人更加倾向于这样的一种解释:SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构. 所以,SOA是什么?SOA不是一种语言,也不是一

SOA面向服务的架构理解

?  单一应用架构 ·当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. ?  垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. ?  分布式服务架构 ·当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求. ?  流动计算架构 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问

SOA面向服务架构简述

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在上篇中我们简单谈了下架构设计中服务层的简单理解,在这里我们将继续服务层的架构,在本节我们将重点在于分布式服务.在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契约方式发布于网络中,我们的关注点在于服务,面向服务编程,这种通过组合业务逻辑暴露可用服务的架构叫做面向服务架构(SOA). SOA强调一个松耦合,基于宏服务的架构,通过契约暴露给服务消费者可用的

为什么说社会形态影响着SOA面向服务架构思想?

产品将面对的社会形态 新研发的平台产品所面临的问题是:面对激烈的商业竞争形势,使大多数企业都面临着增长业绩.提高生产率和降低成本的压力,而产业的趋势是业务方法不断变化,特别表现在企业重构和解构这两个特征上. 企业重构:传统上的企业管理是一种层次化的垂直结构,打造了一个具有固定业务.确定交互.执行高效的模式.但是当竞争形势和市场需求发生变化的时候,它就与动态业务的趋势相冲突,阻碍了快速反应时间.这种外部压力迫使企业重新定位,向水平集成的业务流改变,这就形成了企业重构的趋势. 产业解构:在企业重构中

聊聊SOA 面向服务的体系结构

什么是SOA SOA(Service-Oriented Architecture),即面向服务的架构.SOA是一种粗粒度.松耦合服务架构,服务之间通过简单.精确定义接口进行通讯,不涉及底层编程接口和通讯模型. SOA可以看作是B/S模型.XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸. 阿里巴巴的Dubbo是SOA的典型实现. 基本特征 SOA的实施具有几个鲜明的基本特征:粗粒度的服务接口分级松散耦合可重用的服务服务接口设计管理标准化的服务接口支持各种消息模式精确定义

SOA 面向服务的架构

定义 面向服务的架构(SOA,Service-Oriented Architecture)是一个组件“模式” (或 “思想”,它不是一种“技术”),它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA vs Web服务 在理解SOA和Web服务的关系上,经常发生混淆.根据2003年4月的Gar

Software-Think SOA 面向服务架构思想

SOA 四项信条 边界明确 服务自治 服务共享数据模式和契约而不是类 基于策略确定服务兼容性 在大规模分布式应用程序(如 SOA系统)领域中,相关联得涉及模式被称为 Messagign 消息传送模式. Messaging 模式(与设计模式类似)为复杂问题提供标准得解决方案. 以一种统一得形式解决在众多彼此分离得系统中共享数据得问题. Document Message 模式使得能够采用一种统一.灵活得方法与服务通信. 该模式并不使用典型得 RPC 风格得参数化方法来暴露服务API,而是采用消息对象

面向服务的体系架构SOA

面向服务的体系架构SOA 序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微软的这些技术也确实推动着面向服务的世界发展,当然除了微软还有很多面向服务的开源技术,甚至在某些方面比微软做的更加优秀.那么什么是面向服务,面向服务的存在是为了解决什么问题呢? 说说SOA面向服务 SOA是由Garnter在1996年提出的一个概念,旨在让软件变的有弹性,能够迅速响应业务的需求,实现实

分布式服务框架学习笔记1 应用架构演进

传统垂直应用架构 业界曾比较流行的有: LAMP架构:Linux+Apache+PHP(前后端分离)+MySQL(读写分离) MVC架构:Spring+Struts+iBatis/Hibernate+Tomcat 在高并发.大流量的应用场景中,需要做集群,通常的组网方案是前端通过F5等负载均衡器做七层负载均衡(或者使用SLB等软负载),后端做对等集群部署. 随着业务的不断发展,应用规模日趋庞大,传统垂直架构开发模式的弊端变得越来越突出.这就需要将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服