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

Java大师成长计划之第22天:Spring Cloud微服务架构

📢 友情提示:

本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。

随着企业应用的不断扩展,传统的单体架构已经难以满足现代化开发的需求。为了应对高并发、高可用性以及易于扩展的需求,微服务架构应运而生。微服务架构通过将应用拆分为多个独立的服务,每个服务都可以独立开发、部署、扩展,并通过轻量级的通信方式进行协作,提升了系统的灵活性和可维护性。

在微服务架构中,Spring Cloud是一个非常流行的框架,它提供了开发和部署微服务应用所需的一整套工具和服务。本篇博文将详细介绍微服务架构的基本概念,以及如何利用Spring Cloud搭建微服务架构。

一、什么是微服务架构?

1.1 微服务架构的基本概念

微服务架构(Microservices Architecture)是一种将传统单体应用拆分成一组小型、独立服务的架构风格。每个服务围绕特定的业务功能进行设计,独立部署、独立运行,并且通过轻量级的通信机制(通常是HTTP或消息队列)与其他服务进行交互。微服务架构的核心思想是将单一的庞大应用拆分成多个小型的、独立的服务,这些服务可以通过API进行通信,互相协作。

在微服务架构中,每个服务通常都是独立的应用,拥有自己的数据存储和业务逻辑。这些服务可以使用不同的编程语言、不同的技术栈来实现,并且每个服务都可以单独部署和扩展。微服务架构有助于提升系统的灵活性、可扩展性和维护性。

微服务架构与单体架构的区别
  • 单体架构:在传统的单体架构中,整个应用程序通常构建成一个大而复杂的单一代码库。不同的模块和功能紧密耦合在一起,整个应用作为一个单独的单元进行部署和运行。随着业务增长和应用复杂度的增加,单体应用可能变得难以维护、扩展和部署。

  • 微服务架构:在微服务架构中,应用被拆分为多个小的服务,每个服务都拥有独立的代码库和数据库,彼此之间通过轻量级的协议进行通信。每个微服务通常围绕着一个特定的业务功能或领域来设计,因此它们通常能实现较为独立的开发、测试、部署和扩展。

1.2 微服务架构的特点

微服务架构与传统单体架构相比,具有以下显著特点:

1.2.1 服务独立性

每个微服务都是独立运行的单元,可以独立开发、部署、测试和升级。它们通常有自己独立的数据库和业务逻辑,因此不同的服务之间不会相互影响,改变一个服务的实现并不会影响其他服务的运行。这种独立性使得开发、测试和维护变得更加灵活。

1.2.2 业务驱动

微服务架构的设计是围绕着业务功能或业务领域来进行的。每个微服务通常对应着一个具体的业务领域,如用户管理、订单处理、支付处理等。每个微服务都能够专注于自己的业务逻辑,使得整个系统在业务处理上更加清晰和模块化。

1.2.3 去中心化的数据管理

在单体架构中,通常使用一个集中式的数据库来管理所有的数据,而微服务架构则采用去中心化的数据管理模式。每个微服务都有自己独立的数据库或数据存储方式,避免了单一数据库的性能瓶颈和数据一致性问题。每个服务可以根据自身的需求选择合适的存储技术(如关系型数据库、NoSQL等)。

1.2.4 技术异构性

微服务架构允许不同的服务使用不同的技术栈。例如,某些微服务可能使用Java语言和Spring Boot框架,而其他微服务可能使用Node.js、Go、Python等语言。微服务之间的通信通常使用HTTP、RESTful API、消息队列等协议,这使得服务之间的技术栈不再是系统的约束。

1.2.5 弹性和容错性

微服务架构使得每个服务都可以独立扩展,且由于服务间松散耦合,某个服务的失败不会影响到整个系统。为了增强系统的容错性,微服务架构通常会配合熔断器、重试机制等技术,确保服务即使在部分失败的情况下也能继续稳定运行。

1.2.6 自动化部署和持续集成

微服务架构通常与容器化技术(如Docker)和持续集成/持续部署(CI/CD)工具结合使用,使得开发、测试和部署的过程能够自动化。每个微服务都可以单独构建、测试和部署,提升了部署效率和发布的频率。

1.3 微服务架构的优缺点

优点
  1. 灵活性与可扩展性:每个微服务都可以独立扩展,随着流量和业务需求的增加,开发者可以只扩展高负载的服务,而不必扩展整个应用。
  2. 技术多样性:由于每个服务都可以使用不同的编程语言和技术栈,开发团队可以选择最适合的技术来实现特定的服务。
  3. 高可用性:微服务架构通过服务的拆分,能够避免单点故障的问题。即使某个服务出现故障,其他服务依然可以正常运行。
  4. 快速迭代:由于微服务能够独立部署和升级,开发团队可以更频繁地发布新版本,快速响应业务需求的变化。
缺点
  1. 复杂的分布式系统管理:微服务架构涉及到多个独立的服务,它们之间的通信、数据一致性等问题需要特别的设计和处理。分布式系统的管理和维护变得复杂。
  2. 跨服务通信成本:微服务之间通过网络进行通信,网络延迟和数据传输带来的性能开销不可忽视。尤其是频繁的跨服务调用可能影响整体性能。
  3. 数据一致性问题:由于微服务通常采用去中心化的数据库,每个服务的数据一致性问题变得更加复杂。需要采用分布式事务、事件驱动等技术来解决。
  4. 开发和运维复杂度增加:多个微服务的开发、部署、监控等都需要更加细致的管理。随着微服务数量的增加,系统的运维和监控难度也会增加。

1.4 微服务架构的组成

微服务架构通常包含以下几个主要组成部分:

1.4.1 服务注册与发现

在微服务架构中,各个服务是动态变化的。服务注册与发现机制使得服务能够在启动时自动注册到服务注册中心(如Eureka),并且其他服务能够动态地发现它们的位置,进行相互通信。

1.4.2 负载均衡

由于微服务的实例可以有多个,客户端调用某个服务时需要实现负载均衡。常见的负载均衡策略包括轮询、随机选择、权重等方式。Spring Cloud提供了Ribbon等负载均衡工具,能够在客户端实现负载均衡。

1.4.3 API网关

API网关是微服务架构中的一个重要组件,它充当了所有外部请求的入口。API网关负责请求路由、负载均衡、安全验证、流量控制等功能,简化了客户端与微服务之间的交互。Spring Cloud Gateway是一个流行的API网关解决方案。

1.4.4 配置管理

在微服务架构中,配置管理非常重要,因为每个服务都有自己独立的配置文件。Spring Cloud Config提供了集中化的配置管理,能够统一管理所有微服务的配置信息,并支持动态更新。

1.4.5 服务容错与熔断

微服务架构中的服务之间通常依赖于其他服务。如果某个服务出现故障,可能会导致其他服务的连锁反应。为了提高系统的容错能力,微服务架构常用熔断器模式(如Hystrix)来避免服务的故障扩散。

1.5 小结

微服务架构通过将单一的应用拆分成多个小型、独立的服务,能够提供更高的灵活性、可扩展性和可维护性。尽管微服务架构在技术上带来了许多挑战,如分布式事务、跨服务通信等问题,但它也为大规模系统提供了一种更加灵活和高效的解决方案。通过合理的架构设计和技术选型,微服务架构能够帮助企业更好地应对复杂业务需求和高并发的挑战。

二、Spring Cloud概述

Spring Cloud是Spring团队为了解决微服务架构中的各种复杂性而推出的一整套解决方案。它提供了一系列的工具和框架,旨在简化分布式系统的开发、部署和管理。通过Spring Cloud,开发者可以轻松地实现服务注册与发现、负载均衡、分布式配置管理、服务容错、API网关等功能,从而加速微服务的构建和交付。

2.1 Spring Cloud的核心组件

Spring Cloud涵盖多个子项目,每个子项目都关注于解决微服务架构中的不同方面。以下是Spring Cloud的一些核心组件及其功能:

2.1.1 Spring Cloud Eureka:服务注册与发现

Eureka是Spring Cloud Netflix提供的服务注册与发现组件。在微服务架构中,服务实例可能动态地变化,服务的注册与发现机制就显得尤为重要。Eureka Server充当服务注册中心,允许各个微服务在启动时向其注册,并在需要时查询其他服务的位置信息。

  • 服务注册:当微服务启动时,它会将自己注册到Eureka Server,包括服务名、URL、端口等信息。
  • 服务发现:其他微服务可以通过Eureka Server查询已注册的服务实例,以便进行调用。
  • 健康检查:Eureka Server定期检查服务实例的健康状态,确保只有健康的服务可用。
2.1.2 Spring Cloud Ribbon:客户端负载均衡

Ribbon是Spring Cloud Netflix提供的客户端负载均衡工具,可以在客户端实现对服务的自动负载均衡。微服务架构中,客户端通常需要调用多个服务实例,而Ribbon能够根据配置的负载均衡策略自动选择合适的服务实例进行请求。

  • 负载均衡策略:Ribbon支持多种负载均衡策略,包括轮询、随机、加权等,通过配置文件或注解可以轻松切换策略。
  • 与Eureka集成:当与Eureka结合使用时,Ribbon可以自动从Eureka获取可用的服务实例列表。
2.1.3 Spring Cloud Feign:声明式HTTP客户端

Feign是一个声明式的HTTP客户端,它使得编写HTTP请求变得更加简单。通过使用Feign,开发者可以定义一个接口,并使用注解指定请求的URL和请求方法,Feign会自动实现这个接口并发起HTTP请求。

  • 简化HTTP调用:Feign使得微服务之间的HTTP调用变得更加简洁,开发者无需编写底层的HTTP客户端代码。
  • 与Eureka集成:Feign可以与Eureka结合使用,通过服务名直接调用其他服务,而无需知道服务的具体地址。
@FeignClient(name = "service-provider")
public interface ServiceProviderClient {@GetMapping("/hello")String sayHello();
}

2.1.4 Spring Cloud Hystrix:熔断器

Hystrix是Spring Cloud Netflix提供的熔断器组件,用于处理微服务之间的失败,避免故障蔓延。Hystrix通过监控服务的健康状态,能够在服务调用失败时及时切断调用,提供降级服务,并防止系统崩溃。

  • 断路器模式:当一个服务的响应时间超过预设阈值或者失败率超过一定比例时,Hystrix会短路这个服务,从而避免继续调用,从而保护其他服务的正常运行。
  • 降级处理:Hystrix允许配置降级服务,当调用失败时,可以返回一个默认值或调用备用服务,提升系统的可用性。
@HystrixCommand(fallbackMethod = "fallback")
public String sayHello() {return restTemplate.getForObject("http://service-provider/hello", String.class);
}public String fallback() {return "服务暂时不可用,请稍后再试";
}

2.1.5 Spring Cloud Config:集中化配置管理

Spring Cloud Config提供了集中管理微服务配置的能力。微服务通常有多个配置文件,分散在不同的服务中,使用Spring Cloud Config可以将所有服务的配置集中管理,并支持动态更新。

  • 配置服务器:Spring Cloud Config Server负责提供配置文件,可以从本地文件系统、Git、SVN等多种源中读取配置。
  • 客户端集成:微服务可以通过Spring Cloud Config Client从配置服务器获取配置,实现动态更新,避免重启服务。
spring:cloud:config:uri: http://localhost:8888

2.1.6 Spring Cloud Gateway:API网关

Spring Cloud Gateway是一个用于构建API网关的框架,它提供了路由、负载均衡、安全、监控等功能。API网关充当微服务架构的入口点,负责处理所有外部请求。

  • 路由:Spring Cloud Gateway能够根据请求的URI、请求方法等信息,将请求路由到对应的微服务。
  • 过滤器:可以使用过滤器对请求和响应进行处理,如请求验证、日志记录、限流等。
  • 与Spring WebFlux集成:基于非阻塞的Spring WebFlux,Spring Cloud Gateway能够支持高并发的请求处理。
2.1.7 Spring Cloud Bus:消息总线

Spring Cloud Bus是一个轻量级的消息总线,用于在微服务之间传递消息和事件。它能够实现服务间的广播、配置更新等功能,简化了微服务之间的通信。

  • 事件传播:Spring Cloud Bus允许将事件传播到所有注册的微服务,触发相应的操作。
  • 集成消息中间件:支持RabbitMQ、Kafka等消息中间件,能够实现跨服务的消息传递。

2.2 Spring Cloud的使用场景

Spring Cloud适用于多种场景,尤其是在需要构建大规模、复杂业务系统时,Spring Cloud能够发挥其优势。以下是一些常见的使用场景:

  1. 微服务架构:当应用需要拆分成多个独立的服务时,Spring Cloud提供了完整的解决方案,帮助开发者实现服务注册、负载均衡和熔断等功能。

  2. 分布式系统:在分布式环境中,服务之间需要进行远程调用和数据共享,Spring Cloud能够提供服务发现和远程调用的支持。

  3. 动态配置管理:在需要频繁更新配置的场景中,Spring Cloud Config能够帮助开发者实现集中化的配置管理。

  4. API网关:当需要统一管理外部API的入口时,Spring Cloud Gateway可以提供路由、负载均衡和安全等功能。

2.3 小结

Spring Cloud是构建微服务架构的重要工具,它为开发者提供了一系列的组件,简化了分布式系统的开发和管理。通过使用Spring Cloud,开发者能够轻松实现服务注册与发现、负载均衡、熔断器、API网关等功能,提升系统的可用性和灵活性。在构建现代化的微服务应用时,Spring Cloud无疑是一个强大的助手,能够帮助团队快速响应业务需求的变化,提升开发和运维的效率。

三、Spring Cloud微服务架构示例

本章节将通过一个实际项目示例,带你一步一步构建一个基于 Spring Cloud 的微服务系统。该系统由多个服务组成,演示了服务注册与发现、服务通信、负载均衡、熔断降级、集中配置等核心功能的实现方式。

我们将以一个简单的“用户-订单”业务为背景,构建如下结构:

  • Eureka Server:服务注册中心
  • User Service:用户服务,提供用户信息
  • Order Service:订单服务,调用用户服务获取下单用户信息
  • Gateway:API 网关,统一对外接口入口
  • Config Server(可选):集中配置管理服务

3.1 技术选型与环境准备

  • JDK 11+
  • Spring Boot 2.7.x
  • Spring Cloud 2021.x
  • Maven 3.x
  • IDE:IntelliJ IDEA 或 VSCode
  • 工具:Postman、curl、或浏览器测试接口

3.2 项目结构说明

springcloud-demo/
├── eureka-server/        # 注册中心
├── user-service/         # 用户服务
├── order-service/        # 订单服务
├── api-gateway/          # 网关
└── config-server/        # 配置中心(可选)


3.3 创建服务注册中心(Eureka Server)

添加依赖(pom.xml
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

主类添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

配置文件 application.yml
server:port: 8761spring:application:name: eureka-servereureka:client:register-with-eureka: falsefetch-registry: false

访问:http://localhost:8761 可看到 Eureka 控制台。


3.4 创建用户服务(User Service)

添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

启动类
@SpringBootApplication
@EnableEurekaClient
@RestController
public class UserServiceApplication {@GetMapping("/user/{id}")public User getUser(@PathVariable Long id) {return new User(id, "用户" + id);}public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}

配置文件
server:port: 8081spring:application:name: user-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eureka


3.5 创建订单服务(Order Service)

订单服务通过 RestTemplate + RibbonFeign 远程调用用户服务。

添加依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
</dependencies>

定义 Feign 客户端接口
@FeignClient("user-service")
public interface UserClient {@GetMapping("/user/{id}")User getUserById(@PathVariable("id") Long id);
}

Controller 示例
@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredprivate UserClient userClient;@GetMapping("/{userId}")public Order createOrder(@PathVariable Long userId) {User user = userClient.getUserById(userId);return new Order(UUID.randomUUID().toString(), user, "商品A");}
}

配置文件
server:port: 8082spring:application:name: order-serviceeureka:client:service-url:defaultZone: http://localhost:8761/eurekafeign:client:config:default:connectTimeout: 2000readTimeout: 5000


3.6 创建API网关(Spring Cloud Gateway)

网关作为统一入口负责请求转发和权限验证。

添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

配置文件示例
server:port: 8888spring:application:name: api-gatewaycloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user/**- id: order-serviceuri: lb://order-servicepredicates:- Path=/order/**eureka:client:service-url:defaultZone: http://localhost:8761/eureka


3.7 (可选)配置中心(Spring Cloud Config)

为多个服务集中管理配置。

启动 Config Server
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId>
</dependency>
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
配置文件
server:port: 8889spring:application:name: config-servercloud:config:server:git:uri: https://your-config-repo.git

各微服务通过以下配置从 Config Server 获取配置:

 
spring:cloud:config:uri: http://localhost:8889


3.8 启动顺序与测试流程

  1. 启动 eureka-server
  2. 启动 user-service
  3. 启动 order-service
  4. 启动 api-gateway
接口调用示例
  • 访问:http://localhost:8888/order/1
  • 网关会将请求转发至 order-service → order-service 调用 user-service → 返回完整订单数据。

3.9 小结

本章通过一个完整示例,展示了如何使用Spring Cloud构建微服务架构。从服务注册中心到服务通信,从网关统一入口到配置中心集中管理,每一部分都展示了Spring Cloud在微服务场景中的关键角色。通过这个结构清晰、职责分明的系统架构,我们可以轻松应对服务拆分、部署、扩展等挑战。

四、总结

在本篇博文中,我们详细介绍了微服务架构的基本概念和Spring Cloud组件。通过微服务架构,开发者能够将应用拆分成独立的服务,提升系统的灵活性、可扩展性和可维护性。Spring Cloud为开发者提供了全面的解决方案,包括服务发现、负载均衡、熔断器、配置管理等,让开发微服务变得更加简便。

随着微服务架构的不断发展,Spring Cloud也在不断演进,新的功能和工具将进一步简化微服务的开发和部署。希望通过本篇博文,能够帮助你深入理解Spring Cloud及其核心组件,提升在微服务领域的技术水平。

相关文章:

Java大师成长计划之第22天:Spring Cloud微服务架构

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 随着企业应用的不断扩展&#xff0c…...

瀑布模型VS敏捷模型VS喷泉模型

​目录 ​​1. 瀑布模型(Waterfall Model)​​ ​​2. 敏捷模型(Agile Model)​​ ​​3. 喷泉模型(Fountain Model)​​...

基于.Net开发的网络管理与监控工具

从零学习构建一个完整的系统 平常项目上线后&#xff0c;不仅意味着开发的完成&#xff0c;更意味着项目正式进入日常运维阶段。在这个阶段&#xff0c;网络的监控与管理也是至关重要的&#xff0c;这时候就需要一款网络管理工具&#xff0c;可以协助运维人员用于日常管理&…...

Python并发编程:开启性能优化的大门(7/10)

1.引言 在当今数字化时代&#xff0c;Python 已成为编程领域中一颗璀璨的明星&#xff0c;占据着编程语言排行榜的榜首。无论是数据科学、人工智能&#xff0c;还是 Web 开发、自动化脚本编写&#xff0c;Python 都以其简洁的语法、丰富的库和强大的功能&#xff0c;赢得了广大…...

Linux 中 open 函数的本质与细节全解析

一、open简介 在 Linux 下&#xff0c;一切皆文件。而对文件的读写&#xff0c;离不开文件的“打开”操作。虽然 C 语言标准库提供了方便的 fopen&#xff0c;但更底层、更强大的是系统调用 open&#xff0c;掌握它能让你对文件系统控制更细致&#xff0c;在系统编程、驱动开发…...

llama.cpp无法使用gpu的问题

使用cuda编译llama.cpp后&#xff0c;仍然无法使用gpu。 ./llama-server -m ../../../../../model/hf_models/qwen/qwen3-4b-q8_0.gguf -ngl 40 报错如下 ggml_cuda_init: failed to initialize CUDA: forward compatibility was attempted on non supported HW warning: n…...

Python Unicode字符串和普通字符串转换

Unicode 是一种字符编码标准&#xff0c;旨在为世界上所有书写系统的每个字符提供一个唯一的数字标识&#xff08;称为码点&#xff09;。 码点&#xff1a; 每个 Unicode 字符被分配一个唯一的数字&#xff0c;称为码点表示形式&#xff1a;u 后跟 4-6 位十六进制数&#xf…...

Ansible Roles 是一种用于层次化和结构化组织 Ansible Playbook 的机制。

Ansible Roles 是一种用于层次化和结构化组织 Ansible Playbook 的机制。它通过将变量、文件、任务、模板和处理器等放置在单独的目录中,简化了 Playbook 的管理和复用。Roles 自 Ansible 1.2 版本引入,极大地提高了代码的可维护性和可重用性。 目录结构 一个标准的 Ansibl…...

易学探索助手-个人记录(十)

在现代 Web 应用中&#xff0c;用户体验的重要性不断上升。近期我完成了两个功能模块 —— 语音播报功能 与 用户信息修改表单&#xff0c;分别增强了界面交互与用户自管理能力。 一、语音播报功能&#xff08;SpeechSynthesis&#xff09; 功能特点 支持播放、暂停、继续、停…...

Linux基础 -- SSH 流式烧录与压缩传输笔记

Linux SSH 流式烧录与压缩传输指南 一、背景介绍 在嵌入式开发和维护中&#xff0c;常常需要通过 SSH 从 PC 向设备端传输大文件&#xff08;如系统镜像、固件&#xff09;并将其直接烧录到指定磁盘&#xff08;如 /dev/mmcblk2&#xff09;。然而&#xff0c;设备端存储空间…...

学习51单片机01(安装开发环境)

新学期新相貌.......哈哈哈&#xff0c;我终于把贪吃蛇结束了&#xff0c;现在我们来学stc51单片机&#xff01; 要求&#xff1a;c语言的程度至少要到函数&#xff0c;指针尽量&#xff01;如果c语言不好的&#xff0c;可以回去看看我的c语言笔记。 1.开发环境的安装&#x…...

事件驱动reactor的原理与实现

fdset 集合&#xff1a;&#xff08;就是说&#xff09; fd_set是一个位图&#xff08;bitmap&#xff09;结构 每个位代表一个文件描述符 0表示不在集合中&#xff0c;1表示在集合中 fd_set结构&#xff08;简化&#xff09;&#xff1a; [0][1][2][3][4][5]...[1023] …...

大模型训练简介

在人工智能蓬勃发展的当下&#xff0c;大语言模型&#xff08;LLM&#xff09;成为了众多应用的核心驱动力。从智能聊天机器人到复杂的内容生成系统&#xff0c;LLM 的卓越表现令人瞩目。而这背后&#xff0c;大模型的训练过程充满了奥秘。本文将深入探讨 LLM 训练的各个方面&a…...

深度解析 MySQL 与 Spring Boot 长耗时进程:从故障现象到根治方案(含 Tomcat 重启必要性分析)

一、典型故障现象与用户痛点 在高并发业务场景中&#xff0c;企业级 Spring Boot 应用常遇到以下连锁故障&#xff1a; 用户侧&#xff1a;网页访问超时、提交表单无响应&#xff0c;报错 “服务不可用”。运维侧&#xff1a;监控平台报警 “数据库连接池耗尽”&#xff0c;To…...

More Effective C++:改善编程与设计(上)

More Effective C&#xff1a; 目录 More Effective C&#xff1a; 条款1&#xff1a;仔细区别pointers和 references 条款2:最好使用C转型操作符 条款3:绝对不要以多态方式处理数组 条款4:非必要不要提供default constructor 条款5:对定制的“类型转换函数”保持警觉 …...

TNNLS-2020《Autoencoder Constrained Clustering With Adaptive Neighbors》

核心思想分析 该论文提出了一种名为ACC_AN&#xff08;Autoencoder Constrained Clustering with Adaptive Neighbors&#xff09;的深度聚类方法&#xff0c;旨在解决传统子空间聚类方法在处理非线性数据分布和高维数据时的局限性。核心思想是将深度自编码器&#xff08;Auto…...

SpringAI

机器学习&#xff1a; 定义&#xff1a;人工智能的子领域&#xff0c;通过数据驱动的方法让计算机学习规律&#xff0c;进行预测或决策。 核心方法&#xff1a; 监督学习&#xff08;如线性回归、SVM&#xff09;。 无监督学习&#xff08;如聚类、降维&#xff09;。 强化学…...

lua 作为嵌入式设备的配置语言

从lua的脚本中获取数据 lua中栈的索引 3 | -1 2 | -2 1 | -3 可以在lua的解释器中加入自己自定的一些功能,其实没啥必要,就是为了可以练习下lua...

ERP系统源码,小型工厂ERP系统源码,CRM+OA+进销存+财务

ERP系统源码&#xff0c;小型工厂ERP系统源码&#xff0c;ERP计划管理系统源码&#xff0c;CRMOA进销存财务 对于ERP来说&#xff0c;最为主要的作用就是能够强调企业的计划性&#xff0c;通过以业务订单以及客户的相关需求来作为企业计划的基础&#xff0c;并且还能够对企业现…...

基于EFISH-SCB-RK3576/SAIL-RK3576的矿用本安型手持终端技术方案‌

&#xff08;国产化替代J1900的矿山智能化解决方案&#xff09; 一、硬件架构设计‌ ‌本安型结构设计‌ ‌防爆防护体系‌&#xff1a; 采用铸镁合金外壳复合防爆玻璃&#xff08;抗冲击能量>20J&#xff09;&#xff0c;通过GB 3836.1-2021 Ex ib I Mb认证 全密闭IP68接口…...

配置文件介绍xml、json

#灵感# 常用xml&#xff0c; 但有点模棱两可&#xff0c;记录下AI助理给我总结的。 .xml XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。它与 HTML 类似&#xff0c;但有以下主要特点和用途&#xf…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-D. 扩展插件列表(PostGIS/PostgREST等)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 附录D. PostgreSQL扩展插件速查表一、插件分类速查表二、核心插件详解三、安装与配置指南四、应用场景模板五、版本兼容性说明六、维护与优化建议七、官方资源与工具八、附录…...

Qt笔记---》.pro中配置

文章目录 1、概要1.1、修改qt项目的中间文件输出路径和部署路径1.2、Qt 项目模块配置1.3、外部库文件引用配置 1、概要 1.1、修改qt项目的中间文件输出路径和部署路径 &#xff08;1&#xff09;、为解决 “ 输出文件 ” 和 “ 中间输出文件 ”全部在同一个文件夹下的问题&am…...

【Liblib】基于LiblibAI自定义模型,总结一下Python开发步骤

一、前言 Liblib AI&#xff08;哩布哩布 AI&#xff09;是一个集成了先进人工智能技术和用户友好设计的 AI 图像创作绘画平台和模型分享社区。 强大的图像生成能力 &#xff1a;以 Stable Diffusion 技术为核心&#xff0c;提供文生图、图生图、图像后期处理等功能&#xff…...

CCF第七届AIOps国际挑战赛季军分享(RAG)

分享CCF 第七届AIOps国际挑战赛的季军方案&#xff0c;从我们的比赛经历来看&#xff0c;并不会&#xff0c;相反&#xff0c;私域领域问答的优秀效果说明RAG真的很重要 历经4个月的时间&#xff0c;从初赛赛道第1&#xff0c;复赛赛道第2&#xff0c;到最后决赛获得季军&…...

【Cesium入门教程】第七课:Primitive图元

Cesium丰富的空间数据可视化API分为两部分&#xff1a;primitive API面向三维图形开发者&#xff0c;更底层一些。 Entity API是数据驱动更高级一些。 // entity // 调用方便&#xff0c;封装完美 // 是基于primitive的封装// primitive // 更接近底层 // 可以绘制高级图形 /…...

【5分钟学Docker】Docker快速使用

目录 1. 概述 2. 基本操作 2.1. 镜像操作 2.2. 容器操作 2.3. 运行操作 2.4. 镜像保存 2.5. 镜像分享 3. 高级操作 4. 挂载 4.1. 目录挂载 4.2. 卷映射 1. 概述 Docker 镜像有镜像名称和TAG 2. 基本操作 2.1. 镜像操作 查看镜像 docker images docker image ls …...

opencv 一些简单的设置

输出当前程序启动的路径 可能会出现 &#x1f527; 设置 C17 标准&#xff08;解决 std::filesystem 报错&#xff09; 在 VS 中&#xff0c;右键项目 → 属性。 选择左边的 “C/C” → “语言” 找到 C语言标准&#xff08;C Language Standard&#xff09;选项。 设置为&…...

快速地解决Spring循环依赖问题

循环依赖的大体结构如下&#xff1a; AServiceImpl Slf4j Service AllArgsConstructor public class AServiceImpl extends ServiceImpl<AMapper, A> implements AService {private final BService bService; }BServiceImpl Slf4j Service AllArgsConstructor public …...

反向操作:如何用AI检测工具优化自己的论文“人味”?

大家好&#xff0c;这里是论文写手的一线自救指南&#x1f624; 在AIGC横行的今天&#xff0c;谁还没偷偷用过AI写几段论文内容&#xff1f;但问题来了&#xff1a;学校越来越会“识AI”了&#xff01; 有的学校甚至不看重复率&#xff0c;只盯AIGC率报告&#xff0c;一句“AI…...