众所周知,任何架构都是一步步演变而来的。没有最好的架构,只有最合适的架构
先来看看第一代单体应用,我想这个大家也是很熟悉。大部分人入门也是从单体应用开始的。
第一代单体应用架构

这里放一个图,图中可以看到,所有模块都打包到一起,并且公用一个数据库。这种架构就是单体应用架构,也叫巨石应用。在开发小型项目上有独特的优势,易于调试、部署、运维方便,给个人开发应用的时候是比较合适的。同样,缺点也是很明显的,第一就是不可靠,一旦某个模块出现问题,可能会拖垮整个应用。然后扩展也很不方便,只能通过运行更多的服务器来进行水平扩展,比如订单服务所需要的资源较多,遇到瓶颈的时候却需要将整个应用进行扩展。还有就是不可持续发展,遇到新的技术或者框架往往需要重构所有业务模块。

于是这时候,SOA它就来了。同样先放一张图。
SOA架构


SOA是面向服务的架构,它是一种设计方法,设计通常是自上而下的,服务之间松散耦合,ESB集成不同协议的服务,做消息的转化、解释、路由从而联通各个服务,解决企业通信问题,服务松耦合、可扩展。
SOA架构有以下优点:
系统集成:在系统的角度,把原先散乱、无规划的系统间的网状结构,梳理成 规整、可治理的系统间星形结构,这一步往往需要引入一些产品,比如 ESB、以及技术规范、服务管理规范;这一步解决的核心问题是【有序】
系统的服务化:站在功能的角度,把业务逻辑抽象成 可复用、可组装的服务,通过服务的编排实现业务的 快速再生,目的:把原先固有的业务功能转变为通用 的业务服务,实现业务逻辑的快速复用;这一步解决 的核心问题是【复用】
业务的服务化:站在企业的角度,把企业职能抽象成 可复用、可组装的服务;把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;“前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。第三步,则是以业务驱动把一个业务单元封装成一项服务。这一步解决的核心问题是【高效】

同样的,SOA架构与单体应用相比,其实还是存在中心化的一个问题,说简单点就是依旧是共用一套数据库,这里并不是说这样不好。这样的SOA架构更多的是面向于企业服务,服务的拆分粒度很大,更多的是为了复用。

于是在这个基础上,微服务产生了。
微服务

其实微服务就是去中心化的SOA扩展,每个微服务有自己独立的数据库,它强调服务彻底点组件化,一个组件就是一个服务,服务的切分粒度更小。服务之间通过轻量化的协议进行通信,可以根据服务本身独立化部署。

所以微服务有以下特点:
1.服务拆分粒度更小,每个微服务都需要满足单一职责原则,微服务本身是内聚的,因此微服务通常比较小。比如示例中每个微服务按业务逻辑划分,每个微服务仅负责自己归属于自己业务领域的功能。
2.去中性化,进一步拆分了服务间的耦合度。
3.灵活组合,在微服务架构中,可以通过组合已有的微服务以达到功能重用的目的。
4.技术异构,在一个大型系统中,不同的功能具有不同的特点,并且不同的团队可能具备不同的技术能力。因为微服务间松耦合,不同的微服务可以选择不同的技术栈进行开发。有利于系统的演进。

但是这样的设计也会带来一些其他的问题
微服务的缺点
复杂度高
微服务间通过REST、RPC等形式交互,相对于Monolithic模式下的API形式,需要考虑被调用方故障、过载、消息丢失等各种异常情况,代码逻辑更加复杂。
对于微服务间的事务性操作,因为不同的微服务采用了不同的数据库,将无法利用数据库本身的事务机制保证一致性,需要引入二阶段提交等技术。
同时,在微服务间存在少部分共用功能但又无法提取成微服务时,各个微服务对于这部分功能通常需要重复开发,或至少要做代码复制,以避免微服务间的耦合,增加了开发成本。

运维复杂
在采用微服务架构时,系统由多个独立运行的微服务构成,需要一个设计良好的监控系统对各个微服务的运行状态进行监控。运维人员需要对系统有细致的了解才对够更好的运维系统。

影响性能
相对于SOA和单体应用架构,微服务的间通过REST、RPC等形式进行交互,通信的时延会受到较大的影响。

谈谈SOA架构和微服务,以及两者的区别区别相关推荐

  1. 系统架构的演变过程(单体应用架构、垂直应用架构、分布式SOA架构、微服务架构)

    文章目录 系统架构演变 单体应用架构 垂直应用架构 分布式SOA架构 什么是SOA 微服务架构 分布式SOA架构和微服务架构对比 系统架构演变 随着互联网的发展,网站应用的规模不断扩大,常规的应用架构 ...

  2. SOA架构和微服务架构的区别(转载)

    文章目录 1.SOA架构和微服务架构的区别 2.ESB和微服务API网关 1.ESB(企业服务总线) 2.API网关: 3.SOA架构特点: 4.微服务架构特点: 1.通过服务实现组件化 2.按业务能 ...

  3. 微服务架构 之 互联网项目架构演变过程 (单点架构,模块化架构,分布式架构,soa架构,微服务架构)

    一.什么是单点系统(传统架构)? 1.传统的SSH,SSM 架构,分为三层架构 web控制层.业务逻辑层.数据库访问层. 2. 传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH ...

  4. SOA架构和微服务架构之间的关系

    写在前面: 你好,欢迎你的阅读! 我热爱技术,热爱分享,热爱生活, 我始终相信:技术是开源的,知识是共享的! 博客里面的内容大部分均为原创,是自己日常的学习记录和总结,便于自己在后面的时间里回顾,当然 ...

  5. SOA架构和微服务架构的区别是什么

    本文来说下SOA架构和微服务架构的区别是什么 文章目录 SOA架构和微服务架构的区别 ESB和微服务API网关 SOA架构特点 微服务架构特点 本文小结 SOA架构和微服务架构的区别 首先SOA和微服 ...

  6. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  7. 单体应用、SOA架构、微服务架构的对比

    目录 前言: 单体架构 SOA架构 微服务架构 前言: 随着近年来云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施.在云技术发展的早期,业界的关注点集中在虚拟化.分布式.存储等laa ...

  8. 单体架构-->SOA架构-->微服务架构

    上诉架构图采用了分层架构,按照调用顺序,从上到下为表示层.业务层.数据访问(DAO)层.DB层.表示层负责用户体验,业务层负责业务逻辑,包括电影.订单和用户三个模块.数据访问层负责DB层的数据存取,实 ...

  9. 系统架构设计师 - 单体架构、SOA架构、微服务架构

    文章目录 横向对比 SOA 设计原则 主要技术 UDDI 统一描述发现集成 SOAP 简单对象访问协议 WSDL web服务描述语言 BPEL 业务过程执行语言 REST 表述性状态转移 实现方法 W ...

最新文章

  1. NBT:线虫的工程细菌共生体提高对西方玉米根虫的生防潜力
  2. rm 时argument list too long
  3. 表格布局页面_对于表格布局管理器的回顾以及接下来的目标
  4. 学成在线--15.课程计划查询
  5. c语言锁屏密码程序,求一个VB锁屏程序的源文件
  6. Python入门基础篇(二)元组,更适合新手哦!!!
  7. python怎么读取中文文件-python: py2下 中文 的 文件读写 及 打印
  8. java spring maven excel 导出
  9. bootstrap $(“#xxx“).bootstrapTable(‘getData‘)值不对
  10. android自动烧写工具,MiniTools(Android内核烧录软件) v1.1 官方安装免费版
  11. 使用this.$refs.XXX修改某个元素样式并添加点击事件
  12. 瓜大NPUCTF-Misc、Crypto Write Up
  13. NLP系列(8)_用可视化解构BERT,从上亿参数中提取出的6种直观模式
  14. matlab ga函数详解,求对ga函数的详细解释
  15. cad打印本计算机未配置,CAD点打印为什么会警告提示无法使用此绘图仪配置
  16. java空指针异常 代码案例_java空指针异常:java.lang.NullPointException
  17. 二、VLAN,单臂路由
  18. 网页弹出对话框的几种代码
  19. skywalking源码--探针插件工程结构
  20. 自学系列 | 就谈兴趣!

热门文章

  1. js室内地图开发_室内地图JavaScript SDK地图控制 - 蜂鸟云
  2. 跟大家分享下团队协作工具leangoo
  3. 移动视频会议软件开发中应该注意的问题
  4. 这些电脑软件你使用过吗?
  5. 惠普计划裁员16%:未来3年计划裁撤7000-9000个岗位
  6. 多人在线网络游戏实现细节
  7. linux中特别的Shell变量 DUALCASE
  8. java和office二级证书用处_计算机二级证书有用吗
  9. 最全面的Android热修复技术
  10. 计算机网络 Email应用