【SpringCloud】微服务重点解析

微服务重点解析

在这里插入图片描述

1. Spring Cloud 组件有哪些?

在这里插入图片描述

在这里插入图片描述

2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册和发现的?

如果写过微服务项目,可以说做过的哪个微服务项目,使用了哪个注册中心,常见的有 eureka、nacos;

对于 eureka:

在这里插入图片描述

  • 服务注册:服务提供者需要把自己的信息注册到 eureka 中,由 eureka 来保存这些信息,比如服务名称、ip、端口等等;
  • 服务发现:消费者向 eureka 拉取指定的服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个进行调用;
  • 服务监控:服务提供者会每隔 30 秒向 eureka 发送心跳,报告健康状态,如果 eureka 服务 90 秒没接受到心跳,从 eureka 中剔除;

对于 nacos(与 eureka 的区别):

在这里插入图片描述

  • 服务注册和服务发现跟 eureka 差不多;
  • 主要是服务监控上有区别:服务分为两大类,临时实例与非临时实例,两种服务收到的待遇还不一样;
    1. nacos 服务端支持主动检测服务提供者的状态:临时实例采用心跳模式(与 eureka 一致),非临时实例采用主动检测心跳模式;
    2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除;
    3. nacos 支持服务列表变更的消息推送模式,服务列表更新更加及时;
    4. nacos 集群默认采用 AP(高可用),当集群中存在非临时实例的时候,采用 CP(强一致);Eureka 采用 AP;
  • nacos 还支持配置中心,eureka 只支持注册中心,这也是选择使用 nacos 的一个重要原因;

3. 你们项目负载均衡是如何实现的?

(结合实际情况回答)负载均衡用的是 Ribbon,在发起远程调用的时候(RestTemplate 或者 Feign),会使用到 Ribbon 选取服务;

在这里插入图片描述

3.1 Ribbon 负载均衡策略有哪些?

  • RoundRobinRule:简单轮询服务列表来选择服务器;
  • WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小;
  • RandomRule:随机选择一个可用的服务器;
  • BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器;
  • RetryRule:重试机制的选择逻辑;
  • AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较小的实例;
  • ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择。使用 Zone 对服务器进行分类,这个 Zone 可以理解为一个机房/机架等。而后再对 Zone 内的多个服务做轮询;

3.2 如果想自定义负载均衡策略如何实现?

  1. 如何配置负载均衡策略:
    1. Bean 注入容器法:全局
    2. 配置文件指定法:局部

在这里插入图片描述

  1. 自己创建类实现 IRule(自定义 IRule 实现 => 自定义负载均衡规则),然后配置一下即可;

4. 什么是服务雪崩?怎么解决这个问题?

在这里插入图片描述

例如图中表示的:

  1. 服务 D 宕机,服务 A 无法建立连接,仍然进行额外的尝试;
  2. 服务 D 宕机,服务 A 建立了连接,消耗了连接池的连接数,阻塞等待服务 D 的响应/心跳检测服务 D 的活性,甚至请求会重传;
  3. 服务 A 很可能撑不住就也故障了,而越往上层的服务调用者,阻塞的时间几何增长,也压根支持不了多少并发量,也会雪崩式的崩溃;

这样服务 D 宕机可能会导致依赖于它的其他服务出现连锁反应式的故障,最终导致整个系统崩溃!

  • 服务故障但是没拒绝或直接响应异常导致的;

服务限流也是不错的处理方法,可以用 nginx,网关,sentinel 限流…

  • 非本章重点,之后会讲;

4.1 服务降级(解决)

服务降级是服务自我保护的一种方式,或者保护下游服务(雪崩下面的服务消费者)的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃;

  • 当访问失败、响应时间过长、资源不足之类的就会触发服务降级;

其做法就是,换另一个服务,也就是一个 Plan B:

  1. 返回“稍后尝试”;
  2. 执行其他的业务…

在这里插入图片描述

一般在实际开发中与 Feign 接口整合,编写降级逻辑:

在这里插入图片描述

4.2 服务熔断(预防)

服务熔断是通过监控对特定服务的调用响应时间和错误率等指标,当达到设定的阈值时,触发的机制,即停止对该服务的调用,并且在一段时间内拒绝对该服务的调用,从而避免故障的扩散。

这里主要说说 Hystrix 熔断机制,用于监控微服务调用情况:

  1. 默认是关闭的,如果需要开启需要在引导类上添加注解:@EnableCircuitBreaker
  2. 启动后,如果检测到 10 秒内请求的失败率超过 50%(这里可以理解为请求走“降级”逻辑的比率),就触发熔断机制;之后每隔5秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求;

在这里插入图片描述

5. 你们微服务是怎么进行监控的?

在这里插入图片描述

为什么需要监控?

  • 服务与服务之间的远程调用链太过于复杂,并且来自各个地方的不同的请求可能会通过网关、服务 A、…、服务 B、使用中间件/使用数据库…
  • 就可能出现以下几个问题:
    1. 问题定位
    2. 性能分析
    3. 服务关系
    4. 服务告警

常见的服务监控工具:

  • 或者说是分布式系统应用程序性能监控工具(APMApplication Performance Management)
  1. SpringBoot-admin
    • 简单,局限性大;
  2. prometheus + Grafana
    • 企业常用,很不错,搭建困难;
  3. zipkin(链路追踪工具)
    • 与业务代码耦合;
  4. skywalking(链路追踪工具)
    • 搭建容易,可以很好地解决刚才提到的问题;

5.1 skywalking

skywalking 是一个分布式系统的 APM 工具,提供了完善的链路追踪能力,是 apache 的顶级项目;

  • 如何搭建可以自己去网上搜,开源的,看看就会;

在这里插入图片描述

监控的对象:

  • 服务(service):业务资源应用系统(微服务);
  • 端点(endpoint):应用系统对外暴露的功能接口;
  • 实例(instance):服务所在的物理机;

5.2 微服务监控

  1. 对服务、端点、物理实例的访问时长与健康程度的监控并排名

在这里插入图片描述

  1. 链路追踪(服务到服务、服务内部的 MySQL 访问等等)

在这里插入图片描述

在这里插入图片描述

可见,也可以用一些APM工具来发现 SQL 慢查询和定位慢查询,例如 skywalking;

  • 还可以用调试工具:Arthas;运维工具:Prometheus;
  1. 服务关系

在这里插入图片描述

  1. 服务告警

在这里插入图片描述

当然,可以设置自己的告警规则,也可以设置发现问题发送短信/邮件给指定负责人的;

5.3 回答

采用的是 skywalking 进行监控:

  • skywalking 主要可以监控接口、服务、物理实例的一些状态。特别是在压测的时候可以看到众多服务中的哪些服务和接口比较慢,例如慢查询之类的,我们可以针对性的分析与优化;
  • 我们还在 skywalking 设置了告警规则,特别是在项目上线后,我们分别给微服务设置了给相关负责人,如果出错,可以给 TA 发送短信/邮件,第一时间知道项目的 bug 情况,并尽可能快的去修复;

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

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

相关文章

图片在div完全显示

效果图&#xff1a; html代码&#xff1a; <div class"container" style" display: flex;width: 550px;height: 180px;"><div class"box" style" color: red; background-color:blue; width: 50%;"></div><div …

30m二级分类土地利用数据Arcgis预处理及获取

本篇以武汉市为例&#xff0c;主要介绍将土地利用数据转换成武汉市内各区土地利用详情的过程以及分区统计每个区内各地类面积情况&#xff0c;后面还有制作过程中遇到的面积制表后数据过小的解决方法以及一些相关的知识点&#xff1a; 示例数据下载链接&#xff1a;数据下载链…

2024年阿里云服务器新用户购买一个月多少钱?

阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2G3M带宽服务器99元12个月&#xff0c;轻量应用服务器2核4G4M带宽165元12个月&#xff0c;4核16G服务…

UnicodeDecodeError: ‘gbk‘和Error: Command ‘pip install ‘pycocotools>=2.0

今天重新弄YOLOv5的时候发现不能用了&#xff0c;刚开始给我报这个错误 subprocess.CalledProcessError: Command ‘pip install ‘pycocotools&#xff1e;2.0‘‘ returned non-zero exit statu 说这个包安装不了 根据他的指令pip install ‘pycocotools&#xff1e;2.0这个根…

哥德巴赫猜想

七十年代末八十年代初&#xff0c;哥德巴赫猜想在中国风靡一时&#xff0c;来源于徐迟的一篇同名报告文学。我还是小孩子&#xff0c;记得大人们叽里咕噜疯传。 “哇&#xff0c;不得了。陈景润证明了1&#xff0b;2&#xff1d;3&#xff0c;离1&#xff0b;1&#xff1d;2就…

misc30

rar解压得到 发现只有中间的图片可以分析&#xff0c;另外两个都有密码 那就先分析星空&#xff0c;属性里面发现 使用该密码可以解压doc文本&#xff0c;发现doc隐写 使用此密码&#xff08;Hello friend!)解压图片,得到一个二维码 扫码得到flag flag{welcome_to_ctfshow}

【Web】浅聊Java反序列化之Rome——关于其他利用链

目录 前言 JdbcRowSetImpl利用链 BasicDataSource利用链 Hashtable利用链 BadAttributeValueExpException利用链 HotSwappableTargetSource利用链 前文&#xff1a;【Web】浅聊Java反序列化之Rome——EqualsBean&ObjectBean-CSDN博客 前言 Rome中ToStringBean的利用…

(001)UV 的使用以及导出

文章目录 UV窗口导出模型的主要事项导出时材质的兼容问题unity贴图导出导出FBX附录 UV窗口 1.uv主要的工作区域&#xff1a; 2.在做 uv 和贴图之前&#xff0c;最好先应用下物体的缩放、旋转。 导出模型的主要事项 1.将原点设置到物体模型的底部&#xff1a; 2.应用修改器的…

线程和进程

参考链接&#xff1a; 1.基本概念 进程&#xff1a;Windows系统中&#xff0c;一个运行的xx.exe就是一个进程。例如打开浏览器就是一个进程 线程&#xff1a;进程中的一个执行任务&#xff08;控制单元&#xff09;&#xff0c;负责当前进程中程序的执行。一个进程至少有一个…

Android14 Handle机制

Handle是进程内部, 线程之间的通信机制. handle主要接受子线程发送的数据, 并用此数据配合主线程更新UI handle可以分发Message对象和Runnable对象到主线程中, 每个handle实例, 都会绑定到创建他的线程中, 它有两个作用,: (1) 安排消息在某个主线程中某个地方执行 (2) 安排…

Python学习之基础语法

一、HelloWorld 二、Python基础语法 2.1 字面量 定义&#xff1a;在代码中&#xff0c;被写下来的固定的值&#xff0c;称之为字面量。 常用的6种值的类型 字符串 Python中&#xff0c;字符串需要用双引号包围&#xff1b; 被双引号包围的都是字符串 666 13.14 "黑马…

深度学习预备知识(线性代数)

介绍&#xff1a; 深度学习是一种机器学习的方法&#xff0c;涉及到大量的线性代数运算。线性代数是研究向量空间和线性映射的数学学科。在深度学习中&#xff0c;线性代数常用于表示和处理输入数据和模型参数。下面是一些深度学习中常见的线性代数概念和运算&#xff1a; 1. …

数据结构之单链表及其实现!

目录 ​编辑 1. 顺序表的问题及思考 2.链表的概念结构和分类 2.1 概念及结构 2.2 分类 3. 单链表的实现 3.1 新节点的创建 3.2 打印单链表 3.3 头插 3.4 头删 3.5 尾插 3.6 尾删 3.7 查找元素X 3.8 在pos位置修改 3.9 在任意位置之前插入 3.10 在任意位置删除…

【python量化】基于okex API开发的海龟策略

介绍 基于okex api开发的海龟策略&#xff0c;okex海龟策略python实现方式。该程序目前只支持单品种&#xff0c;比如设置ETH后&#xff0c;只对ETH进行做多做空。该程序运行需要两样东西&#xff1a;apikey 和 标的 运行该程序之前&#xff0c;用户需要到okex网站去申请apiK…

嘉绩咨询:八位一体产业创新,赋能品牌新零售

探索新零售领域不断创新高峰的嘉绩咨询在今天全面展现了其“八位一体”产业创新模式&#xff0c;该模式旨在为新零售品牌提供全方位的赋能服务。立足于广州的企业战略导航专家&#xff0c;吹响了帮助中国品牌实现全球化发展的号角。 嘉绩咨询的核心业务涵盖招商教育、招商落地、…

Java学习笔记之IDEA的安装与下载以及相关配置

1 IDEA概述 ​IDEA全称IntelliJ IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境&#xff1a; ​把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具。 2 IDEA…

使用TTL直接对esp32-cam进行烧录

首先你要有一个usb转TTL下载器和一个esp32-cam 然后我们要将IO0与GND短接 UOR->TXD UOT->RXD 3V3->3V3 GND->GND

[蜥蜴书Chapter2] -- 创建测试集

目录 一、规则 二、方法 1、seed 2、identifier 1&#xff09;选取一个身份号 2&#xff09;选取一定比例的身份号作为测试集 3&#xff09;身份号的选取&#xff1a; 3、利用scikit-learn&#xff1a; 1) 随机生成&#xff1a; 2&#xff09;注&#xff1a;分类 3&a…

Java共享问题 、synchronized 线程安全分析、Monitor、wait/notify

文章目录 1.共享带来的问题1.1 临界区 Critical Section1.2 竞态条件 Race Condition 2. synchronized语法及理解2.1 方法上的 synchronized 3.变量的线程安全分析3.1.成员变量和静态变量是否线程安全&#xff1f;3.2.局部变量是否线程安全&#xff1f;3.2.1 局部变量线程安全分…

Pycharm安装,环境初次配置与运行第一个简单程序

一、Pycharm安装 1.在PyCharm官网中&#xff0c;找到社区版下载链接&#xff0c;下载Pycharm社区版&#xff0c;社区版免费 2.下载成功后&#xff0c;双击下载好的安装包&#xff0c;点击下一步后&#xff0c;点击“浏览”更改安装路径到C盘以外其他硬盘&#xff0c;点击“下…