GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

面向服务架构的技术不可知方法:回归 SOA 的本质?

2007 年 9 月 26 日

面向服务架构已经成为企业软件开发的主流实践之一。但是,根据 Dan North 的说法, SOA 的实施已经被软件厂商提供的众多工具制约,而这些厂商的兴趣是“强调 SOA 的复杂性,然后提供一个及时地和可盈利的解决方案。”最终结果是,许多 SOA 架构师的决定被技术考虑所驱使,而不是将注意力集中在核心业务场景的映射和建模上,而后者正是 SOA 方法的本质。

在他的文章中,Dan North展示了如何以“技术不可知”的方法去设计 SOA 。为了“去掉任何对计算机或现代技术的引用”,他选择使用一个休假预约过程的例子,因为它“发生在一个上世纪 50 年代的公司”。在这个业务场景中,一个雇员 Bob 办理他的休假预约,该预约必须被人事部门批准。Dan North 按部就班地举例说明了如何基于彻底的业务过程映射去识别 SOA 需求:

按 SOA 的术语来说,人事部门是一个服务提供者。它的服务之一就是安排年假。Bob 是一个客户端或服务的消费者。休假申请单描述了一个服务契约。那么,填好的单子就是一个异步消息——Bob 并不会暂停他的活动而去等待请求的回应;相反,他会继续进行他的日常工作。
内部的邮件就是一次消息的传输——在这种情况下是一次不可靠的传输。幸运的是,Bob 有一个错误处理协议,即超时。一周之后,他的日历通知他去给人事部门打电话。打电话是一次同步交互——他实时的在电话旁边。他接着实施了一个错误修正策略,那就是重新发送消息。

在讨论错误处理策略的同时,North 甚至提供了更多通过业务过程建模定义 SOA 需求的例子。如果有人在休假批准前更新了休假记录以减少离开的天数,接着请求丢失了——就 Bob 的例子来说——这会导致记录的不一致。理解这种情形会驱使我们得出结论“休假预约必须是事务型的”。一个请求也可能会因为某些业务原因失败,如津贴用光了、签名丢失等等。用 SOA 的话来说,这被称为“语义”或“业务规则”。在这个情况下,应该给关心返回结果的人发回一个失败原因的响应。用类似的方式,North 展示了业务上下文是如何为关联响应、服务可用性、安全或服务变革去定义 SOA 需求的。

按照 North 的说法,保持对真正业务问题的关注可以“将’是什么’从’如何做’之中剥离开来”:

事实上,一个真正的面向服务架构应该只有在业务中有直接对等物的服务;否则,它们就不可能被建模成一个业务过程。
抽象技术概念,如“数据服务”或“复制服务”,就业务来说没有任何意义。(可能有提供公共技术功能的共享模块或库,但是这些不应该被实现为服务或被称为是服务。)

同时,North 还声称如果事实上就存在有 2 个单独的领域,那么架构师就应该避免定义一个统一的领域模型。例如,对于 Bob 和人事部门负责批准休假请求的职员来说,“假期”并不意味着是同一事物。就前者来说,它关系到“棕榈树”和“在海滩上散步”;而对于后者,它涉及“围绕当时预约的业务过程”。North 认为这两个领域都应该被描述,尽管“假期”应该被作为“将每个服务背后的所有更细粒度的领域模型结合在一起”的业务概念。它不仅将会更好地反映现实,而且就架构来说也具有优势:

这些服务契约接下来按照企业级别的业务概念去表示,如休假或分发或销售订单,这再次将服务消费者从服务提供者解耦出来,使得它们可用独立的发展,同时也能以一种公共语言进行通信。

Dan North 充分认识到通过业务过程建模来定义 SOA“只是实现充分发挥 SOA 作用的第一步”。然而,关注业务问题有助于“理解服务的目的,并独立于技术问题去研究业务复杂性”。这种方式,SOA 需求的定义不会受技术决定的限制,它总是可以“按照已建模的业务过程被映射回可识别的业务价值”。

查看英文原文: Technology-agnostic approach to Service Oriented Architecture: back to the essence of SOA?

2007 年 9 月 26 日 21:01491
用户头像

发布了 255 篇内容, 共 46.8 次阅读, 收获喜欢 2 次。

关注

评论

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

Kafka 架构中 ZooKeeper 以怎样的形式存在?

码农架构

Java 消息中间件

Alluxio 助力 Kubernetes,加速云端深度学习

阿里巴巴云原生

人工智能 大数据 容器 云原生 k8s

OCE等你加入

滴滴云

云计算 私有云 滴滴夜莺 Obsuite

力扣(LeetCode)刷题,简单题(第19期)

不脱发的程序猿

程序员 LeetCode 28天写作 算法面经 3月日更

分布式事务与解决方案

一个大红包

28天挑战 3月日更

数据库定时备份linux篇

xiezhr

数据库 Linux Shell 数据备份 3月日更

区块链电子合同应用落地--区块链电子合同签约

13530558032

Java程序员福利!2021年最新17套完整版一线大厂面试真题

Java架构追梦

Java 架构 面试 金三银四 大厂面试真题

2021最新版!阿里P8大佬纯手打“JDK源码笔记” 带你飙向实战

Java成神之路

Java 程序员 架构 面试 编程语言

字节内部开发手册!堪称最全的JAVA开发手册(基础+框架+分布式微服务+调优)

Java成神之路

Java 程序员 架构 面试 编程语言

2021最新分享:阿里内部总监手码的“Redis学习手册”风靡全网

比伯

Java 编程 程序员 架构 面试

实习记录-埋点测试

是鱼头啊啊啊

高考大数据:全国31省高考难度,哪个才是地狱模式?

不脱发的程序猿

数据分析 28天写作 高考大数据 高考难度 3月日更

LDAP身份认证管理最佳实践

龙归科技

服务器 ldap 客户端

WebRTC 音视频同步原理与实现

阿里云视频云

阿里云 音视频 WebRTC 流媒体

如何招聘一名产品经理

马踏飞机747

互联网 产品经理 招聘 职场成长

5年时间,以一个三本学历从实习生升到P7,鬼知道我经历了什么!

Java王路飞

Java 程序员 架构 分布式 算法

职场里,对数据库要有敬畏之心!

Simon

MySQL 数据库

不吹不黑聊中台

小谢同学

云计算 中台 企业架构

收藏!这些 IDE 使用技巧,你都知道吗

阿里巴巴云原生

Java ide 云原生 API 调度

Linux内核 设备树操作常用API

赖猫

Linux Linux内核

平安智慧社区建设方案,平安小区的系统功能

13530558032

币管家量化交易软件开发|币管家量化交易APP系统开发

开發I852946OIIO

系统开发

进阶面试皆宜!阿里强推Java程序员进阶笔记,差距不止一点点

程序员小毕

Java spring 程序员 分布式 微服务

智能炒币机器人软件开发|智能炒币机器人APP系统开发

开發I852946OIIO

系统开发

JAVA已经呈饱和趋势了吗?

cdhqyj

Java 程序员 工作 IT

Python 中文编码

依旧廖凯

Python 28天挑战 3月日更

什么原因才是阻碍Linux桌面发展的罪魁祸首

读字节

Linux 程序人生 国产化 redhat

完美!啃透P9大佬这份完整版的《并发编程宝典》成功年前拿下心仪已久的阿里offer

Java成神之路

Java 程序员 架构 面试 编程语言

mongodb 源码实现系列 - Mongodb write写(增、删、改)模块设计与实现

杨亚洲(专注mongodb及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

【LeetCode】分割回文串 II Java题解

HQ数字卡

算法 LeetCode 28天写作

面向服务架构的技术不可知方法:回归SOA的本质?-InfoQ