SpringCloud简介

news2024/9/20 18:48:09

 一、注册中心

1、为什么需要用到注册中心?

让消费者服务及时知道提供者服务的状态。例如:是否宕机、是否增加了集群实例等。

2、dubbo和zookeeper

特点:服务消费端订阅注册中心。服务提供端增加实例会把新实例注册到注册中心,注册中心接收到新实例注册之后会通知服务消费端,然后服务消费端会到注册中心重新拉取注册信息。

3、Eureka

①总体机制

特点:Eureka不支持注册信息订阅,消费者**定时**访问注册中心,发现信息更新则拉取到本地。SpringCloud中没有严格意义上的consumer、provider。单独来看时,A服务调用B服务,可以说A是consumer,B是provider,但也可能B反过来调用A。

②微服务B参数

微服务B的心跳机制:每次心跳请求都要发送两个参数给注册中心。

- 计划存活时间:就像租房签合同时写明租多久
- 下次续约时间:就像跟房东续租

假设计划存活时间为90秒,下次续约时间为60秒。如果到60秒时微服务B没有续约,注册中心不会认为微服务B宕机;到90秒之后仍未续约,注册中心才会认为微服务B宕机。

③Eureka参数

- 多久执行一次失效服务剔除,被剔除的服务无法被消费端访问
- 自我保护机制
    - 默认开启,实际开发中建议关闭。
    - 如果有效服务比例低于85%,则失效服务不会被剔除,也就是会被保留。

> 家里穷的时候破东西也要留着。

4、Nacos

两种都支持:注册中心订阅发布和消费者定时拉取。

5、注册中心核心数据结构

核心结构:Map<微服务名称字符串,List<微服务实例>>

因为微服务实例有可能因为配置了集群而有多个,所以使用List集合保存。

此时Map接口的实现类,倾向于使用ConcurrentHashMap:支持并发读写。

二、ribbon客户端负载均衡

1、为什么叫客户端负载均衡

- 客户端:微服务调用过程中,consumer这一端
- ribbon:
    - 导jar包在consumer这边
    - 工作在consumer这边

2、负载均衡策略

- 轮询 RoundRobinRule:轮流访问每一个集群实例
- 权重 WeightedResponseTimeRule:权重高的实例被访问到的几率大,而权重值是根据服务提供者的响应时间设定的,响应时间越长权重值越小。它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大。
- 随机 RandomRule:从集群服务列表中随机选择一个访问
- 最小连接数 BestAvailableRule:也叫最小并发数,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。
- 重试策略 RetryRule:按照轮询策略来获取服务,如果获取的服务实例为null或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回null。
- 可用性敏感 AvailabilityFilteringRule:先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。
- 区域敏感 ZoneAvoidanceRule:根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。

> 不管具体采用哪一个策略,最初确定第一个被访问的微服务实例时都是随机选择的。
即使是轮询也只是每一轮访问的顺序一样,第一轮访问的顺序是随机的。

 三、熔断器

1、三种服务调用错误

- 连接超时 Connection timeout:HTTP建立连接时三次握手过程超时
- 请求超时 read timeout:HTTP连接成功建立,但是服务器提供者执行请求超时
- 服务提供者抛异常

2、服务降级

虽然服务器端执行请求失败,但是并不是返回报错信息,而是返回比较友好的错误提示,例如:“服务器繁忙,请稍候重试!”。相对于正式的正确结果,友好提示就是“服务降级”。

3、熔断阈值

Hystrix会对请求情况计数,当一定时间失败请求百分比达到阈值,则触发熔断。默认阈值为:

- 请求失败比例50%
- 请求次数最低不少于20次

4、熔断状态间切换

①关闭

消费者可以正常调用提供者。

②全开

满足熔断阈值的要求,熔断器打开,消费者无法调用提供者。持续时间10秒。

③半开

全开状态持续10秒后,进入半开状态。在半开状态下仅允许一个请求访问提供者。

- 请求成功:熔断器关闭。
- 请求失败:回到全开状态。

5、线程隔离

服务消费者处理请求和调用其它服务器使用的是不同线程。而调用其它微服务的线程来自于熔断器内部的线程池。有了线程池,我们就可以把调用其它微服务的线程数量限制在它们的承受能力范围内,对服务提供者来说是一种保护。

四、OpenFeign

1、底层机制

RestTemplate+Ribbon+熔断器

2、顶层设计

让我们可以像调用本地方法一样调用远程方法。

3、底层原理

- 我们只是写了接口,没有提供实现类,可最后调用接口方法可以执行具体操作。
- 从Java语法要求角度来讲,接口里面的抽象方法是必须有实现方法才能执行。
    - 明确实现类
    - 匿名内部类
    - Lambda表达式
- 所以说,表面上是调用了接口,但是实际上肯定是有实现类的。只是这个实现类不是我们写的。
- 此时实现类是框架生成的。对于基于接口生成实现类的场景,通常都是:动态代理。
- 通过debug查看源码能够发现,Feign、Mybatis底层确实都是使用动态代理。
- Feign底层由动态代理生成的类内部会把微服务的名称交给ribbon,由ribbon从注册中心获取目标微服务的信息,然后参考负载均衡策略实现远程调用,具体远程调用由RestTemplate完成。

> 启发:框架做的无非是两件事
●实现原本没有的功能
    ○注册中心
    ○熔断器
    ○网关
    ○配置中心
●简化开发
    ○Feign

五、网关

微服务非常多的时候,客户端要记住太麻烦了,所以把网关设定为所有微服务的统一入口。
而有了这样一个入口,就可以在其中执行鉴权、过滤、路由等这样的统一性的操作。

1、网关的转发规则

属性名含义
id多个微服务需要多套配置,为了区分每一套配置,每套配置都通过id属性设置唯一标识
predicates断言,请求地址的匹配规则
uri路由地址,匹配到断言规则之后,请求发送的目标位置

2、路由配置

①静态路由

写死的访问地址。例如:

uri: http://localhost:8206

开发时不建议使用,因为从开发环境部署到生产环境时,访问地址会发生变化。

②动态路由

使用微服务名称代替写死的访问地址。例如:

uri: lb://service-product

lb是load balance的缩写,意思是:负载均衡。
然后网关底层根据微服务名称会到注册中心查找微服务的具体信息。
所以网关内部执行负载均衡等操作其实是Ribbon组件在起作用。

3、路由过程

网关把动态路由中的微服务名称传给ribbon,ribbon根据微服务名称到注册中心查询到微服务列表。ribbon把微服务列表拉取到本地,然后根据负载均衡算法决定具体访问哪一个微服务,确定之后由RestTemplate发起远程调用。

六、配置中心

每个微服务单独修改application.yml非常繁琐,所以需要配置中心。配置中心也在注册中心中注册,每个微服务只需要知道注册中心在哪就行,到注册中心找到配置中心的访问地址,然后访问配置中心获取各自的详细配置信息。从而实现所有微服务的配置信息在配置中心统一管理。

在配置中心修改配置之后,大部分配置可以直接修改而不必重启微服务。当然,像端口号这样的配置信息修改之后还是要重启微服务的。

七、总结

应对问题解决方案
服务调用时,需要知道对方的状态注册中心
provider集群分摊负载负载均衡
服务调用过程中可能失败,甚至雪崩熔断器
RestTemplate、Ribbon、熔断器调用复杂,需要简化开发代码Feign
微服务数量增加,IP地址、端口号记录麻烦,<br>又需要在请求到达微服务前执行统一性操作网关统一入口
微服务数量增加,配置文件管理成本增加配置中心,统一管理配置信息

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

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

相关文章

HCIP知识点(前三天)

复习HCIA&#xff1a; 一、TCP/IP模型&#xff0c;OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址&#xff08;无标准格式&#xff09; 传输层 TCP/UDP – 分段&#xff08;受MTU限制&#xff09;、端…

C 语言网络编程 — PF_NETLINK sockets

目录 文章目录目录PF_NETLINK socketsPF_NETLINK sockets Linux 提供了 4 种 User Process 和 Kernel 之间进行通信的 IPC&#xff08;Inter-Process Communicate&#xff0c;进程间通信&#xff09;方式&#xff1a; /procioctlsysfsPF_NETLINK sockets&#xff08;Netlink …

vue大型商城系统中遇到的问题(上)

一&#xff1a;创建仓库1.领导创建git仓库&#xff08;参考————这篇文章&#xff09;&#xff0c;新手下载git2.打开cmd终端&#xff0c;将git仓库拉到本地3.进入文件目录&#xff0c;查看分支&#xff08;新手向——为什么需要创建分支&#xff0c;查看---&#xff09;4.创…

HCIP笔记

第一天 ARP协议 正向ARP&#xff1a;通过IP地址获取目的MAC地址 过程&#xff1a; 目的IP到目的MAC再到ARP表中&#xff0c;所需时间是180s 反向ARP&#xff1a;通过目标MAC地址获取目标IP地址 免费ARP&#xff1a;利用正向ARP的原理请求自己的IP地址 1.自我检测 2.检测地址冲…

使用JMeter 录制脚本

使用JMeter 录制脚本&#xff0c;参考的一个博主的&#xff0c;我记录到我这里&#xff0c;留着以后用哈哈哈哈 1&#xff0c;添加 HTTP代理服务器 测试计划右键–》添加–》非测试元件–》http代理服务器 2&#xff0c;添加线程组&#xff0c;用来存放录制脚本的&#xff0c…

C语言设计模式:实现简单工厂模式和工程创建

目录 一&#xff0c;设计模式概念引入 ① 什么是设计模式 ② 什么是类和对象 ③ 什么是工厂模式 二&#xff0c;C语言工厂模式的实现 ① 普通类和对象的代码实现 ② 工厂模式代码实现 ● cat.c ● dog.c ● person.c ● animal.h ● mainpro.c ● 完善mainpro.c …

硕士毕业论文常见的排版小技巧

word排版陆续更新吧&#xff0c;更具我所遇到的一些小问题&#xff0c;总结上来 文章目录1.避免题注&#xff08;图或者表的标题&#xff09;与图或表格分不用页注意点&#xff1a;光标移动到表的题注后面2.设置论文的页眉关键点&#xff1a;需要将每一章节末尾&#xff0c;都要…

Hadoop 运行环境搭建(开发重点)

文章目录Hadoop 运行环境搭建&#xff08;开发重点&#xff09;一、安装JDK二、安装配置 Hadoop1、安装 hadoop2、hadoop 目录结构3、设置免密登录4、完全分布式模式&#xff08;开发重点&#xff09;1&#xff09;分发jdk2&#xff09;集群配置(1) 集群部署规划(2) 配置文件说…

2.3 二分搜索技术

二分搜索算法是运用分治策略的典型例子。给定己排好府的 n个元素a10:n-1]&#xff0c;现要在这n个元素中找出一特定元素3。首先较容易想到的是用顺序搜索方法&#xff0c;逐个比较a10:1-1]中元素&#xff0c;直至找出元素&#xff0c;或搜索遍整个数组后确定&#xff0c;不在其…

现代HYUNDAI EDI需求分析

现代集团(HYUNDAI)是韩国一家以建筑、造船、汽车行业为主&#xff0c;兼营钢铁、机械、贸易、运输、水泥生产、冶金、金融、电子工业等几十个行业的综合性企业集团。本文主要介绍HYUNDAI 的EDI需求&#xff0c;带大家快速理清思路&#xff0c;明确EDI项目的推进流程。 通信标准…

前端——2.HTML标签1

这篇文章我们从0来介绍一下HTML的相关标签内容 目录 1.HTML语法规范 1.1基本语法概述 1.2标签关系 2.HTML的基本结构标签 2.1第一个HTML网页 2.2基本结构标签总结 1.HTML语法规范 下面&#xff0c;我们来看一下HTML的语法规范的内容 1.1基本语法概述 首先&#xff0c…

【0成本搭建个人博客】——Hexo+Node.js+Gitee Pages

目录 1、下载安装Git 2、下载安装Node.js 3、使用Hexo进行博客的搭建 4、更改博客样式 5、将博客上传到Gitee 6、更新博客 首先看一下Hexo的博客的效果。 1、下载安装Git Git 是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本…

openpnnp - 载入板子后,要确定板子的放置角度

文章目录openpnnp - 载入板子后,要确定板子的放置角度概述用openpnp提供的功能来确定被夹住的板子的左下角原点位置和板子的角度备注ENDopenpnnp - 载入板子后,要确定板子的放置角度 概述 设备是有夹具的, 用百分表打过, 夹具本身在Z方向的平行度是没问题的. 但是, PCB板子的…

Flink Table Store 0.3 构建流式数仓最佳实践

摘要&#xff1a;本文整理自阿里巴巴高级技术专家&#xff0c;Apache Flink PMC 李劲松&#xff08;之信&#xff09;&#xff0c;在 FFA 2022 实时湖仓的分享。本篇内容主要分为四个部分&#xff1a;挑战&#xff1a;Streaming DW 面临的难题案例&#xff1a;FlinkFTS 典型场景…

Active Directory DNS备份和恢复

DNS是Active Directory域服务&#xff08;AD DS&#xff09;不可或缺的一部分&#xff0c;因为它全权负责DNS名称解析。当发生DNS服务器灾难时&#xff0c;无法在网络中查找资源&#xff0c;并且所有AD操作都将暂停。因此&#xff0c;恢复DNS服务器是绝对必要的。Active Direct…

JS实现css的hover效果,兼容移动端

Hi I’m Shendi JS实现css的hover效果&#xff0c;兼容移动端 功能概述 CSS的hover即触碰时触发&#xff0c;在电脑端鼠标触碰&#xff0c;移动端手指触摸 有的时候光靠css实现不了一些效果&#xff0c;例如元素触发hover&#xff0c;其他元素触发动画效果&#xff0c;所以需要…

npm i 安装报错

npm WARN EBADENGINE Unsupported engine { npm WARN… npm WARN deprecated stable0.1.8: Modern JS… 诸如此类的报错。大部分都是因为 node 版本问题&#xff01;比如node版本无法满足&#xff0c;对应项目里需要的那些模块和依赖所需要的条件。 有些模块对node版本是有要…

【兴趣探索】采用Docker部署Rustdesk自建服务器

采用Docker部署Rustdesk自建服务器 场景&#xff1a;本想找一个远程手机的软件&#xff0c;使用的三款都存在限制&#xff1a; ①向日葵一天只能远程三次&#xff0c;需要花钱升级会员 ②Todesk因为手机兼容问题&#xff0c;需要花钱买插件解决 ③Airdorid免费200M&#xf…

23年如何备考PMP考试呢?攻略+资料

我建议准备的最短时间至少1个半月到2个月&#xff0c;集中精力备考大约4个小时&#xff0c;大家可以根据自己的专注力的长短去调节每天的备考时间。 1、《PMBOK指南》第六版&#xff08;16天&#xff09; 教材是要读的&#xff0c;虽然说考试考纲和教材不太一样&#xff0c;但…