当前位置: 首页 > news >正文

Spring Cloud Alibaba核心组件Nacos/Seata/Sentinel

文章目录

  • Spring Cloud Alibaba介绍
    • Spring Cloud 微服务体系
    • Spring Cloud Alibaba 定位
  • 注册配置中心--Nacos
    • 服务治理架构
      • 注册中心原理
    • Nacos介绍
    • Nacos 的关键特性
      • 1.服务注册和发现
      • 2.动态配置服务
      • 3.实时健康监控
      • 4.动态DNS服务
      • 5.易于集成:
    • Nacos入门示例
      • 服务注册与发现
        • 1.环境准备
        • 2.服务注册与发现依赖
        • 3.配置application.yml 文件
        • 4.创建一个简单的控制器
        • 5.启动服务
        • 6.通过 Nacos 控制台查看服务
      • 服务消费
        • 1.配置 Feign 客户端
        • 2.使用 Feign 客户端:
        • 3.启动服务消费者
  • 分布式事务--Seata
    • 分布式事务中的问题
    • Seata介绍
    • Seata工作原理详解
      • Seata的三大核心组件
      • 工作流程
      • 事务模型
      • 两阶段提交
      • UNDO/REDO 日志
    • Seata 的优势
  • 限流降级--Sentinel
    • 服务调用链路上的问题
      • 雪崩效应
      • 服务保护方案
        • 1.限流
        • 2.降级
    • Sentinel 介绍
    • Sentinel基本概念
    • Sentinel 功能和设计理念
      • 1.流量控制
      • 2.熔断降级
        • 什么是熔断降级
        • 多种熔断策略

Spring Cloud Alibaba介绍

官方文档:https://sca.aliyun.com/docs/2023/overview/what-is-sca/

Spring Cloud Alibaba 是阿里开源的基于 Spring Cloud 的分布式微服务解决方案,它将阿里的中间件产品与 Spring Cloud 框架无缝集成,为开发者提供简单、便捷的一站式微服务开发解决方案。

依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。

Spring Cloud 微服务体系

Spring Cloud 是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建。 Spring Cloud 提供以微服务为核心的分布式系统构建标准。

在这里插入图片描述

Spring Cloud本身并不是一个开箱即用的框架,它是一套微服务规范,共有两代实现。1.Spring Cloud Netflix 是Spring Cloud的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。2.Spring Cloud Alibaba 是Spring Cloud的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。

Spring Cloud Alibaba 定位

在这里插入图片描述

注册配置中心–Nacos

服务治理架构

服务治理(Service Governance)是指在微服务架构中管理和控制服务的生命周期、状态、质量和安全性的一系列技术和策略。
在这里插入图片描述

注册中心原理

服务治理中的三个角色分别是什么?1.服务提供者:暴露服务接口,供其它服务调用;2.服务消费者:调用其它服务提供的接口;3.注册中心:记录并监控微服务各实例状态,推送服务变更信息。
消费者如何知道提供者的地址?·服务提供者会在启动时注册自己信息到注册中心,消费者可以从注册中心订阅和拉取服务信息。
消费者如何得知服务状态变更?·服务提供者通过心跳机制向注册中心报告自己的健康状态,当心跳异常时注册中心会将异常服务剔除,并通知订阅了该服务的消费者。
当提供者有多个实例时,消费者该选择哪一个?·消费者可以通过负载均衡算法,从多个实例中选择一个。

Nacos介绍

官方文档:https://nacos.io/docs/latest/what-is-nacos/

Nacos 是阿里巴巴推出的一款用于服务发现、配置管理和服务治理的开源平台。它在微服务架构中起着重要作用,尤其是用于服务的注册和发现、动态配置管理,以及支持 DNS 和 RPC 的服务健康检查等功能。

Nacos 的关键特性

1.服务注册和发现

服务发现和注册:1.Nacos支持基于DNS和HTTP的服务发现。服务提供者启动时,会将自己的服务信息注册到 Nacos,消费者则通过 Nacos 查找可用服务。2.通过实时心跳机制和健康检查,确保服务的可用性。

2.动态配置服务

动态配置管理1.Nacos 提供集中化的配置管理,支持动态更新。应用在运行时可以从 Nacos 中获取并实时更新配置,无需重启应用。2.支持多环境(如开发、测试、生产)的配置管理。

3.实时健康监控

Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。

若服务不可用,Nacos 会自动将其从可用列表中移除,确保系统稳定。

4.动态DNS服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

5.易于集成:

Nacos 很容易与 Spring Cloud、Dubbo 等微服务框架集成,提供更加便捷的开发体验。

Nacos入门示例

服务注册与发现

1.环境准备

1.1下载Nacos
https://github.com/alibaba/nacos/releases

1.2启动 Nacos
解压并在终端中运行以下命令启动 Nacos:

sh startup.sh -m standalone

1.3创建 Spring Boot 项目
可以使用 Spring Initializr 来生成项目。

选择 Spring Boot 版本 2.6.0 或以上,添加以下依赖:
Spring Web
Nacos Discovery

2.服务注册与发现依赖

在 pom.xml 中,添加 Nacos Discovery 依赖:

<dependencies><!-- Spring Boot Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos Discovery 依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.1</version></dependency>
</dependencies>
3.配置application.yml 文件

在 application.yml 文件中配置 Nacos:

spring:application:name: example-service  # 服务名称cloud:nacos:discovery:server-addr: 127.0.0.1:8848  # Nacos 服务器地址
4.创建一个简单的控制器
@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello from example-service!";}
}
5.启动服务

启动类

@SpringBootApplication
@EnableDiscoveryClient  // 启用 Nacos 服务发现
public class NacosExampleApplication {public static void main(String[] args) {SpringApplication.run(NacosExampleApplication.class, args);}
}

启动 Spring Boot 项目,服务将自动注册到 Nacos。

6.通过 Nacos 控制台查看服务

访问 Nacos 控制台 http://localhost:8848/nacos,点击 “服务列表”,可以看到注册的 example-service。

服务消费

创建服务消费者
可以创建一个新的 Spring Boot 项目作为服务消费者,添加相同的 Nacos Discovery 依赖和配置,并使用 RestTemplate 或 Feign 来调用服务。

1.配置 Feign 客户端

1.1添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

1.2创建Feign客户端接口

@FeignClient("example-service")
public interface ExampleServiceClient {@GetMapping("/hello")String hello();
}
2.使用 Feign 客户端:
@RestController
public class ConsumerController {@Autowiredprivate ExampleServiceClient exampleServiceClient;@GetMapping("/consume")public String consume() {return exampleServiceClient.hello();}
}
3.启动服务消费者

启动服务消费者后,它会通过 Nacos 发现并调用 example-service。访问 http://localhost:8080/consume,可以看到服务的返回结果。

分布式事务–Seata

分布式事务中的问题

对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题。分布式系统中对数据的操作要么一起成功,要么一起失败,必须是一个整体性的事务。

分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。

简单的说,在分布式系统中一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

举个例子:在电商网站中,用户对商品进行下单,需要在订单表中创建一条订单数据,同时需要在库存表中修改当前商品的剩余库存数量,两步操作一个添加,一个修改,一定要保证这两步操作一定同时操作成功或失败,否则业务就会出现问题。

任何事务机制在实现时,都应该考虑事务的 ACID 特性,包括:本地事务、分布式事务。对于分布式事务而言,即使不能都很好的满足,也要考虑支持到什么程度。

典型的分布式事务场景:跨库事务、分库分表、微服务化。

Seata介绍

官方文档:https://seata.apache.org/zh-cn/docs/overview/what-is-seata

Seata 是一款开源的分布式事务解决方案,旨在解决微服务架构下跨多个服务之间数据一致性的问题。它通过分布式事务协调多个服务的数据操作,确保跨多个服务的事务操作要么全部成功,要么全部失败。

Seata 的核心在于其简化的两阶段提交协议,避免了传统分布式事务中常见的性能瓶颈和复杂性。

Seata工作原理详解

Seata的核心思想是将分布式事务拆分成多个 局部事务,并通过一套全局事务协调器(TC,Transaction Coordinator)来统一管理和控制。Seata 的工作原理可以分为以下几个关键组件和工作流程。

Seata的三大核心组件

Seata 的三大核心组件1.Transaction Coordinator (TC):全局事务协调器,负责协调和管理全局事务的状态,确保所有分支事务按照要求提交或回滚。2.Transaction Manager (TM):事务管理器,负责开启、提交或回滚全局事务,控制整个事务的生命周期。3.Resource Manager (RM):资源管理器,负责管理每个分支事务中的资源(如数据库连接、锁等),并汇报分支事务的状态给TC。

在这里插入图片描述

工作流程

Seata的工作流程通常包含以下几个步骤,以下以Seata的AT模式(Automatic Transaction)为例:

AT模式流程1.全局事务开始:事务管理器(TM)通过 @GlobalTransactional 注解开启全局事务,TM会向事务协调器(TC)注册该事务并生成唯一的全局事务 ID(XID)。这个XID用来标识整个分布式事务。2.分支事务注册:每个服务的资源管理器(RM)会参与到全局事务中。当业务逻辑执行到每个微服务时,Seata的RM会拦截数据库操作,并将该操作作为一个分支事务向TC注册,分支事务与全局事务绑定在一起。分支事务在本地数据库执行时,只会在本地事务中提交,但不对外暴露,等待全局事务的控制。3.事务提交阶段:当全局事务执行完成时,TM会发出提交请求给TC,TC负责通知各个RM提交分支事务,RM将对应的本地事务进行最终提交,数据操作生效。4.事务回滚阶段:如果全局事务中任意一个分支事务失败,TC会通知所有RM回滚分支事务。在AT模式下,Seata自动生成UNDO日志,保存每个分支事务的操作前状态。当回滚发生时,Seata会根据UNDO日志恢复数据到事务操作前的状态,从而确保数据的一致性。

事务模型

Seata 支持四种事务模式,每种模式适应不同的业务场景和需求:

四种事务模式1.AT模式(Automatic Transaction):Seata的核心模式,自动管理分布式事务。通过生成UNDO日志来实现事务的自动回滚和提交。适合场景:业务系统对延迟敏感且读写操作频繁的场景。2.TCC模式(Try-Confirm-Cancel):提供灵活性较高的分布式事务解决方案,开发者需手动实现事务的Try、Confirm和Cancel阶段。Try阶段预留资源,Confirm阶段执行资源的真正操作,Cancel阶段释放资源。适合场景:需要高性能或需要自定义业务逻辑的事务场景。3.SAGA模式:将长事务拆解为一系列可补偿的子事务,通过反向补偿(回滚业务动作)来实现全局事务的回滚。适合长时间运行的事务,如金融系统中的扣款和退款业务。4.XA模式:基于两阶段提交协议,XA模式实现强一致性事务,通常用于对数据一致性要求极高的场景。适合场景:需要数据库级别的分布式事务控制。

两阶段提交

两阶段提交(Two-Phase Commit Protocol)
Seata 的AT模式实现了一种简化版的两阶段提交协议,分为准备阶段提交阶段

Seata的AT模式实现了一种简化版的两阶段提交协议,分为"准备阶段""提交阶段"1.准备阶段(Prepare Phase):在全局事务中,各个分支事务执行本地事务,并生成UNDO日志。此时本地事务已经执行,但并未对外提交(对其他事务不可见),等待全局事务的提交或回滚指令。2.提交阶段(Commit Phase):当全局事务需要提交时,TC会通知各个分支事务提交操作,删除对应的UNDO日志,数据正式生效。如果需要回滚,TC会通知各个分支事务进行回滚操作,RM通过UNDO日志将数据恢复到事务开始前的状态。

UNDO/REDO 日志

在AT模式下,Seata 依赖 UNDO日志 进行事务的回滚。每个分支事务在执行本地事务操作时,Seata 会自动生成一份UNDO日志,记录该操作前的状态。当TC要求回滚时,RM 会通过UNDO日志恢复到操作前的数据状态,从而保证数据的一致性。

UNDO 日志记录了数据库表的元数据和修改前的数据快照,存储在数据库中,通过这份日志,Seata 能够轻松还原分支事务的操作。

Seata 的优势

Seata的优势1.简化的分布式事务管理:Seata的AT模式通过自动生成和管理UNDO日志,减少了分布式事务的复杂度。2.高性能:在AT模式下,事务提交是本地提交,Seata通过异步方式管理全局事务,大大提升了性能。3.支持多种事务模式:除了AT模式,Seata还支持TCC、SAGA、XA等多种模式,适应不同业务需求。4.强大的扩展性和容错性:Seata采用微内核架构,支持水平扩展,并通过数据库的UNDO/REDO日志保证数据一致性,提供较强的容错能力。

限流降级–Sentinel

服务调用链路上的问题

雪崩效应

在微服务系统中,一个对外的业务功能可能会涉及很长的服务调用链路。当其中某个服务出现异常,如果没有服务调用保护机制,可能会造成该服务调用链路上大量相关服务直接或间接调用的服务器仍然持续不断发起请求,最终导致相关的所有服务资源耗尽产生异常,发生雪崩效应。限流和降级分别作为在流量控制和服务保护方面的两个重要手段,可以有效地应对此类问题。

服务保护方案

1.限流

限流是一种针对服务提供者的策略,用于控制对特定服务接口或服务实例的访问量。其目的在于保护服务提供者免受过大请求流量的影响,确保服务稳定性。限流措施可以在服务提供者或服务消费者两端实现,通过设定流量阈值并采取排队、拒绝请求或返回错误信息等方式来控制流量,从而保护服务。

2.降级

降级是针对服务消费者的应对策略,在服务出现异常或限流时,通过对服务调用进行降级处理,确保消费者端能够在异常情况下正常工作。降级的目的在于转变为弱依赖状态,使系统能够在服务不可用时提供基本的功能或数据。这种策略可以在服务消费者端实施,通过返回默认值、提供备用数据或简化功能等方式来保证系统的可用性。

总体而言,限流和降级作为微服务架构中的重要机制,尽管在实现上可能有多种方式,但它们都着眼于保护服务提供者和消费者,在面对异常情况时确保系统稳定运行。限流关注于保护服务提供者,控制请求流量;而降级则关注于服务消费者,确保在服务不可用或异常情况下提供基本的功能。

Sentinel 介绍

官方文档:https://sentinelguard.io/zh-cn/docs/introduction.html

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel基本概念

Sentinel基本概念1.资源资源是Sentinel的关键概念。它可以是Java应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。只要通过Sentinel API定义的代码,就是资源,能够被Sentinel保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。2.规则围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

Sentinel 功能和设计理念

1.流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:
在这里插入图片描述
请求限流:限制访问微服务的请求的并发量,避免服务因流量激增出现故障。
在这里插入图片描述

2.熔断降级

什么是熔断降级

熔断机制是为了防止某些资源的异常或超负荷状态影响整个系统。Sentinel 的熔断功能类似于 Netflix 的 Hystrix,在检测到某个服务出现异常或延迟过高时,会短暂地将该服务熔断,拒绝新的请求进入,从而防止系统崩溃。

多种熔断策略
Sentinel提供了多种熔断策略:1.基于响应时间的熔断:如果某个资源的平均响应时间超过设定的阈值,则会触发熔断。2.基于异常比例的熔断:如果某个资源在一定时间窗口内的异常请求比例超过设定的阈值,也会触发熔断。3.基于异常数的熔断:如果某个资源在一段时间内发生的异常请求数超过设定的值,Sentinel 会进行熔断。

相关文章:

Spring Cloud Alibaba核心组件Nacos/Seata/Sentinel

文章目录 Spring Cloud Alibaba介绍Spring Cloud 微服务体系Spring Cloud Alibaba 定位 注册配置中心--Nacos服务治理架构注册中心原理 Nacos介绍Nacos 的关键特性1.服务注册和发现2.动态配置服务3.实时健康监控4.动态DNS服务5.易于集成&#xff1a; Nacos入门示例服务注册与发…...

Ubuntu搭建FTP服务器

1. 首先&#xff0c;我们需要安装和配置xinetd&#xff0c;安装的具体命令如下&#xff1a; sudo apt-get install xinetd 2. 新建tftp工作目录&#xff0c;并添加读、写、执行权限&#xff08;没有权限后面无法正常访问该文件夹&#xff09;&#xff0c;如下图所示。 3. 安装…...

Redis在单线程下删除大Key会发生什么?怎么删除大Key?

大Key的定义 大Key是指在缓存系统&#xff08;如Redis&#xff09;或分布式存储中&#xff0c;单个键&#xff08;Key&#xff09;对应的数据量非常大&#xff0c;通常存储的是大块数据结构&#xff0c;例如包含大量数据的哈希表、列表、集合或有序集合。这种大Key往往会对系统…...

《Exploit temporal cues in multi-camera 3D object detection》论文泛读

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4666749915775385601eId2491528568128599808 针对单帧数据含有的信息太少的问题&#xff0c;提出了一种新的方法&#xff0c;BEVDet4D&#xff0c;这种方法可以访问时间线索&#xff0c;并且取得了较好的表现&#xff…...

十四、centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

&#x1f33b;&#x1f33b;目录&#x1f33b;&#x1f33b; 一、 centos7 yum报错&#xff1a;cannot find a valid baseurl for repo:base/7/x86_64二、分析错误三、解决方案3.1 检查网络连接3.2 检查DNS设置3.3 检查YUM仓库配置3.3.1 使用官方CentOS镜像配置3.3.2 使用阿里云…...

qt使用对数坐标的例子,qchart用QLogValueAxis坐标不出图解决

硬件&#xff1a;ThinkPad T15 系统&#xff1a;win10 专业版 qt版本&#xff1a;Qt 5.14.1 &#xff0c; QtCreator 4.11.1 软件界面放了一个QPushButton&#xff0c;一个QVBoxLayout&#xff0c;如下&#xff1a; 主要代码如下&#xff0c;我添加了两条曲线&#xff0c;…...

Python 爬虫入门 - 爬虫 requests 请求

在当今互联网时代,数据的获取变得尤为重要,而网络爬虫作为自动化获取数据的一种方式,受到了越来越多编程爱好者和数据分析人员的青睐。Python 语言以其简洁的语法和丰富的库,成为了实现网络爬虫的首选工具。其中,requests库是一个非常流行且强大的工具,用于发送 HTTP 请求…...

flink中startNewChain() 的详解

在 Apache Flink 中&#xff0c;startNewChain() 是一个与算子链&#xff08;operator chaining&#xff09;相关的方法。与 disableChaining() 类似&#xff0c;它允许开发者控制算子链的创建方式&#xff0c;但 startNewChain() 的作用是从当前算子开始创建一个新的算子链&am…...

uniapp 苹果安全域适配

一、使用原生占位&#xff08;仅App端支持&#xff09; //在manifest.json 文件中 app-plus 中配置 "safearea": { "background": "#FFFFFF", "bottom": { "offset": "auto" } } 二、不使用原生占位 //&…...

linux使用命令行编译qt.cpp

步骤&#xff1a; mkdir qttestcd qttestvim hello.cpp #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc,char* argv[]) {QApplication a(argc,argv);QLabel label("aaa");label.resize(100,100);label.show()…...

Ubuntu 22.04 LTS 上安装 Docker

单台机器安装docker环境&#xff0c;是为了后面安装open-webui&#xff0c;环境安装比较简单&#xff0c;没有难点&#xff0c;但一定要按步骤走&#xff0c;否则还是会遇到一些问题的。 第 1 步&#xff1a;更新软件包并安装必要软件 运行以下命令&#xff0c;更新软件包索引…...

2024秋季云曦开学考

web ezezssrf 打开环境&#xff0c;代码审计 看起来有点多&#xff0c;要绕过五层 第一层&#xff1a;存在弱比较&#xff0c;使用数组或0e绕过 yunxi[]1&wlgf[]2 yunxis878926199a&wlgfs155964671a 第二层&#xff1a;存在强比较&#xff0c;此处使用string限制…...

基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程

一、项目概述 目标和用途 本项目旨在开发一款基于 STM32 控制的自动平衡机器人&#xff0c;结合步进电机和陀螺仪传感器&#xff0c;实现对平衡机器人的精确控制。该机器人可以用于教育、科研、娱乐等多个领域&#xff0c;帮助用户了解自动控制、机器人运动学等相关知识。 技…...

C#使用ZipFile的方法CreateFromDirectory

由于现在数据越来越大,虽然磁盘的大小也在增加,但是数据增加的速度是远超过磁盘的增加速度。 因为数据是一种思想的表现,特别是ChatGPT的AI出现,导致很多数据无限地使用机器化地产生,所以数据压缩还是很常有的事情,毕竟压缩之后可以减少磁盘空间的占用。 在C#里有一个专…...

Redis 哨兵模式的选举算法是什么?

Redis 哨兵模式中的选举算法主要用于在主节点出现故障时,从多个 Sentinel 节点中选出一个领导者(Leader)来执行故障转移操作。 Redis 哨兵的选举算法基于 Raft 算法的简化版本,但不完全等同于标准的 Raft 算法。以下是其主要过程: 一、发现主节点故障 当一个 Sentinel …...

Linux shell编程学习笔记80:gzip命令——让文件瘦身

0 引言 在 Linux shell编程学习笔记76&#xff1a;tar命令——快照 & 备份&#xff08;上&#xff09;-CSDN博客 Linux shell编程学习笔记77&#xff1a;tar命令——快照 & 备份&#xff08;下&#xff09;_linux 系统快照-CSDN博客 Linux shell编程学习笔记78&am…...

【字幕】恋上数据结构与算法之01为什么要学习数据结构与算法

视频地址&#xff1a;请查看01为什么要学习数据结构与算法_哔哩哔哩_bilibili 同志们好&#xff0c;我是小码哥的mj李明杰。非常欢迎大家来学习链上数据结构与算法&#xff0c;从今天开始呢就由我来带大家一起来学习和掌握这个数据结构与算法啊。在正式学习之前我们先来看一下…...

120页ppt丨集团公司战略规划内容、方法、步骤及战略规划案例研究

响应会员需求&#xff0c;晓零分享一份经典资料《120页ppt集团公司战略规划内容、方法、步骤及战略规划案例研究》&#xff0c;欢迎进入星球下载学习。 以下是对企业战略规划三个阶段八个步骤的详细解析&#xff1a; 一、阶段一&#xff1a;内外分析 项目启动和前期准备&…...

滚雪球学SpringCloud[2.3]:服务发现与负载均衡详解

全文目录&#xff1a; 前言1. Ribbon的使用与配置1.1 Ribbon 概述Ribbon 的核心功能&#xff1a; 1.2 Ribbon 的基本使用1.2.1 引入 Ribbon 依赖1.2.2 配置 RestTemplate 与 Ribbon1.2.3 示例&#xff1a;通过 Ribbon 调用服务 1.3 Ribbon 的配置选项 2. Ribbon的负载均衡策略2…...

商务英语口语之聚会宴饮常用口语柯桥培训到蓝天广场

吃饭一定要掌握的英语口语 邀请他人共进餐&#xff1a; Would you like to join me for dinner? 你愿意和我一起吃饭吗&#xff1f; Lets grab a bite to eat together. 我们一起去吃点东西吧。 How about having lunch with me? 和我一起吃午饭怎么样&#xff1f; 询问…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...