当前位置: 首页 > news >正文

初识SOA

随着企业级的应用越来越多,企业级应用的整合势在必行,在越来越深入的应用整合中,人们发现要将原有的基于对象的应用整合在一起,简直就是一个灾难!因为不同功能的应用,根本就不能和谐的存在在一起,强制的圈在一起,只会导致冲突,混乱。最终导致应用效率下降,甚至无法使用。为了避免或减小应用之间的冲突,现有最实际的做法就是采用portal来将不同的应用入口整合到一个页面,但是业务流程还是基于每个应用独立的。
在现有情况下,当要对需求有所变化时,我们唯一可以做的就是重新开发整个应用,或者对其进行全面改造。无论是哪一种情况,都会花费大量人力、物力,更要命的是,在我们花费大量时间对其进行改造、或开发后,发现需求随着业务的不断变化,又发生了巨大的变化……

    在这种情况下,一种名为SOA的新的技术构架逐渐被人们所认识和接受。SOA(Service-Oriented Architecture):才面向服务的体系结构,它是一个组件模型。顾名思义,它是面向服务(应用的不同功能单元)的,它将应用程序的不同功能单元(即服务)通过这些服务之间定义良好的接口和契约联系起来,成为一个应用整体。其中,接口和契约采取中立的方式进行定义,并独立于实现应用的硬件平台,操作系统和编程语言。

    SOA的服务体现了组件之间的松耦合性,松耦合性有以下两大优点:其一是灵活性,组件之间的不同组合与搭配,即能实现业务需求,最大程度上降低了开发的工作量和节约了开发时间;其二是当业务需求发生变化,它能继续存在而不受影响。


在SOA系统中,ESB(Enterprise Service Bus)企业服务总就像一个插线板,不同的业务模块(服务)如同插头,根据需要,灵活的“安插”到ESB上,实现企业的业务需求。这样,当业务需求发生变化的时候,服务能按照需求进行变化和组合,实现按需变化(On Demand)。ESB使用许多可能的消息传递协议来负责适当的控制、流甚至还可能是服务之间所有消息的传输。ESB本身可以是单个引擎,甚至还可以是由许多同级和下级ESB组成的分布式系统,这些ESB一起工作,以保持SOA系统的运行。

 

    其实,SOA早在1996年就被做为一种概念提出了,但因为缺乏一定的技术支持,一直没有形成更加具体的观念和技术。直到XML语言的出现及发展,还有WEB技术的发展,才为SOA提供了根据实际和坚实的理论支持。此外,它还需要安全性,策略管理,可靠消息传递以及会计系统的支持,从而有效地进行工作。你还可以通过分布式事务处理和分布式软件状态管理来进一步得改善它。

    XML自身的特点使其成为SOA系统中,数据流转的最好实现方式,你可以根据你自身的特点,定义自己的XML格式,使之符合你的业务系统需要。而实现SOA模型是通过 HTTP 传递的 SOAP 消息中最常见的SOA模型。因而,从本质上讲,Web是实现SOA的具体方式之一。

面向服务的体系结构(Service-Oriented Architecture,SOA,也叫面向服务架构)是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

传统的Web(HTML/HTTP)技术有效的解决了人与信息系统的交互和沟通问题,极大的促进了B2C模式的发展。WEB服务(XML/SOAP/WSDL)技术则是要有效的解决信息系统之间的交互和沟通问题,促进B2B/EAI/CB2C的发展。SOA则是采用面向服务的商业建模技术和WEB服务技术,实现系统之间的松耦合,实现系统之间的整合与协同。WEB服务和SOA的本质思路在于使得信息系统个体在能够沟通的基础上形成协同工作。

对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命。一个应用程序的业务逻辑(Business Logic)或某些单独的功能被模块化并作为服务呈现给消费者或客户端。这些服务的关键是他们的松耦合特性。例如,服务的接口和实现相独立。应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现。举例来说,一个服务可以用.NET或J2EE来实现,而使用该服务的应用程序可以在不同的平台之上,使用的语言也可以不同。

 
SOA三大基本特征

独立的功能实体
在Internet这样松散的使用环境中,任何访问请求都有可能出错,因此任何企图通过Internet进行控制的结构都会面临严重的稳定性问题。SOA非常强调架构中提供服务的功能实体的完全独立自主的能力。传统的组件技术,如.NET Remoting,EJB,COM或者CORBA,都需要有一个宿主(Host或者Server)来存放和管理这些功能实体;当这些宿主运行结束时这些组件的寿命也随之结束。这样当宿主本身或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。

SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,比如事务处理(Transaction),消息队列(Message Queue),冗余部署(Redundant Deployment)和集群系统(Cluster)在SOA中都起到至关重要的作用。

大数据量低频率访问
对于.NET Remoting,EJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是通过函数调用的方式进行的,一个功能的完成往往需要通过客户端和服务器来回很多次函数调用才能完成。在Intranet的环境下,这些调用给系统的响应速度和稳定性带来的影响都可以忽略不计,但是在 Internet环境下这些因素往往是决定整个系统是否能正常工作的一个关键决定因素。因此SOA系统推荐采用大数据量的方式一次性进行信息交换。

基于文本的消息传递
由于Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COM、CORBA这些传统的组件模型中,从服务器端传往客户端的是一个二进制编码的对象,在客户端通过调用这个对象的方法来完成某些功能;但是在Internet环境下,不同语言,不同平台对数据、甚至是一些基本数据类型定义不同,给不同的服务之间传递对象带来的很大困难。由于基于文本的消息本身是不包含任何处理逻辑和数据类型的,因此服务间只传递文本,对数据的处理依赖于接收端的方式可以帮忙绕过兼容性这个的大泥坑。

此外,对于一个服务来说,Internet与局域网最大的一个区别就是在Internet上的版本管理极其困难,传统软件采用的升级方式在这种松散的分布式环境中几乎无法进行。采用基于文本的消息传递方式,数据处理端可以只选择性的处理自己理解的那部分数据,而忽略其它的数据,从而得到的非常理想的兼容性。

相关文章:

  • 需求:需求获取技术之原型
  • Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 树莓派练习程序(声音检测)
  • .NET 4.0中的泛型协变和反变
  • flex 属性绑定
  • 常用方法
  • asp.net页面间传值的9种方式
  • 用操作符函数格式化(c++)
  • HDU4626+博弈
  • Android游戏快速入门(一):基础储备
  • 应用开发框架之——插件、包
  • SQL SERVER中强制类型转换cast和convert的区别
  • ASP.NET MVC中检测浏览器版本并提示下载更新
  • firdac支持的序列和还原格式
  • Online, Cheap -- and Elite
  • 《剑指offer》分解让复杂问题更简单
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CentOS 7 防火墙操作
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • log4j2输出到kafka
  • SQLServer之创建显式事务
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • web标准化(下)
  • 闭包--闭包之tab栏切换(四)
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 面试遇到的一些题
  • 盘点那些不知名却常用的 Git 操作
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 用element的upload组件实现多图片上传和压缩
  • 用简单代码看卷积组块发展
  • gunicorn工作原理
  • #mysql 8.0 踩坑日记
  • #传输# #传输数据判断#
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • ()、[]、{}、(())、[[]]命令替换
  • (26)4.7 字符函数和字符串函数
  • (3)llvm ir转换过程
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)pulsar安装在独立的docker中,python测试
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十六)一篇文章学会Java的常用API
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net core 控制台应用程序读取配置文件app.config
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Winform开发笔记(一)
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比