面向服务的架构(SOA)是一个组件模型,它将应用程序的不一样功能单元(称为服务)进行拆分,并经过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操做系统和编程语言。这使得构建在各类各样的系统中的服务能够以一种统一和通用的方式进行交互。编程
这种具备中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。松耦合系统的好处有两点,一点是它的灵活性,另外一点是,当组成整个应用程序的每一个服务的内部结构和实现逐渐地发生改变时,它可以继续存在。而另外一方面,紧耦合意味着应用程序的不一样组件之间的接口与其功能和结构是紧密相连的,于是当须要对部分或整个应用程序进行某种形式的更改时,它们就显得很是脆弱。
对松耦合系统的须要来源于业务应用程序须要,根据业务的须要变得更加灵活,以适应不断变化的环境,好比常常改变的政策、业务级别、业务重点、合做伙伴关系、行业地位以及其余与业务有关的因素,这些因素甚至会影响业务的性质。咱们称可以灵活地适应环境变化的业务为按需业务,在按需业务中,一旦须要,就能够对完成或执行任务的方式进行必要的更改。安全
虽然面向服务的体系结构不是一个新鲜事物,但它倒是更传统的面向对象的模型的替代模型,面向对象的模型是紧耦合的,已经存在二十多年了。虽然基于 SOA 的系统并不排除使用面向对象的设计来构建单个服务,可是其总体设计倒是面向服务的。因为它考虑到了系统内的对象,因此虽然 SOA 是基于对象的,可是做为一个总体,它却不是面向对象的。不一样之处在于接口自己。SOA 系统原型的一个典型例子是通用对象请求代理体系结构,它已经出现很长时间了,其定义的概念与 SOA 类似。然而,如今的 SOA 已经有所不一样了,由于它依赖于一些更新的进展,这些进展是以可扩展标记语言(eXML)为基础的。架构
在SOA架构风格中,服务是最核心的抽象手段,业务被划分(组件化)为一系列粗粒度的业务服务和业务流程。业务服务相对独立、自包含、可重用,由一个或者多个分布的系统所实现,而业务流程由服务组装而来。一个"服务"定义了一个与业务功能或业务数据相关的接口,以及约束这个接口的契约,如服务质量要求、业务规则、安全性要求、法律法规的遵循、关键业绩指标(Key Performance Indicator,KPI)等。接口和契约采用中立、基于标准的方式进行定义,它独立于实现服务的硬件平台、操做系统和编程语言。这使得构建在不一样系统中的服务能够以一种统一的和通用的方式进行交互、相互理解。除了这种不依赖于特定技术的中立特性,经过服务注册库(Service Registry)加上企业服务总线(Enterprise Service Bus)来支持动态查询、定位、路由和中介(Mediation)的能力,使得服务之间的交互是动态的,位置是透明的。技术和位置的透明性,使得服务的请求者和提供者之间高度解耦。这种松耦合系统的好处有两点:一点是它适应变化的灵活性;另外一点是当某个服务的内部结构和实现逐渐发生改变时,不影响其余服务。而紧耦合则是指应用程序的不一样组件之间的接口与其功能和结构是紧密相连的,于是当发生变化时,某一部分的调整会随着各类紧耦合的关系引发其余部分甚至整个应用程序的更改,这样的系统架构就很脆弱了。编程语言