微服务相关问题(2)

1、Spring Cloud相关常用组件

注册中心(nacos、Eureka等)、负载均衡(Ribbon、LoadBalancer)、远程调用(feign)、服务熔断(Sentinel、Hystrix)、网关(Gateway)

2、nacos与Eureka的区别

相同:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

区别:

  • nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式。
  • 临时实例心跳异常会被剔除,非临时实例不会。
  • nacos支持服务列表变更的消息推送,服务列表更新及时。
  • nacos集群默认采用AP模式(高可用模式),当集群中存在非临时实例时,采用CP模式(强一致模式),Eureka采用AP方式。
  • nacos还支持配置中心,Eureka只有注册中心。

3、服务雪崩

服务雪崩:一个服务失败,导致整条链路的服务都失败的情形

解决方式:

  • 服务降级(针对某个接口):服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受到请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑。
  • 服务熔断(针对整个服务):默认关闭,需要手动打开,如果检测到10秒内请求的失败率超过一定比率(如50%),就会触发熔断机制,之后每隔5秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果服务可达,则关闭熔断机制,恢复正常请求

4、微服务的监控——skywalking

skywalking:一个分布式系统的应用程序性能监控工具,提供了完善的链路追踪能力。

skywalking主要可以监控接口、服务、物理实例的一些状态。特别是在压测的时候可以看到众多服务的中哪些服务和接口比较慢,我们可以针对性的分析和优化。

skywalking还可以设置告警规则,特别是在项目上线后,如果报错,我们分别设置了可以给相关负责人发短信和发邮件,第一时间知道bug,第一时间修复。

5、微服务限流

限流实现方式:tomacat:可以设置最大连接数(一般在单体项目中使用),nginx:漏桶算法,网关:令牌桶算法,自定义拦截器。

nginx限流:

基于客户端IP:

语法:limit_req_zone key zone rate

key:定义限流对象,binary _remote_addr就是一种key,基于客户端ip限流方式。

zone:定义共享存储区来存储访问信息,10m可以存储16wip地址访问信息。

rate:最大访问速率,rate=10r/s,表示每秒最多请求10个请求。

burst=20,相当于桶的大小。nodelay:快速处理。

基于控制并发数:

语法一样,还是上面这个:limit_req_zone key zone rate。

对应的key变为: $binary_remote_addr,表示限制单个IP同时最多能持有多少个连接。

网关限流:

yml配置文件中,微服务路由设置添加局部过滤器RequestRateLimiter。默认是使用redis的连接去存储令牌。

6、分布式事务

CAP定理:CAP是一致性(consistency)、可用性(availability)、分区容错性(partition tolerance)的首字母缩写

分布式系统节点之间肯定是需要网络连接的,分区(P)是必然存在的。

如果保证访问的高可用性,可以持续对外提供服务,但是不能保证数据的强一致性,那这种就是AP。如果保证访问数据的强一致性(C),那么就要放弃高可用性,这种就是CP。

BASE理论是对CAP的一种解决思路,包含三个思想。

Basically Available(基本可用):分布式系统出现故障时,允许损失部分可用性,即保证核心可用。

Soft State (软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。

Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

7、分布式事务解决方案

常用解决方案:seata框架(XA、AT、TCC)、MQ。

seata框架:

该框架中用三个重要角色:

TC(事务协调者):维护全局和分支事务状态,协调全局事务提交或回滚。

TM(事务管理器):定义全局事务的范围,开始全局事务、提交或回滚全局事务。

RM(资源管理器):管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

这里的XA模式就是上面提到的CP模式(数据强一致性)。

AT模式就是上面提到的AP模式(高可用性),底层使用undo log实现。

TCC模式也是AP模式,使用try、confirm、cancel进行事务操作。

MQ:

这种一般时保证高可用,对数据强一致没有效果。

8、分布式服务的接口幂等性的设计

幂等:多次调用方法或接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。

解决方案:数据库唯一索引(新增操作时)、token+redis(新增、修改都可以解决)、分布式锁(也可以解决新增、修改时的幂等性问题)

9、分布式任务调度

这里主要介绍xxl-job。

xxl-job:解决集群任务重复执行的问题、cron表达式定义灵活、定时任务失败了,重试和统计、任务量大、分片执行。

xxl-job的路由策略:大概有十种:轮询、随机、第一个(固定找第一个实例执行)、最后一个(固定找最后一个实例执行)、一致性hash(按照hash算法固定选择某一个实例,且所有任务均匀散列在不同实例上)、最不经常使用、最近最久未使用、故障转移(当去执行的实例出现故障,则选择新的健康的实例去执行)、忙碌转移、分片广播。

xxl-job任务执行失败怎么解决:

故障转移+失败重试,查看日志分析——>邮件警告

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

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

相关文章

安全初级2

一、作业要求 1、xss-labs 1~8关 2、python实现自动化sql布尔育注代码优化(二分查找) 二、xss-labs 1~8关 1、准备 打开小皮面板,启动MySQL和apacher 下载 xss-labs,并解压后放到 phpstudy_pro 的 WWW 目录下,重命名为 xss-labs 访问链…

基础算法题

基础算法题 链表 1.1反转链表 描述: 描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤�≤…

Android 15 源码修改:为第三方应用提供截屏接口

概述 在 Android 系统开发中,有时需要为第三方应用提供系统级的截屏功能。本文将详细介绍如何通过修改 Android 15 源码中的 PhoneWindowManager 类,实现一个自定义广播接口来触发系统截屏功能。 修改方案 核心思路 通过在系统服务 PhoneWindowManager 中注册自定义广播监…

20250717 Ubuntu 挂载远程 Windows 服务器上的硬盘

由 DeepSeek 生成,方法已经验证可行。 通过网络挂载Windows共享硬盘(SMB/CIFS) 确保网络共享已启用: 在Windows电脑上,右键点击目标硬盘或文件夹 → 属性 → 共享 → 启用共享并设置权限(至少赋予读取权限&…

深度学习图像增强方法(二)

三、直方图均衡化 1. 普通直方图均衡化 直方图均衡化的原理是将图像的灰度直方图展平,使得每个灰度级都有更多的像素分布,从而增强图像的对比度。具体步骤如下: 计算灰度直方图:统计图像中每个灰度级的像素数量。 计算累积分布函数(CDF):计算每个灰度级的累积概率。 映…

QT——信号与槽/自定义信号与槽

1 信号与槽基本介绍 提出疑问,界面上已经有按键了,怎么操作才能让用户按下按键后有操作上的反应呢? 在 Qt 中,信号和槽机制是一种非常强大的事件通信机制。这是一个重要的概念,特别是对于初学者来说,理解它…

Spring原理揭秘--Spring的AOP

在这之前我们已经介绍了AOP的基本功能和概念,那么当AOP集成到spring则会发生改变。Spring AOP 中的Joinpoint:之前提高了很多Joinpoint的类型,但是在spring中则只会有方法级别的Joinpoint,像构造方法,字段的调用都没适…

C++学习笔记五

C继承//基类 class Animal{};//派生类 class Dog : public Animal{};#include<iostearm> using namespace std;//基类 class Shape{public:void setwidth(int w){width w;}void setheight(int h){height h;}protected:int width;int height;}//派生类 class Rectangle …

AndroidStudio环境搭建

一、AndroidStudio下载 正常百度出来的站会自动翻译成中文&#xff0c;导致历史版本的界面总是显示不出可下载的地方&#xff0c;点击成切回英文&#xff0c;就能看出了。 历史版本&#xff1a;https://developer.android.google.cn/studio/archive

Java大厂面试实录:从Spring Boot到AI大模型的深度技术拷问

场景&#xff1a;互联网大厂Java后端面试 面试官&#xff08;严肃&#xff09;&#xff1a;小曾&#xff0c;请坐。今天主要考察Java后端技术栈&#xff0c;包括微服务、大数据、AI等。我们先从简单问题开始。 小曾&#xff08;搓手&#xff09;&#xff1a;好嘞&#xff01;面…

深入解析Hadoop中的HDFS架构设计

HDFS概述与核心设计原则作为Hadoop生态系统的基石&#xff0c;HDFS&#xff08;Hadoop Distributed File System&#xff09;是一种专为大规模数据处理而设计的分布式文件系统。它的核心设计理念源于对互联网时代数据特征的深刻洞察——数据规模呈指数级增长&#xff0c;而硬件…

ota之.加密算法,mcu加密方式

一、ota之.加密算法&#xff0c;mcu加密方式 前面一篇文章&#xff0c;讲了soc的加密方式&#xff0c;但是soc资源充足&#xff0c;mcu没有&#xff0c;所以不会用openss生成公私钥 切计算哈希用rsa256位。 ECC&#xff08;椭圆曲线加密&#xff09; 是一种非对称加密算法&…

LangChain面试内容整理-知识点23:实战案例:检索增强生成(RAG)系统

检索增强生成(Retrieval-Augmented Generation, RAG)是一种将LLM与外部知识库结合的方法,通过实时检索相关信息来辅助生成答案。这极大缓解了LLM“封闭知识”过期或不足的问题。LangChain非常适合构建RAG系统,因为它提供了文档加载、向量存储、检索接口、LLM组合的一站式方…

探索阿里云ESA:开启边缘安全加速新时代

阿里云 ESA 是什么&#xff1f;阿里云 ESA&#xff0c;全称边缘安全加速&#xff08;Edge Security Acceleration&#xff09; &#xff0c;其前身为全站加速 DCDN&#xff08;Dynamic Content Delivery Network&#xff09;。在 2024 年 9 月 30 日&#xff0c;阿里云完成了这…

醋酸铈:赋能科技创新的稀土之力

一、什么是醋酸铈醋酸铈是铈元素与醋酸根离子形成的化合物。铈作为稀土元素中的重要一员&#xff0c;广泛应用于材料科学、催化剂、电子产品等领域。醋酸铈以无色结晶或浅黄色结晶的形式存在&#xff0c;是铈的有机盐之一。它不仅具有稳定的化学性质&#xff0c;而且在某些特定…

数据结构之普利姆算法

前言&#xff1a;Prim算法是图论中的算法&#xff0c;用来生成图的最小生成树。本篇文章介绍算法的流程&#xff0c;实现思想&#xff0c;和具体代码实现&#xff0c;使用c语言。学习需要输出才能理解的更透彻&#xff0c;所以说坚持写文章&#xff0c;希望可以用自己的方式把一…

构建强大的物联网架构所需了解的一切

数据正驱动着当今的商业发展&#xff0c;而物联网&#xff08;IoT&#xff09;则有助于为企业的增长和创新开辟新的机遇。麦肯锡的研究表明&#xff0c;全球数据在四年内实现了惊人的 7 倍增长。随着越来越多的物联网设备进入市场&#xff0c;更多企业开始需要强大的物联网架构…

java之json转excel生成

背景 业务为实现自定义样式excel的导出&#xff0c;常规的做法就是根据数据在代码中进行类似模版的配置&#xff1b;这样的体验不是很好&#xff0c;只要用户改变下样式的设置不用代码改动就能实现自定义excel的导出更加灵活。 以下是具体实现 pom依赖 <dependency><g…

新版本Cursor中配置自定义MCP服务器教程,附MCP工具开发实战源码

在 Cursor 中配置自定义 MCP 服务器&#xff1a;打造你的 AI 开发工具链 引言 随着 AI 编程助手的普及&#xff0c;开发者们越来越希望能够定制化自己的开发环境。Cursor 作为一款强大的 AI 编程编辑器&#xff0c;提供了 Model Context Protocol (MCP) 支持&#xff0c;新版本…

前端面试十二之vue3基础

一、ref和reactive在 Vue 3 中&#xff0c;ref 和 reactive 是两种主要的响应式数据创建方式&#xff0c;它们各有特点和适用场景。1.refref 主要用于创建单个值的响应式引用&#xff0c;通常用于基本类型数据&#xff0c;如数字、字符串等。使用 ref 创建的引用对象可以通过 .…