【SpringCloud】微服务重点解析

news2024/10/2 16:18:44

微服务重点解析

在这里插入图片描述

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.coloradmin.cn/o/1505223.html

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

相关文章

跨平台大小端判断与主机节序转网络字节序使用

1.macOS : 默认使用小端 ,高位使用高地址,转换为网络字节序成大端 #include <iostream> #include <arpa/inet.h> int main() {//大小端判断union{short s;char c[sizeof(short)];}un;un.s = 0x0102;printf("低地址:%d,高地址:%d\n",un.c[0],un.c[1]);if …

腾讯云8核16G服务器支持多少人同时访问?性能和价格测评

腾讯云8核16G轻量服务器CPU性能如何&#xff1f;18M带宽支持多少人在线&#xff1f;轻量应用服务器具有100%CPU性能&#xff0c;18M带宽下载速度2304KB/秒&#xff0c;折合2.25M/s&#xff0c;系统盘为270GB SSD盘&#xff0c;月流量3500GB&#xff0c;折合每天116.6GB流量&…

STM32---ADC

ADC 概念 众所周知&#xff0c;GPIO只能读入高电平或者低电平&#xff0c;那如果现有一个模拟量&#xff0c;该如何读取呢&#xff0c;比如电压的范围是0~3.3v&#xff0c;如何获取电压的值。就需要ADC&#xff08;Analog-Digital Converter&#xff09;了。ADC可以将引脚上连…

童装WP模板

童装WP模板 https://www.wpniu.com/moban/6359.html

学习和认知的四个阶段,以及学习方法分享

本文分享学习的四个不同的阶段&#xff0c;以及分享个人的一些学习方法。 一、学习认知的四个阶段 我们在学习的过程中&#xff0c;总会经历这几个阶段&#xff1a; 第一阶段&#xff1a;不知道自己不知道&#xff1b; 第二阶段&#xff1a;知道自己不知道&#xff1b; 第三…

在 Python 中加速卫星时间合成的生成️

基于 fastnanquantile 库计算基于分位数的时间复合的更快方法 简要背景 为了从卫星图像创建时间合成图像,我们通常只获取云量低于特定阈值(例如 40%)的图像,遮盖云和云阴影,并随时间聚合图像。例如,如果我们一年中有 50 张图像(在云层覆盖限制内以及云/阴影遮罩之后),…

【经管数据-更新】华证ESG评级得分数据(2009-2023年)

一、数据说明 参考《经济研究》中方先明&#xff08;2023&#xff09;的做法&#xff0c;将华证ESG评级进行赋值&#xff0c;指标包含C、CC、CCC、B、BB、BBB、A、AA、AAA共9个等级&#xff0c;将上市公司ESG 等级从低到高分别赋值为1至9 二、数据来源&#xff1a;世界银行&am…

Linux多线程之线程控制

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、pthread_crate 二、pthread_join 三、p…

diffusion model(十三):DiT技术小结

infopaperhttps://arxiv.org/abs/2212.09748githubhttps://github.com/facebookresearch/DiT/tree/main个人博客主页http://myhz0606.com/article/ditcreate date2024-03-08 阅读前需要具备以下前置知识&#xff1a; DDPM(扩散模型基本原理)&#xff1a;知乎地址 个人博客地址…

英伟达jetson nano第一次进入镜像配置

我所用产品为jetbot Ubuntu18.04LTS CtrlAltT启动终端 设置分辨率 xrandr –output HDMI-0 –mode “1920x1080” 最好在设置中重新配置下 不然重启又得调 联网-更新语言包 reboot重启

【Tauri】(5):本地运行candle和 qwen 大模型,并测试速度

1&#xff0c;本地运行candle 关于candle项目 https://github.com/huggingface/candle Hugging Face 使用rust开发的高性能推理框架。 语法简单&#xff0c; 风格与 PyTorch 相似。 CPU 和 Cuda Backend&#xff1a;m1、f16、bf16。 支持 Serverless&#xff08;CPU&#xff…

【二分】第十二届蓝桥杯省赛第一场C++ B组/C组《杨辉三角形》(c++)

【题目描述】 下面的图形是著名的杨辉三角形&#xff1a; 如果我们按从上到下、从左到右的顺序把所有数排成一列&#xff0c;可以得到如下数列&#xff1a; 1&#xff0c;1&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;1&#xff0c;1&#xff0c;3&#xff0c;3&…

Orange3数据预处理(转换器组件)

该组件接收数据&#xff0c;然后重新应用之前在模板数据上执行的转换。 这些转换包括选择变量的子集以及从数据中出现的其他变量计算新的变量&#xff0c; 例如&#xff0c;离散化、特征构建、主成分分析&#xff08;PCA&#xff09;等。 在Orange3中&#xff0c;描述的这个组件…

python爬虫(4)

#前期先说明一下为啥爬虫需要学习数组的存储和处理&#xff0c;只是说在你后期接触到最简单的爬虫后有一个地方可以存放你的数据# 下面为大家带来一个我在做excel表整理时的代码以及上次代码的结果 上次代码的结果&#xff1a; 新的代码&#xff1a; import numpy as np im…

使用python翻转图片

原图 代码 from PIL import Imagedef flip_image(image_path):# 打开图片with Image.open(image_path) as img:# 获取图片的模式&#xff08;RGB/RGBA/其他&#xff09;mode img.mode# 创建一个新图片&#xff0c;模式与原图一样&#xff0c;大小为原图的翻转大小flipped_img…

【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;ServerSocket API&#x1f338;Socket API &#x1f340;TCP中的长短连接&#x1f333;建立TCP回显客户端与服务器&#x1f338;TCP搭建服务器&#x1f338;TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API &#x1f384;…

诚意满满之讲透事务

诚意满满系列每一篇都是精挑细选&#xff0c;从大众知识点到原理再到具体实现&#xff0c;争取把一个知识点从头到尾完整讲下来&#xff0c;足以应付面试与工作。让读者读完之后能够有一种&#xff1a;“这个知识我看这一篇就够了”的感觉是本系列最大愿望。 对于本人而言&…

Unity UGUI之InputField(TMP)基本了解

Unity的InputField组件是用于在Unity中创建可供用户输入文本的输入框的UI组件。通过InputField组件&#xff0c;可以让用户在运行时输入文本&#xff0c;比如用户名、密码、搜索关键字等。其中TMP版本的InputField是基于TextMeshPro的InputField组件&#xff0c;提供了更多的文…

数字建筑欢乐颂,智慧工地共筑美好未来!

在解决农民工人欠薪这一长期困扰建筑业的难题上&#xff0c;某建筑公司响应政策&#xff0c;严格按照实名制管理&#xff0c;实施过程中发现并克服了传统管理模式的痛点&#xff1a;聊天群组的信息时&#xff0c;往往会被淹没在“收到”回复中&#xff0c;影响沟通效率&#xf…

win10阿里云实现内网穿透#frp

win10&阿里云实现内网穿透#frp 文章目录 win10&阿里云实现内网穿透#frp一、什么是内网穿透&#xff1f;下载frp 二、云服务端部署frps三、本地部署frpc 一、什么是内网穿透&#xff1f; 内网穿透是一种网络技术&#xff0c;它允许外部网络用户通过互联网访问局域网&am…