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

实用篇-认识微服务

 一、服务架构演变

1. 单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署

单体架构的优点:

  • 架构简单
  • 部署成本低

单体架构的缺点: 

  • 耦合度高

2. 分布式架构 

分布式架构: 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务

分布式架构的优点:

  • 降低服务耦合
  • 有利于服务升级拓展

分布式架构需要考虑的问题:

  • 服务拆分粒度如何?
  • 服务集群地址如何维护?
  • 服务之间如何实现远程调用?
  • 服务健康状态如何感知?

哪些分布式技术可以解决分布式架构问题?

  • WebService
  • Hession
  • ESB
  • Dubbo (2012年由阿里巴巴开源)
  • SpringCloud (2015年至今是其发展最为火热的时期)
  • SpringCloudAlibaba (2018年至今是其发展最为火热的时期)

但是近几年应用最广泛的,最火热的莫过于微服务方案

3. 微服务

微服务是一种经过良好架构设计的分布式架构方案

微服务架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立(一个服务对应一个开发团队)、技术独立(基于业务可用选择使用不同的技术)、数据独立(一个服务一个团队对应一个数据库)、部署独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务优点:拆分粒度更小、服务更独立、耦合度更低

微服务缺点:架构非常复杂,运维、监控、部署难度高

二、微服务技术对比

1. 微服务结构

为了描述方便,把一个完整项目里的小服务称为微服务(或叫节点),这些微服务的整体称为集群,关系如下

项目 > 集群 > 微服务 > 业务 > 接口

从整体上来看,目前SpringCloud的应用量最大,并且逐年在增长;而Dubbo虽然是国内使用较多的RPC框架,但在微服务场景下的应用相对较少。SpringCloudAlibaba相对于前两者还比较年轻,但是由于集成了众多优秀的Alibaba组件,以及其在国内云原生和微服务落地方面的独特优势,因此得到了广泛的应用和关注

这三个技术栈的使用强度排序: SpringCloud > SpringCloudAlibaba > Dubbo

2. 技术对比

这三个技术栈的对比如下

相同点:

  • 都需要去做微服务拆分,也就是把一个完整的项目,根据功能拆分成很多微服务,再把这些拆下来的微服务做成集群。集群里的每个微服务都要遵循单一职责的原则,并且要面向服务,对外暴露接口,这样的话,集群里的微服务之间就可以相互调用
  • 由于项目会拆分成多个微服务,为了方便同时管理这些微服务(微服务之间的调用关系),就需要 '注册中心',用来拉取或注册服务信息
  • 由于项目会拆分成多个微服务,为了方便同时管理这些微服务(每个微服务的配置),就需要 '配置中心',用来统一管理整个集群的微服务的配置
  • 由于项目已经拆分成多个微服务,用户到底访问哪个微服务呢,就需要在集群做一个统一的网关,作用是作为用户访问微服务的入口

不同点:

例如同样是注册中心,但是Dubbo、SpringCloud、SpringCloudAlibaba所用的技术不同。如下表

'无' 表示没有实现这个技术

Dubbo

SpringCloud

SpringCloudAlibaba

zookeeper、Redis

Eureka、Consul

Nacos、Eureka

Dubbo协议

Feign (http协议)

Dubbo、Feign

SpringCloudConfig

SpringCloudConfig、Nacos

SpringCloudGateway、Zuul

SpringCloudGateway、Zuul

dubbo-admin,功能弱

Hystrix

Sentinel

 三种常用的技术栈,不同的技术栈是可以混合使用,那当这仨技术栈混合使用时,会有什么特点呢,如下图

三、SpringCloud

SpringCloud是目前国内乃至全世界使用最广泛的微服务框架

官网地址:

https://spring.io/projects/spring-cloud

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,也就是说SpringCloud的底层基于SpringBoot做了自动装配。从而提供了良好的开箱即用体验,如下

// 服务注册发现
Eureka、Nacos、Consul
// 服务远程调用
OpenFeign、Dubbo
// 服务链路监控
Zipkin、Sleuth
// 统一配置管理
SpringCloudConfig、Nacos
// 统一网关路由
SpringCloudGateway、Zuul
// 流控、降级、保护
Hystix、Sentinel

SpringCloud和SpringBoot的版本兼容关系:

SpringCloud版本

SpringBoot版本

2022.0.x aka Kilburn

3.0.x

2021.0.x aka Jubilee

2.6.x(小于2021.0.3用这个) 或 2.7.x(大于等于2021.0.3用这个)

2020.0.x aka Ilford

2.4.x(小于2020.0.3用这个) 或 2.5.x(大于等于2020.0.3用这个)

Hoxton

2.2.x(小于SR5用这个) 或 2.3.x(大于等于SR5用这个)

Greenwich

2.1.x

Finchley

2.0.x

Edgware

1.5.x

Dalston

1.5.x

在下面的正式学习中,我们使用的是Hoxton的SR10版本,所以对应的SpringBoot版本是2.3.x版本


http://www.kler.cn/news/107802.html

相关文章:

  • stable-diffusion-ui 下载和安装
  • 【uniapp】仿微信支付界面
  • Day 46 动态规划 part12
  • 【问题】在安装torchvision的时候,会自动安装torch?
  • 【考研数学】数学“背诵”手册 | 需要记忆且容易遗忘的知识点
  • 软考系列(系统架构师)- 2009年系统架构师软考案例分析考点
  • 【JAVA学习笔记】50 - Math类,Array类,System类,BigInteger和BigDecimal类
  • IO流框架,缓冲流
  • 【Codeforces】 CF79D Password
  • CompletableFuture 实战
  • 公网远程访问macOS本地web服务器
  • 23种设计模式(10)——门面模式
  • css:如何通过不同的值,改变盒子的样式和字体颜色通过computed而不是v-if
  • Operator开发之operator-sdk入门
  • XMLHttpRequest拦截请求和响应
  • Unity性能优化一本通
  • YOLOv5 onnx \tensorrt 推理
  • uniapp接口请求api封装,规范化调用
  • Go 实现插入排序算法及优化
  • 软考系列(系统架构师)- 2013年系统架构师软考案例分析考点
  • 5月22日比特币披萨日,今天你吃披萨了吗?
  • 【计算机网络】认识协议
  • Spring Boot拓展XML格式的请求和响应
  • 『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
  • leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间
  • Linux:【1】Linux中的文件权限概念和相关命令
  • Hive 视图和索引
  • Spring Security—配置(Configuration)
  • 命令行参数、环境变量
  • 集合总结(Java)