当前位置: 首页 > news >正文

【SpringCloud】微服务的扩展性及其与 SOA 的区别

一、微服务的扩展性

由上一篇文章(没看过的可点击传送阅读)可知, 微服务具有极强的可扩展性,这些扩展性包含以下几个方面:

性能可扩展:性能无法完全实现线性扩展,但要尽量使用具有并发性和异步性的组件。具备完成通知功能的工作队列要优于同步连接到数据库 

可用性扩展:CAP 理论表明,分布式系统无法同时提供一致性、可用性和分区容错性保证。许多大规模 Web 应用都为了可用性和分区容错性而牺牲了强一致性,而后者则依赖于最终一致性来保证 

维护可扩展:软件和服务器都需要维护。在使用平台的工具监控和更新应用程序时,要尽可能自动化 

成本可扩展:总成本包括开发、维护和运营支出。在设计一个系统时,要在重用现有组件和完全性开发组件之间进行权衡。现有组件很少能完全满足需求,但修改现有组件的成本还是可能低于开发一个完全不同的方案的。另外,使用符合行业标准的技术使组织更容易聘请专家,而发布独有的开源方案则可能帮助组织从社区中挖掘人才 

二、微服务与 SOA 的区别 

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来

接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言

这使得构建在各种各样系统中的服务可以以一种统一、通用的方式进行交互 

都是服务化,那微服务与 SOA 有什么区别呢? 

相同点:

需要注册中心,实现动态的服务注册发现机制 

需要考虑分布式下面的事务一致性,CAP 原则下,两段式提交不能保证性能,事务补偿机制需要考虑 

同步调用还是异步消息传递,如何保证消息可靠性?SOA 由 ESB 来集成所有的信息

都需要统一的 Gateway 来汇聚、编排接口,实现统一认证机制,对外提供 APP 使用的 RESTful 接口 

同样要关注如何在分布式下定位系统问题?如何做日志跟踪?

差异点: 

是持续继承、持续部署?对于 CI、CD(持续集成、持续部署),这本身和敏捷、DevOps 是交织在一起的,所以更倾向于软件工程的领域而不是微服务技术本身

使用不同的通信协议是不是区别?微服务的标杆通信协议是 RESTful,而传统的 SOA 一般是 SOAP,不过目前来说采用轻量级的 RPC 框架(Dubbo、Thrift、gRPC) 非常多,在 SpringCloud 中也有 Fegin 框架将标准 RESTful 转为代码的 API 这种仿 RPC 的行为,这些通信协议不应该是区分微服务架构和 SOA 的核心差别

是流行的基于容器的框架还是虚拟机为主?Docker 虚拟机和物理机都是架构实现的一种方式,不是核心区别 

SOA 和微服务的一个主要不同点就是自动化程度上的不同

大部分的 SOA 实现只是达到服务级别的抽象, 而微服务达到了实现和运行环境的抽象级别

在一个规范的微服务中,每个微服务应该被构建成胖 JAR(fat JAR),其中内置了所有的依赖,然后作为一个单独的 Java 进程存在 

参考资料:《微服务架构实战》—— 张锋 

一  叶  知  秋,奥  妙  玄  心 

相关文章:

  • 防火墙命令行基础配置实验(H3C模拟器)
  • 为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?
  • echarts 几千条分钟级别在小时级别图标上展示
  • JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
  • JavaScript 原型,原型链的特点
  • [PyTorch][chapter 64][强化学习-DQN]
  • 微软 Edge 浏览器目前无法支持 avif 格式
  • Labelme加载AI(Segment-Anything)模型进行图像标注
  • 解决DaemonSet没法调度到master节点的问题
  • 短视频获客系统成功分享,与其开发流程与涉及到的技术
  • Ubuntu18.04安装A-Loam保姆级教程
  • 4-20mA高精度采集方案
  • 【nlp】3.5 Transformer论文复现:3.解码器部分(解码器层)和4.输出部分(线性层、softmax层)
  • Re54:读论文 How Context Affects Language Models‘ Factual Predictions
  • CSS:浏览器设置placeholder样式 / 微信小程序设置placeholder样式
  • php的引用
  • .pyc 想到的一些问题
  • Angular 响应式表单之下拉框
  • CentOS 7 防火墙操作
  • ES6 学习笔记(一)let,const和解构赋值
  • gcc介绍及安装
  • Node + FFmpeg 实现Canvas动画导出视频
  • Shell编程
  • socket.io+express实现聊天室的思考(三)
  • Spring框架之我见(三)——IOC、AOP
  • 从0到1:PostCSS 插件开发最佳实践
  • 理清楚Vue的结构
  • 两列自适应布局方案整理
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何选择开源的机器学习框架?
  • 实战|智能家居行业移动应用性能分析
  • 算法---两个栈实现一个队列
  • 为什么要用IPython/Jupyter?
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 我们雇佣了一只大猴子...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Maven错误Error executing Maven
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #FPGA(基础知识)
  • (2)(2.10) LTM telemetry
  • (C语言)fgets与fputs函数详解
  • (笔试题)合法字符串
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (一)appium-desktop定位元素原理
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)VC++中ondraw在什么时候调用的
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net core使用ef 6
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net6+aspose.words导出word并转pdf