SOA到底是个啥

SOA(Service-Oriented Architecture),中文全称:面向服务的架构。


SOA让把系统分离成不同的服务,使用接口来进行数据交互,最终达到整合系统的目的。


专业的词总是让人懵懵懂懂,看起来高大上,但就是不知道在BB什么.... 我们换种讲法。


很多开发人员,做系统的时候是这样合作的:

小明负责【考勤】,小王负责【薪资】。

小王说: 小明,我要用【考勤】数据,你做好了没?

小明说: 早做好了,表名叫Attenance, 字段A代表员工ID,字段B代表....自己去数据库查。


相信很多人看到这种情景很熟悉, 数据交互完全通过数据库,模块件没有完全分离,错综复杂!用不了多久,你的系统就成了一碗美味的“意大利面”



要说明一下,这种开发方式不符合SOA的理念,那么SOA是如何处理的呢?


1.考勤作为单独模块,成为一个考勤服务,发布了一个考勤数据接口(WebServices)

2.小王需要使用考勤数据,调用考勤服务的接口即可


SOA是模块分离,模块间要进行数据交互,通过接口来完成!


很多程序员看了估计会不屑一顾,我们从不SOA,也过了这么多年,并没有什么问题!看起来SOA并没有什么卵用!


如果你这样想,我们来看看接下来这些需求,要如何应付。


1. 平台越来越庞大,有10几个开发人员都要用你负责模块的数据。

如果没有统一接口,你要同所有人讲你的数据库结构。一旦变更,你还要通知所有人


2. 系统运行越来越慢,老板说分离【考勤】和【薪资】使用不同的数据库和服务器

由于功能间没有严格分离,数据交互也是直接通过数据库。分拆系统基本不可能,所以也就无从谈论分开部署



3. 客户的其他系统需要调用平台的数据进行计算,你还要开放数据库结构吗?


功能没有严格分离,当系统发展到一定层次,开发就会感觉越来越吃力,往往牵一发而动全身,也不符合软件设计原则!

但是如果你的系统本身就很小,一周就搞定了!要实行SOA,搭建个架构花费了一个月,这就得不偿失了!


是否实行SOA,是要根据平台的定位去调整的!如果你的平台定位不高,强制实行SOA,就好比高射炮打蚊子,不仅浪费炮,还TMD打不到蚊子!所以不要“过度设计”,“恰如其分”很重要。



到这里,大家都已经懂得SOA的主要思想:严格分离模块,通过接口来链接。那么,如何链接呢?


上面我讲的WebServices是一种常用的链接方式。除了WebServices还有,ESB,JMS,以及最近几年大热的REST方式。


具体的链接方式,我们就不多讲了。有兴趣可以去查百度百科。










### SOA 架构定义 SOA(Service-Oriented Architecture),即面向服务的架构,是一种用于构建分布式系统的软件设计方法。其核心理念在于通过明确定义的服务接口将应用程序的不同功能单元连接起来[^3]。这些服务可以独立部署、管理和扩展,并能够跨不同的平台和技术栈进行互操作。 在 SOA 中,服务被设计为具有高度内聚性和低耦合性的特性[^4]。这意味着每个服务专注于完成特定的功能,同时与其他服务保持松散的依赖关系。这种设计方式使得系统更加灵活和易于维护。 ### 服务导向架构介绍 服务导向架构的核心思是将业务逻辑封装成一系列离散的服务,这些服务可以通过标准化协议进行访问和调用[^1]。以下是 SOA 的几个关键特点: #### 1. **服务抽象** - 服务的具体实现细节对外部使用者隐藏,仅暴露必要的接口信息。这允许开发者关注于如何使用服务而不是其实现机制[^5]。 #### 2. **松散耦合** - 不同的服务之间不直接绑定到具体的编程语言或操作系统上,而是基于开放的标准(如 HTTP 和 XML)进行通信。这种方式提高了系统的灵活性和可移植性。 #### 3. **重用性** - 同一个服务可以在多个应用场景下重复使用,从而减少冗余开发并提高资源利用率[^1]。 #### 4. **组合能力** - 多个简单的小型服务可以组合在一起形成更复杂的大规模应用。这样的组装过程通常被称为编排或者流程管理[^3]。 #### 5. **无状态交互** - 在大多数情况下,SOA 鼓励采用无状态的设计模式,即每次请求都应包含足够的上下文数据以便服务器能单独处理而不需保留会话信息。 此外,在实际实施过程中,Web Services 技术常作为实现手段之一来支持 SOA 原则的应用。例如 WSDL (Web Service Description Language),SOAP (Simple Object Access Protocol) 及 UDDI (Universal Description, Discovery and Integration) 等都是常用的工具集[^3]。 ```xml <!-- 示例:WSDL 文件片段 --> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://example.com"> <message name="GetStockPriceRequest"> <part name="symbol" type="string"/> </message> </definitions> ``` 以上代码展示了如何利用 WSDL 定义消息格式,这是创建符合 SOA 要求的服务的重要一步。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值