SCD1: 微服务概览

news2025/7/19 16:53:26

1.1简介

1.1.1 概念

  集群: 它是一种物理形态,简单来讲就是把同一个业务部署到多个服务器上。而在接收到请求流量时,主要是通过负载均衡器,来进行流量分配。
  分布式: 它是一种工作方式,将一个业务拆成多个小业务,然后部署在不同的服务器上。而分布式系统则指的是,部署在同一网络下,并通过网络进行通信与协调的多个组件,它们对外表现为一个系统。
  微服务: 是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。


注意: 值得一提的是,集群与分布式、微服务区别很大。但是,分布式与微服务的概念却很模糊,对于二者的关系网上也是众说纷纭,这就类似于一直有人争论java中的值传递与引用传递。但我的理解是,分布式包含微服务,微服务是一种特殊的分布式。


结构图如下:在这里插入图片描述

1.1.2 SpirngCloud

  SpringCloud 是一套微服务架构的工具集,提供了一系列的微服务工具。并且其拥有众多子项目,如下图:
在这里插入图片描述


1.2 选型

  本文的微服务工具选型是:nacos 、ribbon、openfeign、seata、gateway、sentinel。

1.2.1 Nacos 服务发现

  微服务架构下,系统由一个又一个的服务组成,每一个服务都是一个独立的项目。而服务之间的通信则有网络完成,而如何实现服务之间的“牵线搭桥”,则主要依靠Nacos,所有的服务在注册时,都会往服务注册表中注册自己,以便其他服务进行发现,以及后续调用。

  原理图如下:

在这里插入图片描述

1.2.2 Ribbon 负载均衡

  负载均衡一词指的是,将负载或者压力进行均摊,例如在进行服务调用时,将请求流量均衡的分配给服务提供方。


  常用负载均衡策略:

名字备注
最小并发数根据服务的并发数量,来选择一个最小的
轮询按照轮次来进行服务调用
随机根据随机算法完全随机调用
响应时间权根据服务调用的响应时间来调用, 响应时间越长,权重越小

提示: 值得注意的是,openfeign底层内置了Ribbon,在进行服务调用的时候,便已经进行了负载均衡。


1.2.3 OpenFeign 服务调用

  openfeign是声明式服务调用组件,它实现了像调用本地方法一样,调用远程方法。由于服务之间项目独立,因此其严格遵守resultful风格,使用post、delete、put、get来对应增删改查操作。


  而共享接口,则指的是,将服务提供方的接口与实现进行分离,服务实现处于app模块下,而接口则处于client模块下,服务调用方只需要引入client的依赖即可使用。虽然它是openfeign的产物,但是我认为它与openfeign并没有实际的关系,因为共享接口实际上是依托于maven实现的。于是,通过共享接口,与声明式服务调用,它解决了服务之间的调用问题。


  而openfeign的底层实现原理则是,通过spring-aop使用Jdk动态代理,同时通过反射来完成的。值得一提的是,openfeign是对于restTemplate的二次封装,因此在动态代理时,增加的额外代码则是,restTesmplate的服务调用代码。


  服务项目模块划分结构图如下:
在这里插入图片描述

1.2.4 Nacos 配置管理

  Nacos除了提供服务发现的功能以外,还提供了配置管理的功能。配置管理提供了三个重要的功能:审计、动态刷新、共享配置
  审计主要负责校验配置是否正确;动态刷新则指的是,需要更改配置时,不再需要下线项目,重新打包与部署,而是实时更新;共享配置则指的是,可以把共有且重复的配置提取出来,作为公共配置存在。


  配置原理如下:
在这里插入图片描述提示: 服务项目启动之时,便会去配置管理服务器中拉去相应的配置。


注意: Nacos之所以集成了两个工具,是因为二者的执行流程极其相似,如下表:

服务发现配置管理
服务注册新建配置
拉取服务列表启动时拉取配置
健康检测配置变动检测
变更通知变动通知
重新拉取服务列表重新拉取配置

Nacos系统架构图:
Nacos系统架构图

1.2.5 Seata 分布式事务

  单体项目的事务管理,不能满足微服务项目的需求,因此需要使用分布式事务。
  常见的分布式事务方案有: XA协议、TCC模式、SAGAS模式、 AT模式、重试+幂等性。

名字描述
XA协议:多个数据库同步打开事务,等待TC协调。等所有的分支事务确认提交之后,再统一提交。极其消耗数据库性能。
TCC模式:将一个事务分成三个操作,try做业务检查与资源预留,comfirm则是确实操作,cancel则是取消操作。
SAGAS模式:用于处理长事务,每个参与者都提交本地事务,一旦失败,那么则补偿前面的成功参与者。
AT模式:是一种无侵入的分布式事务解决方案,主要分为两个阶段:1.代理数据源、获取操作前后的镜像数据,并记录得到undo_log表中、加入到当前事务。2.提交成功,则删除undo_log记录;失败则根据记录生成sql进行数据回滚。
重试+幂等:则是不断重试,然后人工介入。

注意: 这只是冰山一角,具体实现应该详细了解。


执行原理图:

在这里插入图片描述

1.2.6 gateway 服务网关

  服务网关是整个分布式系统的唯一入口,它主要提供的功能有:IP黑白名单动态路由授权日志记录性能检测跨域协议转换限流
  而至于为什么需要一个服务网关,则是因为它不仅可以集成具有横切性质的功能,还可以为整个微服务系统提供隐蔽性。


项目示意图如下:
在这里插入图片描述

实现原理:
在这里插入图片描述

1.2.7 单点登录

  单体项目下,记录用户状态的方式有token与session两种。而在微服务中,由于服务之间的独立性,于是这种两种方式则不再可用,因此可以使用casoauth2sa-token等方式实现。
  而基于redis+cookiesa-token的实现过程则是,当用户在某一个服务中的页面登录之后,由jwt生成一个签名作为redsi中的key来使用,并且将其通过父级域名存入值cookie之中。然后,将这个key携带数据保存至redis中。当每次发起请求之时,便会携带token,然后进行验证是否登录。


1.2.8 Sentinel 服务容错

  为了尽量控制服务调用时出现的各种错误,尽量避免服务雪崩等情况的出现,我们需要使用服务容错,来对服务调用进行容错处理

工作原理:
在这里插入图片描述


本文仅作为个人学习笔记,各种细节难免出错。留有此文,以便他日之需。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC学习篇(三)

转发和重定向 1 保存数据四种方式 1.1 转发范围 1.1.1 Model a 设置值 a.1 语法 Model对象.addAttribute(key,value);a.2 示例 m.addAttribute("a","香蕉");b 有效范围 在转发的当前页面有效1.1.2 ModelMap a 设置值 a.1 语法 ModelMap对象.addAt…

API网关功能一览

API网关功能一览 无论是单体应用,SOA或者现在流行的微服务架构,都需要一个API网关。 API网关作为内网的入口;统一对外提供服务。 一些公共服务的建设,也可以在网关层统一处理。 网关应该是无状态,容易线性扩展的;运行时…

基于Swagger的接口自动化测试

本文是一篇讲述敦煌网云原生微服务与服务接口(API)自动化测试实现的文章。 云原生微服务框架项目升级在如火如荼的进行中,根据磐石框架延伸产生的测试技术,亦是本文主旨所在。 一、Swagger介绍 原始时代,可能在工程开发前夕,会…

XSS进阶一

目录实验目的预备知识实验环境实验步骤一实例一、热身运动,不设防实验步骤二实例二、小写不行,就大写吧实验步骤三实例三、大写小写都不行,看你怎么办?实验目的 1.深入理解xss工作原理。 2.怎么去绕过规则实现xss。 3.培养学生的…

卷积版动作仿真模拟网络

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

【图像分割】基于差分进化算法优化模糊熵实现多级图像阈值分割附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

猿创征文|2022年前端之路——我的前端开发好帮手

💬关于「猿创征文 」第四季 | 2022 年我的开发者工具 活动主旨:开发者每天都在使用、寻找、贡献、创作各类开发者工具,包括开源服务、付费软件、API等。好的工具可以极大帮助我们提升效率,服务业务。本期邀请大家创作在2022年有效…

Linux 中 /etc/hosts 文件的用途是什么

前言 无论是Linux操作系统还是windows操作系统,都存在 /etc/hosts 文件,该文件主要用于映射 IP 地址和域名之间的连接。如果你对这句话还不是特别理解,那就跟着我继续往下一起来看一下这个文件到底是如何将IP地址和域名之间进行映射的。 /e…

云原生学习的最佳路径

前言 运维这个课程是一个入行门槛低,精通比较难的岗位。 之所以比较难精通,是因为学的比较杂。更重要的是很多种知识并没有一个很好的连贯性。 比如你学zabbix和学docker,就是在学两个东西。 在或者你学nginx和学mysql,这也是两…

SparkSQL-数据模型DataFrameDataSet

数据模型DataFrame 1. DataFrame是什么 在 Spark 中,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame 所表示的二维表数据集…

Postman的接口测试和持续集成——接口测试方法论

在使用Postman完成从单接口测试用例的设计到业务逻辑接口测试用例的设计之后,相信我们已经掌握了接口测试的思维以及具体的实现方法。到目前为止,我们还处在手动测试阶段,尽管和以前基于界面的业务测试相比已经有了很大区别,但距离…

shell脚本编程基础(上)

目录 (一)shell介绍 1.什么是shell 扩展知识 2. shell功能 (二)shell语法 2.1 如何书写一个shell脚本 0x01 shell脚本的命名: 0x02 shell脚本格式: 0x03 shell中的注释使用#号 2.2 如何运行一个shell脚本 2.3 s…

Redis 实现限流策略

除了控制流量,限流还有一个应用目的是用于控制用户行为,避免垃圾请求。 比如在 UGC 社区,用户的发帖、回复、点赞等行为都要严格受控,一般要严格限定某行为在规定 时间内允许的次数,超过了次数那就是非法行为。对非法…

Word处理控件Aspose.Words功能演示:使用 Python 合并 Word 文档

当您必须将多个 Word 文档合并到一个文件中时,可能会有多种情况。例如,当多人编写文档的不同部分时,您需要在最后组合内容。另一方面,您可能需要将所有发票合并到一个 Word 文档中。为了以编程方式执行此合并,本文介绍…

码神之路项目总结(四)

一、图片上传 请求接口: 思路: 1、后端用MultipartFile接收前端传过来的文件信息 2、用uuid将文件重命名,然后将文件以新文件名通过七牛云上传到七牛云服务器 二、导航--文章分类 请求接口: 思路: 1、直接从文章…

全球绿色建筑的 10 个最酷的例子

全球变暖和气候变化,是我们日常生活中需要解决的社会问题。从减少塑料的使用到尽量减少汽车的使用,因为它会导致化石燃料的燃烧,每个人都必须具有社会意识,以减轻全球变暖的影响。 在这种情况下,我们为世界十大绿色建…

MyBatis:基础入门

MyBatis基础入门 文章目录MyBatis基础入门一、MyBatis 简介二、MyBatis 工作原理三、MyBatis 与 Hibernate 的对比1. 原生 Jdbc 存在的问题2. MyBatis 与 Hibernate 的对比四、MyBatis demo1. 引入 Maven 依赖2. 创建mybatis-config.xml配置文件3. 编写JavaBean类4. Mapper层编…

Java开发高质量代码建议1:三元操作符的类型务必一致

在Java开发中,三元操作符是 if-else 的简化写法,在项目中使用它的地方很多,也非常好用,但是好用又简单的东西并不表示就可以随便用,如下代码: public class Main {public static void main(String[] args) {int i 90…

ZYNQ之FPGA学习----Vivado功能仿真

1 Vivado功能仿真 阅读本文需先学习: FPGA学习----Vivado软件使用 典型的FPGA设计流程,如图所示: 图片来自《领航者ZYNQ之FPGA开发指南》 Vivado 设计套件内部集成了仿真器 Vivado Simulator,能够在设计流程的不同阶段运行设计的功能仿真和…

搞笑段子很皮的文案系列001,可爱有趣文案系列合集

大家好,我是我赢助手,专注于自媒体短视频去水印、去重和文案提取运营。 今天给大家分享下收集的一些文案:搞笑段子很皮的文案系列 1. 女人之间不用吵架,你比她漂亮就行了。 2. 暧昧,把这两个字拆开,就是真…