AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

是时候考虑 SOA 建设的版本问题了

  • 2007-07-08
  • 本文字数:1478 字

    阅读完需:约 5 分钟

SOA 作为一个软件系统,如果说技术上有个不变的规律那就是——“总在变”,变化也向架构师们提出了如何对 SOA 实施有效版本管理的要求。最近 Boris Lublinsky 分别为微软架构师杂志(《Microsoft Architect Journal》) IBM developerWorks 撰文,介绍他的相关经验。

业务环境的变化常常需要 IT 服务的实现相应作出变化,虽然通过很多新技术或者模式化的实施经验可以帮助我们提供高质量的服务,尽量少的对实现做出变化,但是 IT 技术自身的发展——操作系统、开发工具、开发语言也常常会引发实现上的变化。SOA 自身是个可以有效适应变化的机制,因为它依赖的是抽象的“服务”而非具体的“业务处理”,因此当业务需求变化的时候,一般采用的是变化服务下面的业务处理——修改或者重建,也正因为这个原因,SOA 环境对服务的依赖丝毫不亚于组件开发中的接口。况且 SOA 中很讲究服务的自治性,也就是每个服务独立的修改和维护。当矛盾集中在“自治”与“集成”的时候,SOA 也就到了要考虑版本管理的时候。Boris Lublinsky 在文中提到 3 个引发这一问题的主因:

  1. 服务接口的变化。
  2. 消息的变化,可以进一步细分为“小”变化(“可选”/“必选”的变化、引入新的全局元素等)和“大”变化(修改全局元素、修改枚举值等)。
  3. 实现的变化。虽然理论上这个不会导致服务接口的变化,但是处理上总有些“预处理”和“后续处理”之类的操作,调用的顺序没有变化,但是上下文处理的变化一样会导致最终结果的不同。例如:增加了参数检查后,某些之前成功的调用会变成失败;安全上之前没有数据源(Data Origianl)限制,之后加上了,这样也会导致不符合安全策略调用的失败。

对于上述三种情况,Boris Lublinsky 提出了以下两种解决措施。

  1. 单一服务方法终端地址(EndPoint Address)加版本参数:也就是在调用服务的的时候,同时告诉服务终端一个版本参数,根据这个参数由服务终端决定调用哪个版本的服务方法。
  2. 不同版本服务方法有自己的终端地址:该方式下不需要服务方法前面增加一个版本调度机制,客户应用使用和自己“搭对”的服务方法。

前者虽然在引入新版本的服务方式时对客户程序影响很小,但会带来封装的复杂性,而且随着“坛坛罐罐”的增加,为每个服务方法维护这样一个 if then else 很麻烦。一个改进的办法就是把它们全都集中到一个 Broker 或者 Mediator 上,把判断版本取舍的工作推给它,不过改进方法因为要增加中间环节,所以性能上有损失。

后者实现了 Side-by-Side Execution 的目标,降低了客户程序与服务方法间的耦合。当然,这要付出代价,需要服务注册库在寻址上更加灵活,可以让 SOA 的使用者借助它找到适合它的那个版本的服务方法。

除了应用层面的 SOA 版本问题外,更复杂的是 SOA 基础环境的版本问题,包括:传输机制的修改(例如:HTTP 调用变成了队列调用)和消息编码方式的变化等,Boris Lublinsky 给出的答案很简单——Adapter。相比较“没完没了”的业务服务而言,基础环境中更多的是“相对有限”的技术机制,因此 Adapter 的开发量(或集成工作量)在一个时期内是稳定的。

虽然国内 SOA 的应用在很多企业还是起步阶段,可一旦上了这条船,后续的运行维护工作会越来越繁重,更何况对很多企业而言对 SOA 的定位就是用来“梳理”整个企业关键业务系统间的协作。为了协调好 SOA 环境,现在是该绸缪 SOA 版本管理的时候了。


作者简介:王翔,全国海关信息中心高级架构师,从事海关主要广域分布式系统的设计和实施,多次参与各业务系统的优化。此外,作为信息安全工作组副组长,他还一直致力于应用密码技术和公钥基础设施保障海关业务的安全运行。此外,他还是《程序员》杂志的专栏作者。

2007-07-08 23:05711
用户头像

发布了 61 篇内容, 共 10.9 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

Mac M1 8G丐版尝试本地部署Stable Diffusion

IT蜗壳-Tango

三周年连更

ChatGPT 将如何影响编程行业?程序员是被将被替代? | 社区征文

格斗家不爱在外太空沉思

ChatGPT 三周年征文

Angular 服务器端渲染两个相关的 SERVER_REQUEST_URL 和 SERVER_REQUEST_ORIGIN

汪子熙

前端开发 angular 三周年连更

徒手体验卷积运算的全过程 | 社区征文

迷彩

Python 深度学习 卷积 三周年征文 三周年连更

Linux 文件与目录管理

鸿蒙之旅

Linux 三周年连更

云安全技术管理

阿泽🧸

云安全 三周年连更

如何用 python 设计一个兑奖程序?

海拥(haiyong.site)

三周年连更

Haproxy进阶管理:命令行控制后端节点上下线

乌龟哥哥

三周年连更

手撕代码系列(四)

Immerse

JavaScript 面试 前端面试题 ES6基础知识点总结

算法题每日一练:矩阵置零

知心宝贝

数据结构 算法 前端 后端 三周年连更

模块1-学生管理系统架构设计

冲虚

通过ChatGPT来写论文

石云升

AIGC ChatGPT 三周年连更

一文读懂Stable Diffusion教程,搭载高性能PC集群,实现生成式AI应用

GPU算力

2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 1 <= n <=

福大大架构师每日一题

golang 算法 rust 福大大

Java HashMap 的常用方法,Java工程师必知!

Java架构历程

Java hashmap 三周年连更

ssh 连接Linux确实很安全,这6种身份验证方法很强!

wljslmz

Linux SSH 三周年连更

OpenGL入门三:变换原理简介

轻口味

opengl 三周年连更

微信业务架构图

冲虚

光粒科技亮相AWE 2023展会,Holoswim2智能泳镜沉浸式领航

科技热闻

高级视频编码器性能对比(H265、VP9、AV1)

轻口味

音视频 视频编解码 三周年连更

自然语言处理_AI文本翻译

DS小龙哥

三周年连更

区块链技术是什么?比特币又是什么?硕士是区块链研究方向,就业怎么办?

千与编程

区块链+ 研读版

Matlab凸优化算法

袁袁袁袁满

三周年连更

【Python实战】Python采集情感音频

BROKEN

三周年连更

Go语言开发小技巧&易错点100例(六)

闫同学

三周年连更

2023-05-02:如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个正整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 输入:n = 20。 输出:19。

福大大架构师每日一题

Go 算法 rust 福大大

平凡而不凡,那些用键盘改变世界的“新型劳动者”

开放原子开源基金会

开放原子全球开源峰会

Intelligent Enterprise 和 企业数字化转型的关联关系

汪子熙

人工智能 数字化管理 三周年连更

《写好README很重要》

后台技术汇

三周年连更

信道的定义和分类

timerring

信息论

Java Collection与Map详解

timerring

Java

是时候考虑SOA建设的版本问题了_SOA_王翔_InfoQ精选文章