实用篇-认识微服务

 一、服务架构演变

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版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/107879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜

鲸参谋监测的京东平台9月份吸尘器市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据显示,今年9月,京东吸尘器的销量为19万,环比下滑约12%,同比下滑约25%;销售额为1.2亿,环比下滑约11%&…

MAC下安装Python

MAC基本信息: 执行命令: brew install cmake protobuf rust python3.10 git wget 遇到以下问题: > Downloading https://mirrors.aliyun.com/homebrew/homebrew-bottles/rust-1.59.0 Already downloaded: /Users/xxxx/Library/Caches/Ho…

vue笔记(三)

15、过滤器 过滤器 用法:对要显示的数据进行特定格式化后再显示(用于一个简单的逻辑处理)语法 1、注册过滤器:Vue.fillter(name,callback) (全局)或 new Vue{filters:{}}(局部&…

FFmpeg5.1.3编译动态库踩坑之旅(基于Linux虚拟机)

准备工作 环境准备 1.Windows安装Oracle VM VirtualBox 7.0.10,安装ubuntu-22.04.3。 坑一:无法往虚拟机里拖放复制文件,解决办法:登录Ubuntu虚拟机时切换到xorg方式登录,参考地址:Ubuntu Desktop 22.04…

『51单片机』 DS1302时钟

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大…

PHP如何批量修改二维数组中值

每个name值加pex,age加5, 原数据: $data[["name">a,age>12],["name">b,age>22],["name">c,age>33],["name">d,age>44], ];实现效果 方案一、foreach引用方式 $data[["…

redis6.0源码分析:简单动态字符串sds

文章目录 sds简介与特性(面试)sds结构模型数据结构苛刻的数据优化数据结构优化uintX_t对齐填充 sds优势O(1)时间复杂度获取字符串长度二进制安全杜绝缓冲区溢出自动扩容机制——sdsMakeRoomFor方法 内存重分配次数优化 sds最长是多少部分API源码解读创建sds释放sds sds简介与特…

从Mysql架构看一条查询sql的执行过程

1. 通信协议 我们的程序或者工具要操作数据库,第一步要做什么事情? 跟数据库建立连接。 首先,MySQL必须要运行一个服务,监听默认的3306端口。在我们开发系统跟第三方对接的时候,必须要弄清楚的有两件事。 第一个就是通…

nodejs+vue人脸识别考勤管理系统的设计与实现-计算机毕业设计

根据分析,本系统主要有3个角色:管理员、用户、考勤系统。 (1)管理员:管理员信息的添加、删除、修改和查询,用户信息添加、删除、修改和查询。 (2)用户:用户的注册和登录&…

面试准备中........

一、Linux 计算机网络相关: 1.OSI七层模型 应用层 :给用户提供操作界面 表示层:数据的表示:将字符转化为2进制或将2进制转化为字符。加密:对称加密和非对称加密,ssh协议。压缩:将文件压缩。…

Android笔记(九):Compose组件的状态(一)

在使用Compose定义UI界面时,可以发现界面的变换往往与Compose组件内部的状态相关,当状态值发生变化时,Compose构成的可组合的界面也会刷新发生相应的变化。将在本笔记中将对可组合项的状态的定义、状态提升、状态丢失和状态的保存进行简单介绍…

开源3D激光(视觉)SLAM算法汇总(持续更新)

目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Cartographer Cartog…

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?php include utils.php;if (isset($_POST[guess])) {$guess (string) $_POST[guess];if ($guess $secret) {$message Congratulations! The flag is: . $flag;} else {$message Wrong. Try Again;} }if (preg_match(/utils\.p…

[ACTF2020 新生赛]Include

【解题思路】 1.打开链接 发现好东西&#xff0c;进一步分析。 2.分析页面 发现网页得到一个GET请求-->?fileflag.php 可以推断&#xff0c;要解答该题目需要获取 flag.php 的源代码. 将flag.php文件进行base64编码&#xff08;将网页源代码转换为Base64编码&#xff…

电脑QQ如何录制视频文件?

听说QQ可以录制视频&#xff0c;还很方便&#xff0c;请问该如何录制呢&#xff1f;是需要先打开QQ才可以录制吗&#xff1f;还是可以直接使用快捷键进行录制呢&#xff1f;录制的质量又如何呢&#xff1f; 不要着急&#xff0c;既然都打开这篇文章看了&#xff0c;那小编今天…

【软考】系统集成项目管理工程师(十)项目质量管理【3分】

一、质量概念 1、定义 国际&#xff1a;反应实体满足主体明确和隐含需求的能力的特性总和 国内&#xff1a;一组固有特性满足要求的程度 2、质量与等级 质量&#xff1a;作为实现的性能或成果&#xff0c;是一系列内在特性满足要求的程度ISO9000 等级&#xff1a;作为设计意…

elementUI el-collapse 自定义折叠面板icon 和 样式 或文字展开收起

: :v-deep{.el-collapse-item__arrow {width: 40px;}.el-icon-arrow-right:before {content: "展开";font-size: 15px;font-family: heiti;color: #2295ff;font-weight: bold;}.el-collapse-item__arrow.is-active {transform: none;}.el-collapse-item__arrow.is-a…

【计算机毕设经典案例】基于微信小程序的图书管理系统

前言&#xff1a;我是IT源码社&#xff0c;从事计算机开发行业数年&#xff0c;专注Java领域&#xff0c;专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 &#x1f449;IT源码社-SpringBoot优质案例推荐&#x1f448; &#x1f449;IT源码社-小程序优质案例…

Azure - 自动化机器学习AutoML Azure使用详解

目录 一、AutoML是如何工作的&#xff1f;二、何时考虑AutoML&#xff1f;三、AutoML助力训练与集成过程四、实战案例五、总结 自动化机器学习&#xff0c;简称为AutoML&#xff0c;旨在将机器学习模型的开发中繁琐且重复的任务自动化。这使得数据科学家、分析师以及开发人员能…

Java中的volatile关键字

volatile是什么&#xff1f; "volatile"是一个关键字&#xff0c;用于修饰变量。它的作用是告诉编译器该变量可能会在意料之外的时候被修改&#xff0c;因此编译器在对该变量进行优化时需要特别小心。 具体来说&#xff0c;当一个变量被声明为"volatile"…