SOA

(Service-Oriented Architecture):面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

背景介绍

论系统架构设计的最大的问题,其实也就是职责的分配,分配的合理,实现起来就会很柔性,反之就会使架构很混乱

软件的生命周期大概可以归纳为四个基本的过程,分析、设计、实现、测试,当然这仅仅是一个最为粗略的表示而已
  • RUP使用快速迭代的过程,在这个几个子过程中适当的输出一些过程制品,每次迭代都是进行相同的分析、设计、实现、测试
  • 在Scrum中,不提倡输出任何文档形式的过程制品,也同样有着上述几个过程,强调以人为中心,通过沟通来解决大部分的问题

分析就是做正确的事,设计就是正确的做事
如果你的设计不合理,你用任何语言任何平台都解决不了问题

SOA的架构层次

进行SOA类型的架构设计就需要搞清楚SOA架构模型才行。并不能想当然的对系统进行简单的拆分就行,需要搞清楚SOA的架构模型是怎样的,每一块是干什么用的,这样设计由分析阶段输出的需求时才能正确的划分职责。
其实SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代。
通过分层将服务按照使用类型进行分配,上层服务对下层服务的包装,下层服务负责原子性的操作,上层服务对下层服务进行业务性的组合。
  • 应用服务(原子服务)

    应用服务就是诸如:订单服务、仓库服务、销售服务、客户管理服务,这些服务直接对应不同的应用系统,直接服务这些应用系统的原子操作。订单服务直接原子性的插入订单,没有任何跨其他服务的分支逻辑。仓库服务只管自己的仓库逻辑。同样其他的应用服务只管好自己的职责,杜绝对其他服务的调用。

  • 组合服务

    组合服务是对应用服务的一个组合,根据实际项目的规模大小,不一定非要进行物理的隔离,在代码层面的服务化也是可以的,在将来的某一天有必要的情况下再进行物理的拆分,毕竟物理的拆分有着严重的成本和代价,对系统的稳定性带来很多挑战。所以经验告诉我们必要的时候在进行拆分。”分布式系统设计的第一个原则就是尽量不要分布式“,这是马丁.福勒大师说的,现在理解确实感同身受。

  • 业务服务(编排服务)

    业务服务是最外层的服务,向下编排了组合服务。业务服务位于最上层,当需要有跨越多个应用线来完成的业务,这个业务就放入业务服务中。比如提交订单,先检查库存、扣减库存(冻结库存),然后下单,再往后通知财务,再往后通知物流等等都是一个复杂的企业服务线。这种最外层的业务逻辑如果你不进行SOA分层然后将其放入最外层的业务服务中,你把它放入任何一个应用线都会使系统调用混乱不堪。所以问题就是需要进行纵向的划分层次。如果进行了SOA的层次划分后就不会出现互相乱用的情况。

本文参考文档:

最新文章

  1. plsql查询乱码问题解决
  2. Linux学习笔记(10)-信号
  3. 怎样用ZBrush雕刻人体造型
  4. ugui自制摇杆。
  5. PHP字符串转义
  6. django服务器正常打开,本地localhost能连上,其他计算机却连不上
  7. 这是一篇关于:以时间表的形式来介绍Java如何演变至今,以及Java版本的一些特性的分享
  8. python selenium while 循环
  9. eclipse JVM 性能调优
  10. tarjan算法(求强连通子块,缩点)
  11. Can't connect to MySQL server (10065)
  12. Flink - FlinkKafkaProducer010
  13. <8>Cocos Creator组件开发cc.Component
  14. 关于 Oracle DB CONSTRAINT约束的一些SQL ORA-02292: integrity constraint violated
  15. java基础-day32
  16. redis对key的基本操作
  17. SIMULINK的模块库介绍
  18. Two ways to see predicates added by VPD or FGAC
  19. 实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
  20. [深度学习]实现一个博弈型的AI,从五子棋开始

热门文章

  1. Python的条件控制及循环
  2. ThreeJS 物理材质shader源码分析(像素着色器)
  3. mysql5.7的基本使用
  4. time 模块 和 random 模块常用方法讲解
  5. 2019年,我花了3个月时间备考PMP
  6. 《快乐编程大本营》java语言训练班-第4课:java流程控制
  7. Spring使用外部属性文件
  8. selenium 操作下拉处理
  9. 一接口自动化中生成测试数据需要用到的java类API--import java.util.Properties;
  10. Codeforces_793