什么是SOA,谈谈自己的看法(转)

本文探讨了SOA(面向服务架构)的概念及其对企业信息化建设的意义。分析了SOA的发展历程、核心理念,并通过实例阐述了其如何帮助企业实现业务与IT的一致性及最大化资产重用。
转载自

http://blog.sina.com.cn/s/blog_4e7dcdef0100nfev.html  

 

 

什么是SOA架构

 

 

 

Mark:  今天看了金蝶公司一位仁兄的SOA视频ppt,深有感悟,于是把以前写的SOA在改改,修正某些观点。

 

下面是文章目录

1SOA概念和背景相关】

2你应该知道的一些概念】

3,我对 SOA 的理解】

4 SOA 到底你想干嘛?】

5 SOA  IBM 

 

 

1SOA概念和背景相关】

SOAService-oriented archITecture,面向服务架构)

 

SOA并不是一个新的概念,早在  90 年代(好像是1996年)提出来的,知道进入2000年以后,SOA 才逐渐被重视,被推广,无论是 IBM还是Oracle都有相关的产品。 像一些应用服务器 BEA  weblogicIBM Websphere 等等都支持, Tomcat 也支持 WebService

SOA 里面有 ESBEnterprise Service Bus), WSDLSOAP 等等概念。

经常在网上看到,SOA是下一代软件开发架构,那么到底为何称之为下一代呢?那是因为软件的开发经历了几个阶段,大概是这样子的: com组件 > com+,dcom >  ejb  > webservice

大概就是这样子的,至于谁把 webservcie 放到 最后,那是别人的说话,笔者我不是这么认为的。

 

2你应该知道的一些概念】

 ESB 企业服务总线

SOA组件

WebService

 

 

3,我对 SOA 的理解】

SOA 就是一种解决方案,当然也可以看做架构,也可以看做方法论,毕竟每个人对同一件事物是有不同的看法的,只是哪种看法更主流而已。 就像三民主义和共产社会主义一样。 谁的想法得到了社会的承认,得到主流舆论的支持,那么他的观点就可以看做标准。否则 EJB 也不会被 Sping 攻陷。

 

就像敏捷,TDD一样,都是一种解决现有问题的一种思路。SOA诞生的前提是什么,无非还是现实的问题,更明确些说:是企业,是政府部门面临的现实问题,导致出现了SOA这个解决方案。 并不是厂商或者个人凭空乱造的。只是因为有生存的土壤,所以SOA才会出现,才会发展,才会得到IBM,微软的支持。 Java 以前不支持SOA,可后来还得随波逐流去支持SOA,更本质的说,也就是支持WebService(我没有说SOA就是WebService)。 因为你不支持,那么你就可能要落后,可能就要跟不上时代,跟不上IT技术发展的潮流。所以你不得不支持WebService

 

就像现在的云计算一样, 你不说你的产品支持云计算,那么只能证明你的产品使用的技术不够先进。 但是用户,尤其是不懂IT的用户就认为你的产品out了。  所以这也是一种无奈。 随着 瑞星云,360云,金山卫士云,百度云,淘宝,阿里巴巴云 的出现,你的产品如果也没有个云,至少是概念上的云,那么就只能说明你的产品没有使用潮流的技术,跟不上时代的步伐了。跟不上时代的步伐,那么产品就要被淘汰。 虽然做IT的我知道,目前的产品支不支持云计算,没有多少必要。 因为对用户体验,产品的运行效率没多大影响,可是不懂IT技术的人,是没有笔者我这么理性的。

 

         所以作为潮流时代的我们,必须要谈谈SOA,否则你也要out啦。 就像你不谈敏捷,不谈TDD一样,也会被out。虽然你很理性,你说我认为soa对我来说,没意义。但作为潮流,你也只能随波逐流啦。 没有什么特殊的原因,用句现实点的话, “被SOA”,“被敏捷”……

 

经常,会被 SOA  WebService 搞混,认为这2个家伙就是一个意思。 其实不是这样的, WebService 是实现SOA 的其中一种方式。 WebService 基于 SOAP 协议的,本质就是基于XML 的,正是因为基于 XML,所以SOA才能整合不同的平台,不同的应用。

 

4 SOA 到底你想干嘛?】

总结总结个人观点,SOA到底能干嘛事:

l  整合异构系统

准确点说,整合企业的遗留系统、正在开发的系统和即将开发的新系统。 不同的系统可能采用不同的平台,如操作系统的选择;不同的开发语言;不同的系统架构。

 

l  及时的响应用户的业务变化

大量的SOA组件,通过整合和拆散,然后打包成一个个的粒度合适的SOA组件,再经过流程管理工具的处理,实现业务的不断变化。

就像变形金刚那样,零件还是那些零件,但是经过一定的变化,也就是对SOA组件的拆和并, 就可以玩不同的花样。当然这是理想情况,至于到底实际情况如何,笔者也没有搞过,所以不清楚。

 

5 SOA  IBM 

 

先来看看IBM SOA的期望:

http://www.ibm.com/developerworks/cn/WebServices/newto/

主要就是2 点:

 

  • IT 与业务的一致性
  • IT 资产的最大化重用

 

花了一个下午的时间,上网看帖子,去 ibm 的专区看,感觉还是不能领会到SOA的精髓。

就拿 IBM 宣传的那2点评评。

-IT 与业务的一致性

所谓的IT与业务的一致性,个人理解就是SOA是面向客户的,就是客户提出什么业务需求,那么IT就必须开发什么需求。 举个例子,我们经常去沃尔玛超市买东西,假若沃尔玛超市部署了SOA而且沃尔玛说了,满足所有用户的要求(但这是不实际的)

 

于是,我这样的客户就可以说,你沃尔玛怎么不卖鲨鱼肉呢,你们必须提供一项服务,卖鲨鱼肉!这是一个活生生的客户需求, 于是沃尔玛的SOA技术部门就会提供一项服务,名字叫卖鲨鱼肉。

 

    如果改天,我想吃企鹅肉了(鄙视腾讯的弹窗), 我就向沃尔玛的SOA实施部门再提了一个要求:我要吃企鹅肉了! 于是乎沃尔玛就又提供了一项新的服务:卖企鹅肉。

    改天,我突然想有一个新的服务,我鲨鱼肉也吃,企鹅肉也吃,而且吃的顺序随便改。那么我就又向沃尔玛提了个要求: 我要吃鲨鱼肉和企鹅肉,你们必须打包卖。 于是乎沃尔玛又提供了一些服务,鲨鱼肉和企鹅肉一起卖。但这个新的服务是卖鲨鱼肉的服务和卖企鹅肉的服务组装起来的。 是通过一些服务组件(卖鲨鱼肉和卖企鹅肉)拼装成的服务(同时卖鲨鱼肉和企鹅肉)。

 

    上面的这个例子就可以看出SOA的一个小小的优点了,只要把SOA组件随便打包,就可以有不同的服务了。

 

2IT 资产的最大化重用

这个很好理解,一个企业,可能有很多遗留的老系统,和即将上线的新系统。SOA就可以把这些所有的系统整合起来。

 

 

如果你的企业不是跨国企业,如果你的企业没有多少遗留系统。那就没有必要用SOA架构。SOA架构是一个庞大的工程,哥我看了视频之后,才发现自己是多么渺小。

SOA面向的对象,一定是那种大企业,何谓大企业,像工商银行,跨国企业的那种,

 

其实,一个企业能有多少遗留的系统呢? 又能有多少个应用平台呢? 可以想象一下,在一家企业,一个部门用jave ee 的,一个部门用 .net , 这样的概率又能有多高,如果一家企业内同时允许java平台和.net 平台共存,而且没有主从之分的那种,那么我也只能说:佩服佩服。

 

总之用不用SOA,请慎重考虑。

### SOA 架构的概念与原理 #### 什么是SOA架构? SOA(Service-Oriented Architecture,面向服务的架构)是一种软件设计和软件架构模式,旨在将软件系统分解为一组松散耦合的服务[^1]。这些服务可以通过网络协议进行调用,从而实现跨平台、跨技术栈的应用集成。 #### SOA的核心概念 在SOA中,“服务”是最基本的单元,它是自包含的功能模块,能够独立执行特定的任务并返回结果[^2]。以下是几个重要的核心概念: - **服务(Service)**:提供了一组功能接口,供其他应用程序或组件调用。 - **服务注册表(Service Registry)**:作为集中式的元数据存储库,用于记录可用服务及其描述信息,帮助客户端查找所需的服务[^3]。 - **企业服务总线(Enterprise Service Bus, ESB)**:充当中介角色,在不同服务之间传递消息,并处理通信细节,如换协议、路由请求等。 #### 工作原理 SOA的工作流程通常涉及以下几个阶段: 1. **服务发布**:服务提供商将自己的服务能力登记到服务注册表中; 2. **服务发现**:潜在的服务使用者查询服务注册表来定位满足需求的服务实例; 3. **绑定和服务调用**:一旦找到合适的目标服务,则建立连接关系并通过标准化的消息格式发起远程过程调用(RPC)。 此外,随着汽车行业向更高级别的自动驾驶迈进,EE架构也经历了显著变化——从最初的分布式ECU控制逐步演变为基于域控制器甚至中央计算机为中心的新一代体系结构。这种变带来了新的挑战,比如缩短开发周期的同时还要兼顾性能优化等问题;因此采用合适的框架和技术手段显得尤为重要[^4]。 ```python class ServiceRegistry: def __init__(self): self.services = {} def register_service(self, name, endpoint): """Register a new service.""" if name not in self.services: self.services[name] = endpoint def find_service(self, name): """Find the registered service by its name.""" return self.services.get(name) registry = ServiceRegistry() registry.register_service('weather', 'http://api.weather.com') print(registry.find_service('weather')) ``` 上述代码片段展示了一个简单的`ServiceRegistry`类模拟了服务注册的过程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值