为什么要 讨论 SOA 呢 ?

请参考我写的另一篇文章 《论 微服务 和 Entity Framework 对 数据 的 割裂》    https://www.cnblogs.com/KSongKing/p/10124126.html

我们来 看看 SOA 的 架构图 :

可以看到, 在 BL 上 套一层 Remote Facade(远程外观), 就成为了 Service(服务),

实质就是, BL = Service = 业务,   服务 只是 将 业务 发布 出来, 使得 其它 应用程序 可以访问 。

大家可以 对比 看看 , 微服务 和 SOA , 有什么 不同 呢 ?

服务 间 的 事务(Transaction), 是一个 经典 的 问题 。

也是 一个 首要 的 问题 。

比如,  一个业务 里 更新了 本身的 数据库, 又 调用了 A 服务, B 服务,

如果 A 服务 成功, B 服务 失败, 则 A 服务 应该“回滚”(Rollback),

解决的 办法 是, 每个服务应该 提供一个 对应的 “取消”(Cancel)服务, 比如 A() 服务 应该对应有一个 ACancel() 服务,

B() 服务 应该对应有一个 BCancel() 服务,

这样, 在 业务失败 时, 可以调用  ACancel() 服务 来 “撤销” A() 服务 造成 的 更改 。

为什么要说  “撤销”,  而不说  “回滚” 呢 ?

回滚 意味着 数据 恢复到 更新前 的 状态 ,  在 服务 的 层面, 这通常很难做到 。

在 服务 的 层面, 按 业务 的 意义 进行  “撤销”  会 更合适 。

比如 , 我 申请 了 一张表单, 可以 撤回表单;  下了一个 订单, 可以 撤销订单 ;  支付了 一笔钱, 可以 退款 ;   等等 。

可以按照这样的 规范 来 命名 :   A() 服务 对应 的 撤销方法 是 ACancel() 服务, 即通过 “Cancel” 后缀 来 表明 。

但 ACancel()  方法 的 业务意义 是 什么, 比如 是 撤回表单, 还是 删除表单, 或是 取消订单, 或是 删除订单, 或是 退款,

这个 应由 服务 的 API 文档 明确 的 说明 。

确立了 “撤销”(Cancel) 实现 事务 的 架构 后,

就可以 开始 研究 具体 的 解决方案 。

可以有 2 个 解决方案,

1 程序解决

2 人工解决

我们先说说 人工解决,

通过 界面 将 “撤销”服务(如 ACancel()) 提供出来,  在 业务失败 的 时候, 通知 客服人员 手动 撤销 已执行 的 服务 。

通知方式 比如 发 Mail , 短信 等 。

再说说 程序解决,  程序解决 就是 在程序中 控制, 如果 业务失败 则 撤销 已执行 的 服务(如  调用 ACancel()) 。

最简单 的 程序解决 就是 在 业务失败 的时候, 调用 撤销服务(如 ACancel()), 如果 在 撤销 过程中 也发生错误, 则 通知 客服 转入 人工处理 。

通知方式 比如 发 Mail , 短信 等 。

进一步, 自动化程度高的 , 严格的  撤销机制 则 需要 实现一个 类似 数据库 的 事务机制, 或者说 事务控制器 。

需要将 事务 状态 记录为 事务日志 , 持久化在 文件 或者 数据库 中, 只到 整个 事务 完成, 则 事务日志 中的 事务状态 才会 变成 成功 。

事务完成 包含 成功 和 失败且撤回成功 。

要做到 这些 技术比较复杂, 也会对 性能 带来 影响 。 也会让 开发 和 维护 变得 更复杂 。

这种机制 的 好处 是 自动化程度高, 精确, 适用于 严格精确 的 场合, 如 金融 。

当然, 自动化 ,严格 这不是 绝对 的,  有时候 也需要 人工介入,  但 概率 比较 小 。

大家可能会说, 金融行业 用 这种 架构 不是 用的 很 嗨 吗 ?   为什么说 这种 架构 会 让 开发 和 维护 变得 复杂呢 ?

能不能 在 一般 的 业务系统 互联网应用 商业应用 中 也使用 这种 架构(机制) 呢 ?

金融业中用这种架构的, 应该是 支付(交易) 的 基础架构, 这部分 很少 会   “变, 动” ,

其次, 这部分 基础架构 要  “变, 动” 的话, 通常 需要  “专业的技术人员”  才能实施 。

这和 一般的 业务系统 互联网应用 商业应用 的 要求 是 不一样的 。

对于  小型团队 小型项目, 中型团队 中型项目,  人工为主 的 方式 基本上应该够了 。

对于  SaaS,   客服的部分可以交给 各级服务商 来做,  这样, 人力也不是问题 。

谈谈 SOA的更多相关文章

  1. 简单聊聊SOA和微服务

    转自:https://juejin.im/post/592f87feb123db0064e5ef7c  (2017-06) 简单聊聊SOA和微服务 架构设计中的朴素主义 前两天和一个朋友聊天,他向我咨 ...

  2. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别(转载)

    转载来源:https://youzhixueyuan.com/the-difference-between-restful-soap-rpc-soa-and-micro-service.html 内容 ...

  3. 论 微服务 和 Entity Framework 对 数据 的 割裂

    微服务 的 本质 是 面向对象, 微服务 是 面向对象 对 数据中心 发起的挑战, 在 微服务 架构下, “数据为中心” 的 传统架构 被 严重 割裂, 微服务 的 先天矛盾, 是 对象 和 数据 的 ...

  4. 请谈谈对SOA的认识。

    请谈谈对SOA的认识. 解答:面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接 ...

  5. 谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解(转载)

    相关参考文章: 谈谈自己对REST.SOA.SOAP.RPC.ICE.ESB.BPM知识汇总及理解 微服务SOA架构与RPC远程过程调用 SOA和微服务架构的区别 SOA: 维基百科解释:SOA:面向 ...

  6. 【转载】谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解

    转载自:https://blog.csdn.net/tantexian/article/details/48196453 SOA: 维基百科解释:SOA:面向服务的软件架构(Service Orien ...

  7. 谈谈 数据中心SOA 架构

    为什么要讨论 数据中心SOA 架构呢? 请参考我写的另外一篇文章  <论 微服务 和 Entity Framework 对数据的割裂>    https://www.cnblogs.com ...

  8. 由SOAP说开去 - - 谈谈WebServices、RMI、RPC、SOA、REST、XML、JSON

    引子: 关于SOAP其实我一直模模糊糊不太理解,这种模模糊糊的感觉表述起来是这样: 在使用web服务时(功能接口),本来我就可以通过安卓中固有的http类(使用http协议),来发送http请求,并且 ...

  9. 谈谈分布式事务之一:SOA需要怎样的事务控制方式

    在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑, 均实现在相应的服务之中.服务对外提供统一的接口,服务之间采用 ...

随机推荐

  1. Java内存模式

    Java内存模型即Java Memory Model,简称JMM.JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式. JVM是Java Virtual Machine(Java ...

  2. 安装gcc

    yum -y install gcc yum -y install gcc-c++ yum install make   -- 或者 yum groupinstall "Developmen ...

  3. 2018ICPC青岛 E - Plants vs. Zombies (二分+模拟)

    ZOJ - 4062 题意:有n个植物排成一排,按顺序植物的编号是1-n,每个植物都有一个生长速率,有一个机器人,机器人可以走m步,每走一步,这个机器人就会浇一次水,浇一次水那个植物就会长 自身的生长 ...

  4. 1) 上传多张图片时 ,对 $_FILES 的处理. upload ; 2)fileinput 上传多张图片. 3) 修改,删除的时候删除原来的资源,图片 update, delete , 删除 4)生成器中两个字段上传图片的时候,要修改生成器生成的代码

    1上传多张图片, 要对 $_FILES进行 重新处理. //添加 public function addCourseAlbumAction() { $CourseAlbumModel = new Co ...

  5. 《团队-Python 爬取豆瓣电影top250-成员简介及分工》

    杨继尧,没有什么擅长的,会一点python,一点c#,爬取利用数据库,有些用法不太会,但是会在实现项目中查资料.

  6. JS数据的基本类型

    字符串   String 数字    Number 布尔    Boolean Null     空 Undefined Object   对象  Array 数组   json   function ...

  7. PhoneGap Vs AppCan

    首先在写这篇文章前,必须先申明一下,本人是技术出身,对HTML技术及手机客户端都有过编程经验,只是出于工作岗位的变动,便没有再具体代码工作,以下文章涉及的中间件的基本代码实现及前期的API使用,都是自 ...

  8. Tail Recusive

    1.尾递归 double f(double guess){ if (isGoodEnough(guess)) return guess; else return f(improve(guess)); ...

  9. Kaggle:House Prices: Advanced Regression Techniques 数据预处理

    本博客是博主在学习了两篇关于 "House Prices: Advanced Regression Techniques" 的教程 (House Prices EDA 和 Comp ...

  10. Python学习笔记第二十四周(JavaScript补充)

    目录: 一.JS补充 1.函数类型 2.string对象 3.instanceof 4.Array 数组对象 5.Date对象 6.RegExp 正则表达式 7.Math对象 二.BOM补充 1.wi ...