深入对比分析SpringCloud和Dubbo两大微服务框架的核心架构与特性。

1 微服务架构演进与核心概念

1.1 微服务架构的本质

微服务架构是一种将单一应用程序划分为一组小型服务的方法,每个服务运行在自己的进程中,服务之间通过轻量级的通信机制进行协作。这些服务围绕业务能力构建,并能够独立部署到生产环境中。

微服务架构的核心价值在于:

  • 解耦:服务间耦合度低,独立开发、部署和扩展

  • 技术多样性:不同服务可以使用不同的技术栈

  • 容错性:单个服务故障不会导致整个系统崩溃

  • 可扩展性:可以针对特定服务进行扩展

1.2 微服务架构的关键挑战

实施微服务架构需要解决以下挑战:

  • 服务发现:服务如何相互发现和通信

  • 配置管理:如何集中管理所有服务的配置

  • 服务网关:如何对外提供统一的API入口

  • 容错处理:如何处理服务调用失败和降级

  • 监控追踪:如何监控服务健康状况和追踪请求链路

2 Spring Cloud 全面解析

2.1 Spring Cloud 整体架构

Spring Cloud是一个基于Spring Boot的微服务架构开发工具集,它提供了一系列组件来简化分布式系统的开发。Spring Cloud遵循"约定优于配置"的原则,提供了快速构建分布式系统中常见模式的工具。

graph TB
Client[客户端/浏览器] --> API_Gateway[API网关: Spring Cloud Gateway]

subgraph Spring Cloud 生态系统
API_Gateway --> Service_Discovery[服务发现: Eureka]

subgraph 微服务集群
Service_A[服务A] --> Config_Server[配置中心: Config Server]
Service_B[服务B] --> Config_Server
Service_C[服务C] --> Config_Server
end

Service_Discovery --> Service_A
Service_Discovery --> Service_B
Service_Discovery --> Service_C

Service_A --> Circuit_Breaker[熔断器: Hystrix]
Service_B --> Circuit_Breaker
Service_C --> Circuit_Breaker

Circuit_Breaker --> Distributed_Tracing[分布式追踪: Sleuth+Zipkin]
end

Distributed_Tracing --> Monitoring[监控: Admin]
Monitoring --> DB[(配置存储: Git/数据库)]

2.2 Spring Cloud 核心组件详解

2.2.1 服务注册与发现 - Eureka

Eureka是Netflix开源的服务发现组件,Spring Cloud将其集成到自己的生态中。Eureka采用CS架构,包含Eureka Server(服务端)和Eureka Client(客户端)。

Eureka Server配置示例:

java

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}# application.yml
server:port: 8761eureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

Eureka Client配置示例:

java

@SpringBootApplication
@EnableEurekaClient
@RestController
public class UserServiceApplication {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return userRepository.findById(id);}public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}# application.yml
spring:application:name: user-serviceserver:port: 8081eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
2.2.2 API网关 - Spring Cloud Gateway

Spring Cloud Gateway是基于WebFlux的反应式API网关,提供路由、过滤器和负载均衡等功能。

网关配置示例:

java

@SpringBootApplication
public class ApiGatewayApplication {public static void main(String[] args) {SpringApplication.run(ApiGatewayApplication.class, args);}
}# application.yml
spring:cloud:gateway:routes:- id: user_service_routeuri: lb://user-servicepredicates:- Path=/api/users/**filters:- StripPrefix=1- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20- id: order_service_routeuri: lb://order-servicepredicates:- Path=/api/orders/**filters:- StripPrefix=1
2.2.3 配置中心 - Spring Cloud Config

Spring Cloud Config为分布式系统提供外部化配置支持,配置存储在Git、SVN或文件系统中。

Config Server配置示例:

java

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}# application.yml
spring:cloud:config:server:git:uri: https://github.com/your-repo/config-reposearch-paths: '{application}'profiles:active: gitserver:port: 8888

客户端使用配置:

java

@SpringBootApplication
@RefreshScope
public class UserServiceApplication {// 应用会自动从Config Server获取配置
}# bootstrap.yml
spring:application:name: user-servicecloud:config:uri: http://localhost:8888profile: devlabel: master
2.2.4 服务容错 - Spring Cloud Circuit Breaker

Spring Cloud Circuit Breaker提供了服务熔断、降级和限流功能。

使用示例:

java

@Service
public class UserService {private final RestTemplate restTemplate;private final CircuitBreakerFactory circuitBreakerFactory;public UserService(RestTemplate restTemplate, CircuitBreakerFactory circuitBreakerFactory) {this.restTemplate = restTemplate;this.circuitBreakerFactory = circuitBreakerFactory;}@CircuitBreaker(name = "orderService", fallbackMethod = "getUserOrdersFallback")public List<Order> getUserOrders(Long userId) {return restTemplate.getForObject("http://order-service/orders?userId=" + userId, List.class);}public List<Order> getUserOrdersFallback(Long userId, Throwable t) {// 返回降级数据或缓存数据return Collections.emptyList();}
}

2.3 Spring Cloud 调用流程

sequenceDiagram
participant C as Client
participant G as API Gateway
participant D as Discovery Server(Eureka)
participant S as Service Provider
participant CF as Config Server

C->>G: 请求 /api/users/1
G->>D: 获取user-service实例列表
D-->>G: 返回实例列表
G->>S: 转发请求(负载均衡)
S->>CF: 获取配置(首次启动)
CF-->>S: 返回配置信息
S->>S: 处理业务逻辑
S-->>G: 返回响应
G-->>C: 返回最终结果

Note right of S: 服务可能调用其他服务<br/>形成调用链

3 Dubbo 全面解析

3.1 Dubbo 整体架构

Dubbo是阿里巴巴开源的高性能Java RPC框架,现为Apache顶级项目。Dubbo采用更加紧凑的架构设计,专注于服务的高性能调用。

graph TB
Consumer[服务消费者] --> Registry[注册中心: Zookeeper/Nacos]
Registry --> Provider[服务提供者]

Consumer --> Monitor[监控中心]
Provider --> Monitor

subgraph Dubbo核心层
Provider --> Container[服务容器]
Container --> Exchange[信息交换层]
Exchange --> Transport[网络传输层]
Transport --> Serialize[序列化层]
end

Serialize --> Protocol[协议: Dubbo协议]

3.2 Dubbo 核心组件详解

3.2.1 Dubbo 服务定义与接口设计

Dubbo强调面向接口的编程,服务提供者和消费者通过共享接口进行通信。

服务接口定义:

java

public interface UserService {User getUserById(Long id);List<User> getUsersByIds(List<Long> ids);ApiResponse<User> createUser(User user);
}// 数据传输对象
public class User implements Serializable {private Long id;private String name;private String email;// getters and setters
}
3.2.2 服务提供者配置

提供者实现:

java

@Service // Dubbo的Service注解,非Spring的
public class UserServiceImpl implements UserService {@Overridepublic User getUserById(Long id) {// 业务逻辑实现return userRepository.findById(id);}@Overridepublic List<User> getUsersByIds(List<Long> ids) {return userRepository.findByIds(ids);}
}

提供者配置:

xml

<!-- dubbo-provider.xml -->
<dubbo:application name="user-service-provider" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:protocol name="dubbo" port="20880" /><!-- 服务暴露 -->
<dubbo:service interface="com.example.UserService" ref="userService" /><!-- Spring Bean配置 -->
<bean id="userService" class="com.example.UserServiceImpl" />

Spring Boot配置方式:

yaml

# application.yml
dubbo:application:name: user-service-providerprotocol:name: dubboport: 20880registry:address: zookeeper://127.0.0.1:2181scan:base-packages: com.example.service
3.2.3 服务消费者配置

消费者调用:

java

@RestController
public class UserController {@Reference // Dubbo引用注解private UserService userService;@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {return userService.getUserById(id);}
}

消费者配置:

xml

<!-- dubbo-consumer.xml -->
<dubbo:application name="web-consumer" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" /><!-- 服务引用 -->
<dubbo:reference id="userService" interface="com.example.UserService" />

Spring Boot配置方式:

yaml

# application.yml
dubbo:application:name: web-consumerregistry:address: zookeeper://127.0.0.1:2181consumer:check: falsetimeout: 3000
3.2.4 Dubbo高级特性

负载均衡策略:

java

@Reference(loadbalance = "consistenthash")
private UserService userService;

集群容错模式:

java

@Reference(cluster = "failover")
private UserService userService;

服务降级:

xml

<dubbo:reference id="userService" interface="com.example.UserService"><dubbo:method name="getUserById" mock="return null" />
</dubbo:reference>

3.3 Dubbo 调用流程

sequenceDiagram
participant C as Consumer
participant R as Registry
participant P as Provider
participant M as Monitor

Note over C, P: 服务初始化阶段
P->>R: 注册服务
C->>R: 订阅服务
R-->>C: 通知服务地址列表

Note over C, P: 服务调用阶段
C->>P: 发起RPC调用(负载均衡)
P->>P: 处理业务逻辑
P-->>C: 返回结果

Note over C, P: 监控阶段
C->>M: 发送调用统计
P->>M: 发送性能数据

4 Spring Cloud vs Dubbo 深度对比

4.1 架构设计哲学对比

特性Spring CloudDubbo
设计理念微服务全家桶,一站式解决方案高性能RPC框架,专注于服务调用
架构风格分布式系统,HTTP RESTfulRPC调用,面向接口
生态体系丰富,涵盖微服务各方面专注,围绕RPC核心功能
学习曲线较陡峭,需要学习多个组件较平缓,核心概念简单清晰
灵活性高,组件可替换选择中,核心功能固定

4.2 通信协议对比

4.2.1 Spring Cloud通信机制

Spring Cloud默认使用HTTP/REST进行服务间通信:

java

// Feign客户端示例
@FeignClient(name = "user-service", url = "${user.service.url}")
public interface UserServiceClient {@GetMapping("/users/{id}")User getUserById(@PathVariable("id") Long id);@PostMapping("/users")User createUser(@RequestBody User user);
}// RestTemplate示例
@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}public User getUserWithRestTemplate(Long id) {return restTemplate.getForObject("http://user-service/users/" + id, User.class);
}
4.2.2 Dubbo通信机制

Dubbo使用自定义的二进制协议进行高效RPC通信:

java

// 服务接口
public interface UserService {User getUserById(Long id);
}// 服务提供者
@Service
public class UserServiceImpl implements UserService {public User getUserById(Long id) {// 实现逻辑}
}// 服务消费者
public class UserController {@Referenceprivate UserService userService;public User getUser(Long id) {return userService.getUserById(id);}
}
4.2.3 协议性能对比
特性HTTP/REST (Spring Cloud)Dubbo协议
序列化方式JSON/XML文本序列化Hessian2二进制序列化
连接方式短连接(HTTP1.x)或长连接(HTTP2)长连接,复用连接
头部开销较大(HTTP头部)较小(自定义二进制协议)
性能表现中等,文本解析开销大高性能,二进制解析高效
跨语言支持非常好,HTTP是通用标准较好,多语言SDK支持

4.3 服务发现机制对比

4.3.1 Spring Cloud服务发现

graph LR
A[服务提供者] -->|注册| B[Eureka Server]
C[服务消费者] -->|获取注册列表| B
C -->|调用| A

subgraph Spring Cloud发现机制
B -->|心跳检测| A
A -->|续约| B
end

4.3.2 Dubbo服务发现

graph LR
A[服务提供者] -->|注册| B[Zookeeper]
C[服务消费者] -->|订阅| B
B -->|通知变化| C
C -->|调用| A

subgraph Dubbo发现机制
B -->|临时节点| A
A -->|保持连接| B
end

4.3.3 发现机制对比表
特性Spring Cloud (Eureka)Dubbo (Zookeeper)
一致性模型AP架构,最终一致性CP架构,强一致性
健康检查客户端心跳检测会话连接检测
故障转移客户端缓存服务列表实时通知变化
性能影响客户端轮询更新Watch机制,实时性高
数据模型内存注册表层次化目录结构

4.4 配置管理对比

4.4.1 Spring Cloud Config

java

// 配置客户端
@RefreshScope
@RestController
public class ConfigController {@Value("${app.config.value}")private String configValue;@GetMapping("/config")public String getConfig() {return configValue;}
}// 配置服务器
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
4.4.2 Dubbo配置中心

Dubbo本身不提供完整的配置中心,但可以集成Nacos、Apollo等:

java

// 使用Nacos作为配置中心
@DubboComponentScan
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "dubbo-config", autoRefreshed = true)
public class ProviderConfiguration {
}
4.4.3 配置管理对比表
特性Spring Cloud ConfigDubbo + Nacos
配置存储Git、SVN、文件系统、数据库内嵌存储、数据库
动态刷新@RefreshScope机制监听配置变化
版本管理Git版本控制配置版本管理
权限控制依赖Git权限内置权限系统
多环境支持Profile机制Namespace隔离

4.5 容错机制对比

4.5.1 Spring Cloud容错

java

// Hystrix容错示例
@HystrixCommand(fallbackMethod = "fallbackGetUser",commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000"),@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10")}
)
public User getUserById(Long id) {return userService.getUserById(id);
}public User fallbackGetUser(Long id) {return new User("fallback-user");
}// Resilience4j示例
@CircuitBreaker(name = "userService", fallbackMethod = "fallback")
@RateLimiter(name = "userService")
@Retry(name = "userService")
public User getUser(Long id) {return userService.getUserById(id);
}
4.5.2 Dubbo容错

java

// 集群容错配置
@Reference(cluster = "failover", // 失败自动切换retries = 2,          // 重试次数timeout = 1000,       // 超时时间mock = "return null"  // 降级mock
)
private UserService userService;// 自定义降级策略
public class UserServiceMock implements UserService {@Overridepublic User getUserById(Long id) {// 降级逻辑return null;}
}
4.5.3 容错机制对比表
特性Spring Cloud (Hystrix/Resilience4j)Dubbo
熔断器模式线程池/信号量隔离连接数控制
降级策略Fallback方法Mock机制
重试机制@Retry注解retries参数
隔离策略线程池隔离、信号量基于连接隔离
监控指标Hystrix DashboardDubbo Admin

4.6 性能对比测试

为了客观比较两者的性能,我们设计了一个简单的测试场景:

测试环境:

  • 4核CPU,8GB内存

  • JDK 11,Spring Boot 2.5.x,Dubbo 2.7.x

  • 服务端与客户端在同一网络

测试代码示例:

java

// Spring Cloud性能测试
@SpringBootTest
public class SpringCloudPerformanceTest {@Autowiredprivate UserServiceClient userServiceClient;@Testpublic void testPerformance() {long start = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {userServiceClient.getUserById(1L);}long cost = System.currentTimeMillis() - start;System.out.println("Spring Cloud cost: " + cost + "ms");}
}// Dubbo性能测试
@SpringBootTest
public class DubboPerformanceTest {@Referenceprivate UserService userService;@Testpublic void testPerformance() {long start = System.currentTimeMillis();for (int i = 0; i < 10000; i++) {userService.getUserById(1L);}long cost = System.currentTimeMillis() - start;System.out.println("Dubbo cost: " + cost + "ms");}
}

性能测试结果:

测试场景Spring CloudDubbo性能提升
10000次简单调用约4500ms约1200ms275%
高并发(100线程)约6200ms约1800ms244%
大数据传输(10KB)约8800ms约2500ms252%
复杂对象序列化约7500ms约2000ms275%

从测试结果可以看出,Dubbo在性能方面有明显优势,特别是在高并发和大数据传输场景下。

5 综合对比与选型建议

5.1 技术对比总结表

维度Spring CloudDubbo优势方
性能中等,HTTP开销较大高性能,二进制协议Dubbo
功能完整性全面,微服务全家桶专注服务调用,需整合其他组件Spring Cloud
学习成本较高,需要掌握多个组件较低,核心概念简单Dubbo
社区生态丰富,Spring生态强大活跃,阿里巴巴生态支持平手
跨语言支持好,HTTP是开放标准较好,多语言SDKSpring Cloud
标准化程度高,遵循REST等开放标准中,自定义协议Spring Cloud
适用规模中大型项目,复杂业务高性能要求的项目场景相关

5.2 选型建议指南

5.2.1 选择Spring Cloud的场景
  1. 大型复杂系统:需要完整的微服务治理能力

  2. 技术异构环境:需要与多种技术栈集成

  3. 已有Spring技术栈:团队熟悉Spring生态系统

  4. 需要标准化:遵循REST等开放标准的要求

  5. 快速原型开发:需要快速搭建微服务架构

graph TD
A[项目需求分析] --> B{需要完整微服务解决方案?}
B -->|是| C[选择Spring Cloud]
B -->|否| D{性能要求极高?}
D -->|是| E[选择Dubbo]
D -->|否| F{技术栈多样化?}
F -->|是| C
F -->|否| G{团队熟悉Spring?}
G -->|是| C
G -->|否| E

5.2.2 选择Dubbo的场景
  1. 高性能要求:对服务调用性能有极高要求

  2. 内部系统:系统内部服务间调用

  3. Java技术栈:主要使用Java技术栈

  4. 已有Dubbo积累:团队有Dubbo使用经验

  5. 传统SOA迁移:从传统SOA架构迁移到微服务

5.3 混合架构方案

在实际项目中,也可以考虑混合使用Spring Cloud和Dubbo:

graph TB
subgraph "外部请求层"
Gateway[API网关: Spring Cloud Gateway]
end

subgraph "业务服务层"
Service_A[Web服务: Spring Cloud]
Service_B[业务服务: Dubbo]
Service_C[基础服务: Dubbo]
end

subgraph "基础设施层"
Registry[注册中心: Nacos]
Config[配置中心: Nacos]
Monitor[监控: SkyWalking]
end

Gateway --> Service_A
Service_A --> Service_B
Service_A --> Service_C
Service_B --> Service_C

Service_A --> Registry
Service_B --> Registry
Service_C --> Registry

Service_A --> Config
Service_B --> Config
Service_C --> Config

Service_A --> Monitor
Service_B --> Monitor
Service_C --> Monitor

混合架构配置示例:

java

// Spring Cloud服务调用Dubbo服务
@Service
public class HybridUserService {// 注入Dubbo服务@Referenceprivate UserDubboService userDubboService;// Spring Cloud服务@GetMapping("/hybrid/users/{id}")public User getUser(@PathVariable Long id) {// 调用Dubbo服务return userDubboService.getUserById(id);}
}// Dubbo服务配置
@DubboService
public class UserDubboServiceImpl implements UserDubboService {@Overridepublic User getUserById(Long id) {// 实现逻辑return userRepository.findById(id);}
}

6 未来发展趋势

6.1 Spring Cloud发展趋势

  1. 响应式编程:全面拥抱WebFlux和响应式编程

  2. 云原生支持:更好地支持Kubernetes和云原生环境

  3. 服务网格集成:与Istio等服务网格技术集成

  4. 函数式计算:支持Serverless和函数式计算模式

6.2 Dubbo发展趋势

  1. 云原生适配:更好地适应云原生环境

  2. 服务网格:作为服务网格的数据平面

  3. 多语言支持:增强非Java语言的支持能力

  4. 应用级服务发现:支持更灵活的服务发现模式

6.3 融合趋势

随着微服务架构的演进,Spring Cloud和Dubbo正在相互借鉴和融合:

  1. Spring Cloud Alibaba:将Dubbo集成到Spring Cloud生态中

  2. Dubbo Spring Boot:更好地支持Spring Boot开发方式

  3. 统一标准:共同推动微服务标准化的进程

7 结论

Spring Cloud和Dubbo都是优秀的微服务框架,各有其优势和适用场景:

  • Spring Cloud提供了完整的微服务解决方案,适合需要全方位微服务治理的大型复杂系统

  • Dubbo专注于高性能RPC调用,适合对性能要求极高的内部服务通信

在实际项目选型时,应该根据团队技术栈、业务需求、性能要求等因素综合考虑。对于大多数企业级应用,Spring Cloud可能是更好的选择,因为它提供了更完整的生态体系。而对于性能敏感的内部系统,Dubbo可能更具优势。

未来,随着微服务技术的不断发展,两个框架之间的界限可能会越来越模糊,开发者可以根据实际需求选择合适的技术组合,甚至混合使用两种技术来发挥各自的优势。

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

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

相关文章

鸿蒙ArkTS 核心篇-14-条件表达式(三目运算符)

目录 根据逻辑条件结果&#xff0c;执行不同的表达式&#xff0c;得到不同结果 DevEco Studio代码实战 ctrl s 日志输出 总结 根据逻辑条件结果&#xff0c;执行不同的表达式&#xff0c;得到不同结果 DevEco Studio代码实战 let num1: number 100 let num2: number 20l…

CDH集成LDAP进行身份验证

前言&#xff1a;在内网环境中部署LDAP并在CDH的hive和impala中集成&#xff0c;其中配置的端口&#xff0c;镜像名&#xff0c;密码等需要根据自己情况进行更改 1、镜像下载 在有网络的服务器上下载镜像或直接下载&#xff0c;这里需要自行配置下docker镜像下载地址 # 下载…

并发编程:Java中的多线程与线程池!

全文目录&#xff1a;开篇语线程的基础概念线程生命周期线程调度线程安全线程池&#xff1a;Executor框架、线程池的管理与调优Executor框架线程池的管理与调优并发工具类&#xff1a;ReentrantLock、CountDownLatch、CyclicBarrier等ReentrantLockCountDownLatchCyclicBarrier…

语义分割一站式到底怎么玩?

语义分割模型&#xff0c;复现或改进、对比实验&#xff0c;&#xff0c;欢迎交流&#xff0c;完爆各种详细需求1、可以接以下语义分割模型dai做 DeepLabV3、PSPnet、HRnet、Segformer、Unet、u2net、cenet、erfnet、hcanet、hiformer、uiunet、nnunet、saunet、unext、dscnet、…

由于不对称GND过孔配置,差分信号过孔上的差模到共模转换

本文研究了靠近高速差分信号过孔的接地过孔的影响以及由此产生的差模到共模的转换。该工作显示了接地 &#xff08;GND&#xff09; 过孔和差分信号之间距离的影响 &#xff08;Diff. SIG.&#xff09;;GND过孔不对称配置的影响;介电厚度和平面之间跃迁次数的影响。 印刷电路板…

Axios 实例配置指南

今天分享一段 Axios 实例配置的代码&#xff0c;用于 Web Front - End 项目的构建。 一、为什么使用 Axios 在前端项目中&#xff0c;与后端进行数据交互是必不可少的。Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;它提供了简洁的 API 和强大的功能&#xff0c;能够方…

分分合合,门模块方案又兴起了

文章目录前言1.方案概述1.1 功能需求1.2 框图2.供电和通信2.1 理想二极管控制器2.2 SBC2.3 高边开关3.门模块PCBA3.1 后视镜3.2 车窗和电动门4.车锁控制PCBA5.氛围灯PCBA6.未来趋势前言 最近接触了一些之前做门锁、门控、BCM的客户&#xff0c;发现他们或多或少都在做一些门模…

AWD相关知识

AWD AWD&#xff1a;Attack With Defence&#xff0c;即攻防对抗&#xff0c;比赛中每个队伍维护多台服务器&#xff08;一般两三台&#xff0c;视小组参赛人数而定&#xff09;&#xff0c;服务器中存在多个漏洞&#xff08;web层、系统层、中间件层等&#xff09;&#xff0c…

基于CNN(卷积神经网络)的门牌号识别

1、官网下载SVHN数据集svhn是数据集&#xff0c;Dataset2、HOG特征3、支持向量机 SVM(Support Vector Machine&#xff0c;SVM) 分类器4、cv2需要导入 pip install opencv-python5、HOG特征提取5.1 伽马校正归一化预补偿反归一化无伽马校正有伽马校正5.2 灰度化5.3 图像梯度计…

使用LLAMA_cpp_python进行qwen2.5-vl-7b-instruct进行推理

目标&#xff1a;使用python的llama_cpp运行qwen2.5vl模型实现提交图片和文本回答文本效果 遇到的问题&#xff1a; 和提交信息的判断关键点llama.cpp 作为一个用 C/C 编写的轻量级大语言模型推理框架&#xff0c;让你能在各种硬件上高效运行模型。它通过降低部署和运行大模型的…

PDF,HTML,md格式文件在线查看工具

VUE3 实现了 PDF,HTML,md格式文件在线查看工具 在线体验地址: http://114.55.230.54/ 实现了一款漂亮的PDF,HTML,md格式文件在线查看网页工具 1、PDF预览1.1 实现代码 <script setup> import { ref, watch, computed } from vue// 状态管理 const files ref([]) // 存储…

CPP学习之map和set

1. 关联式容器 在之前博客中我们提到过序列式容器&#xff1a;vector, list, deque, forward_list等&#xff0c;其底层都是线性数据结构。 关联式容器存储的是键值对–<key, value>&#xff0c;与序列式容器仅存储值–key不一样&#xff0c;在数据检索时比序列式容器效…

深入理解C++中的移动赋值与拷贝赋值函数——兼论移动构造函数及其实际应用场景

技术博客&#xff1a;深入理解C中的移动赋值与拷贝赋值函数——兼论移动构造函数及其实际应用场景引言在C编程中&#xff0c;对象的赋值和构造操作是常见的需求。随着C11标准的引入&#xff0c;移动语义&#xff08;Move Semantics&#xff09;成为提升程序性能的重要手段之一。…

免费在线图片合成视频工具 ,完全免费

免费在线图片合成视频工具 &#xff0c;完全免费 免费在线图片合成视频工具是一个完全免费的图片生成视频网站、图片和音乐合成视频网站。 它完全免费&#xff0c;无需注册登录&#xff0c;可以轻松将多张图片转换为视频&#xff0c;支持 jpeg 、png 、webp 格式图片&#xf…

金仓数据库 V9 体验测评:AI 时代国产数据库 “融合” 架构的真实观察

【非广告声明】本文为本人基于金仓数据库 V9 的真实部署测试与技术拆解&#xff0c;无任何商业合作背景&#xff0c;未接受品牌方任何形式的推广委托或费用支持。写作核心是分享国产数据库在 “融合架构”“AI 赋能”“平滑迁移” 等关键场景下的实际使用体验 —— 包括技术细节…

EE进阶1:Maven和SpringBoot基本介绍

Maven什么是mavenMaven简单的理解就是一个项目管理工具&#xff0c;使用pom.xml文件进行管理和获取.jar包&#xff0c;而不用手动进行添加.jar包。创建maven项目以及使用Maven的功能非常多&#xff0c;这里主要理解Maven的项目创建和依赖管理。项目创建&#xff1a;maven本身是…

【系统架构设计(三)】系统工程与信息系统基础下:企业信息化与电子商务-数字化转型的核心驱动力

文章目录一、信息化的基本概念1、 信息化的定义与目的2、 信息化涉及的三大创新3、信息化需求的三个层次二、企业信息化六大方法体系三、信息系统战略规划方法1、 战略规划方法的演进2、 关键成功因素法&#xff08;CSF&#xff09;3、 战略集合转化法&#xff08;SST&#xff…

分布式2PC理论

目录 什么是分布式 2PC&#xff08;Two-Phase Commit&#xff09; 2PC 的工作原理 2PC 的优缺点 为什么 2PC 不完全可靠&#xff1f; 超时问题 协调者故障 什么是分布式 2PC&#xff08;Two-Phase Commit&#xff09; 定义 2PC 是一种原子提交协议&#xff0c;用…

【原创】PDF一键导出图片多张图片一键合成PDF

一、界面功能介绍&#xff1a;PDF输出图片和图片合成PDF二合一 开发动力&#xff1a;WPS有此功能需要VIP收费&#xff0c;其他小软件不能满足我的要求 依赖&#xff1a;友好界面组件&#xff0c;pdf输出图片组件&#xff0c;合并组件 NET8.0&#xff08;NetCore.Winform&#x…

卷积神经网络项目:基于CNN实现心律失常(ECG)的小颗粒度分类系统

卷积神经网络项目实现文档 1、项目简介 1.1 项目名称 ​ 基于CNN实现心律失常&#xff08;ECG&#xff09;的小颗粒度分类系统 1.2 项目简介 ​ 心律失常是临床上常见且潜在致命的心血管疾病之一&#xff0c;包括房性早搏&#xff08;PAC&#xff09;、室性早搏&#xff0…