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

B.50.10.10-微服务与电商应用

微服务架构核心原理与电商应用实战

核心理念: 本文深入对比当前最主流的两大Java微服务框架——Spring Cloud与Dubbo,并剖析其在服务发现、配置管理、网关、熔断限流等服务治理领域的实现原理与最佳实践。我们将重点探讨Nacos作为注册中心与配置中心的核心机制,以及Spring Cloud Gateway与Sentinel的内部工作原理。本文的目标是帮助架构师在复杂的业务场景下,为微服务体系做出最合理的技术选型,并构建出稳定、高可用的分布式系统。


第1章:微服务架构核心概念与价值

1.1. 微服务架构核心概念

微服务架构是一种将大型单体应用拆分为一组小型、独立、可独立部署的服务的架构风格。其目标是提升敏捷性、可扩展性和可维护性。

核心概念包括:

  • 服务拆分: 遵循单一职责原则,按照业务边界将应用拆分为独立的服务。
  • 去中心化: 每个服务都可以有自己的技术栈、数据库和开发团队。
  • API网关: 所有外部请求的统一入口,负责路由、认证、限流、日志等。
  • 服务注册与发现: 服务实例动态地在注册中心注册自己的地址,消费者从注册中心发现并调用服务。
  • 配置中心: 集中管理所有服务的配置信息,实现配置的动态更新。
  • 服务容错: 通过熔断、降级、限流等机制保障系统稳定性。
服务治理
服务A
注册中心
服务B
服务C
配置中心
服务容错
客户端
API网关
数据库A
数据库B
数据库C

1.2. 微服务架构的优势与挑战

优势:

  1. 技术多样性: 不同服务可以使用不同的技术栈
  2. 独立部署: 服务可以独立开发、测试、部署和扩展
  3. 故障隔离: 单个服务的故障不会影响整个系统
  4. 团队自治: 不同团队可以独立开发和维护各自的服务
  5. 可扩展性: 可以根据业务需求独立扩展特定服务

挑战:

  1. 分布式复杂性: 网络延迟、故障处理、数据一致性等问题
  2. 运维复杂性: 需要管理多个服务实例
  3. 数据一致性: 跨服务的事务处理变得复杂
  4. 测试复杂性: 需要协调多个服务的测试
  5. 通信开销: 服务间通信相比进程内调用开销更大

第2章:主流微服务框架对比:Spring Cloud vs Dubbo

2.1. 框架概述

特性Spring CloudDubbo
出身Spring家族,Pivotal开源阿里巴巴开源,后捐赠给Apache
核心优势生态整合、全家桶方案高性能RPC、强大的服务治理
通信协议基于HTTP/RESTful (默认)基于RPC (默认,如Dubbo协议)
服务调用方式通过Feign声明式调用,像调用本地方法传统RPC接口调用
与Spring集成无缝集成,是Spring Boot的官方推荐完美集成,但需要额外依赖
生态系统庞大,组件丰富 (Gateway, Feign, Sentinel等)聚焦RPC核心,生态相对独立

2.2. 设计哲学的不同

  • Spring Cloud: 它不是一个单一的框架,而是一个微服务治理的规范和解决方案的集合。它将Netflix、Alibaba等公司的成熟组件(如Eureka, Hystrix, Nacos, Sentinel)进行封装和抽象,提供了统一的、基于注解的编程模型。其默认采用HTTP/RESTful风格,使得服务间调用更像是访问Web资源,易于理解和调试。

  • Dubbo: 它从一开始就定位为一个高性能的RPC框架。其核心是解决服务间的远程过程调用问题,追求极致的性能和强大的服务治理能力(如负载均衡、服务路由、优雅停机等)。

2.3. 技术选型指南

选型军规: “技术选型服务于业务和团队。新建项目、云原生环境、团队熟悉Spring全家桶,优选Spring Cloud Alibaba。存量系统、对性能有极致要求、需要精细化服务治理,Dubbo是强力选项。

选择Spring Cloud (特别是Spring Cloud Alibaba)的场景:

  • 新项目与初创团队: Spring Cloud提供了从网关、服务发现到配置、熔断的一站式解决方案,开发体验统一,上手快。
  • 云原生与容器化: Spring Cloud对容器化部署、服务网格(Service Mesh)的集成更为友好。
  • 需要与外部系统进行大量HTTP交互: 其基于RESTful的设计天然适合与各种异构系统集成。
  • 团队技术栈统一: 团队熟悉Spring生态,希望使用统一的技术栈。

选择Dubbo的场景:

  • 对性能要求极高的核心业务: 如交易、金融等场景,Dubbo的RPC性能优于HTTP。
  • 需要精细化服务治理: Dubbo提供了丰富的负载均衡策略、服务路由规则、参数调优等高级功能,允许架构师对服务调用行为进行像素级的控制。
  • 从大型单体应用迁移: Dubbo强大的服务化能力,非常适合作为大型单体应用拆分为微服务的利器。
  • 已有Dubbo技术积累: 团队已有Dubbo使用经验,且系统对性能要求较高。

现代趋势:融合与互通

  • Dubbo 3.0引入了基于HTTP/2的Triple协议,并开始拥抱云原生。
  • Spring Cloud也通过集成Dubbo,实现了两者的互联互通。
  • 未来的趋势是,RPC与REST的界限会越来越模糊,框架底层更多地采用gRPC、HTTP/2等高性能协议,而上层提供统一的编程模型。

第3章:微服务核心组件详解

3.1. 核心组件概览

微服务架构依赖于一系列核心组件来实现服务治理,主要包括:

功能Spring Cloud组件集成的开源项目职责
服务注册与发现Spring Cloud Alibaba (Nacos)Nacos管理服务实例的地址,实现动态服务发现
服务调用Spring Cloud OpenFeignOpenFeign提供声明式的、类型安全的HTTP客户端,简化服务间调用
API网关Spring Cloud GatewayProject Reactor (Netty)提供路由、断路、过滤、重试等网关功能
客户端负载均衡Spring Cloud LoadBalancer-在客户端层面将请求分发到多个服务实例
服务容错Spring Cloud Alibaba (Sentinel)Sentinel实现熔断、降级、限流,防止服务雪崩
配置中心Spring Cloud Alibaba (Nacos)Nacos集中管理和动态刷新应用配置
分布式事务SeataSeata解决跨服务的分布式事务问题
分布式锁Redis/ZookeeperRedisson/Curator实现跨服务的分布式锁机制

3.2. 服务注册与发现:Nacos深度剖析

Nacos (Naming and Configuration Service) 是Spring Cloud Alibaba生态中的核心组件,同时支持服务发现和配置管理。

3.2.1. Nacos作为注册中心

工作原理:

  1. 服务注册: 服务提供者(Provider)启动时,通过心跳机制向Nacos Server注册自己的实例信息(IP, 端口, 健康状态等)。Nacos支持临时实例永久实例
  2. 服务发现: 服务消费者(Consumer)向Nacos Server订阅(Subscribe)某个服务。Nacos会将该服务的健康实例列表推送给消费者,并缓存在其本地。
  3. 心跳与健康检查: 临时实例通过定时发送心跳来维持注册。如果Nacos在一定时间内没收到心跳,会将其标记为不健康并从列表中剔除。Nacos也会主动进行健康检查。
  4. 实时推送: 当服务实例列表发生变化时(如上线、下线、宕机),Nacos Server会主动将最新的列表推送给所有订阅的消费者,实现了服务状态的近实时更新。

对比Eureka:

  • 一致性协议: Eureka 1.0采用AP模型(最终一致),节点间相互注册,不区分leader/follower。Nacos支持CP(基于Raft协议)和AP(类Distro协议)两种模式切换。
  • 健康检查: Eureka只依赖客户端心跳。Nacos除了心跳,还支持服务端主动健康检查。
  • 实时性: Nacos的服务状态变更通知是近实时的,而Eureka有30秒的延迟。
  • 功能: Nacos集成了服务发现和配置管理,功能更强大。
3.2.2. Nacos作为配置中心

核心功能:

  • 配置实时更新: 应用启动时从Nacos拉取配置,并监听配置变化。当管理员在Nacos控制台修改配置并发布后,Nacos会主动将变更推送到应用,应用接收到后动态刷新其上下文(如@Value注入的值,或@ConfigurationProperties绑定的对象),实现配置的热更新
  • 灰度发布与版本管理: 支持配置的版本控制和灰度发布,可以将配置先推送到指定的几台机器,验证通过后再全量发布。
  • 命名空间与分组:
    • Namespace: 用于多环境隔离(如dev, test, prod)。
    • Group: 用于区分不同的应用或业务模块。
    • Data ID: 通常是具体的配置文件名(如database.properties)。

3.3. 服务间通信:OpenFeign与负载均衡

3.3.1. OpenFeign:优雅的服务调用

OpenFeign让服务间的调用变得像调用本地方法一样简单。

@FeignClient(name = "user-service")
public interface UserClient {@GetMapping("/users/{id}")UserDTO getUserById(@PathVariable("id") Long id);
}
3.3.2. Spring Cloud LoadBalancer:客户端负载均衡

Spring Cloud LoadBalancer是Spring Cloud提供的客户端负载均衡器,它可以在客户端层面将请求分发到多个服务实例。

主要特性:

  • 支持多种负载均衡策略(随机、轮询等)
  • 与服务发现组件集成
  • 支持自定义负载均衡策略

3.4. 服务容错与流量控制:Sentinel原理

Sentinel是阿里巴巴开源的,面向分布式服务架构的轻量级流量控制框架。

3.4.1. 熔断降级

目的: 当下游服务因故障或延迟过高时,为了防止整个系统的雪崩效应,暂时切断对该服务的调用,并在一段时间后尝试恢复。

策略:

  • 慢调用比例: 在指定时间窗口内,如果慢调用(响应时间 > 阈值)的比例超过设定值,则触发熔断。
  • 异常比例/异常数: 在指定时间窗口内,如果异常请求的比例或数量超过设定值,则触发熔断。

熔断状态:

  • Closed: 关闭状态,正常调用。
  • Open: 打开状态,熔断开启,直接返回错误或执行降级逻辑。
  • Half-Open: 半开状态。在Open状态持续一段时间后进入,会尝试放行少量请求。如果这些请求成功,则回到Closed状态;如果失败,则重新回到Open状态。
3.4.2. 流量控制(限流)

目的: 保护系统不被瞬时的高并发流量冲垮。

核心算法:

  • 令牌桶算法 (Token Bucket): 系统以一个恒定的速率向桶里放入令牌。请求到来时,必须先从桶里获取一个令牌才能被处理。如果桶里没有令牌,则请求被拒绝或排队。非常适合应对突发流量
  • 漏桶算法 (Leaky Bucket): 请求像水一样进入桶中,桶以一个固定的速率漏水(处理请求)。如果水流过快,桶会溢出(拒绝请求)。可以强制平滑请求速率

Sentinel的实现: Sentinel内部使用了滑动时间窗口(Sliding Window)算法来统计时间窗口内的请求数,并结合令牌桶等算法实现精准的流量控制。

3.4.3. 对比Hystrix
  • 隔离策略: Hystrix主要通过线程池或信号量进行资源隔离。Sentinel支持线程池、信号量隔离,并提供了更轻量级的并发线程数控制。
  • 熔断策略: Sentinel支持更丰富的熔断策略(慢调用比例、异常比例、异常数)。
  • 实时性: Sentinel的监控和规则配置都是近实时的,而Hystrix需要重启应用。
  • 生态: Sentinel有强大的控制台,可以实时监控、动态配置规则。
  • 结论: Hystrix已停止更新,Sentinel是其完美的替代者和继任者。

第4章:API网关详解

API网关是微服务架构的入口,负责请求路由、认证、限流、日志等。

4.1. Spring Cloud Gateway vs Zuul

  • Zuul 1.x:

    • 模型: 基于阻塞式I/O和多线程模型。每个请求都会被分配一个线程,直到请求处理完毕。
    • 缺点: 在高并发下,线程是宝贵资源。如果后端服务响应慢,大量线程会被阻塞,导致网关性能瓶颈和资源耗尽。
  • Spring Cloud Gateway:

    • 模型: 基于非阻塞式I/O的响应式编程模型(Spring WebFlux / Project Reactor)。
    • 原理: 使用少量I/O线程(通常等于CPU核心数)来处理所有请求。当请求需要等待I/O(如调用下游服务)时,线程不会被阻塞,而是去处理其他请求。当I/O操作完成后,通过回调机制继续处理后续逻辑。
    • 优点: 极高的并发性能和资源利用率,是现代微服务网关的首选。

4.2. 核心工作原理

Gateway的工作流程可以概括为:客户端请求 -> Gateway Handler Mapping -> Gateway Web Handler -> 过滤器链 (Filter Chain) -> 代理到后端服务。

  • Route (路由): 网关的基本构建块,由ID、目标URI、一组谓词和一组过滤器定义。
  • Predicate (谓词): 用于匹配HTTP请求的任何内容,如路径、Host、请求头等。
  • Filter (过滤器): 用于在请求转发前后修改请求和响应。

4.3. 实践示例

daily-discover-gateway模块中,我们通过Java Bean的方式配置路由,这比写在配置文件中更灵活。

@Configuration
public class GatewayRoutesConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("user-service-route", r -> r.path("/api/user/**").filters(f -> f.stripPrefix(2)).uri("lb://daily-discover-user")).build();}
}
  • uri("lb://daily-discover-user"): lb协议表示启用Spring Cloud LoadBalancer进行负载均衡,它会从Nacos等服务发现中心查找名为daily-discover-user的服务实例列表,并选择一个进行请求转发。

4.4. 全局过滤器:实现统一的横切关注点

全局过滤器(GlobalFilter)会应用到所有路由上,是实现认证、授权、日志等横切关注点的最佳位置。

@Component
@Order(-1) // 保证该过滤器在路由过滤器之前执行
public class AuthGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token == null || !isValid(token)) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}ServerHttpRequest modifiedRequest = exchange.getRequest().mutate().header("X-User-Id", getUserIdFrom(token)).build();return chain.filter(exchange.mutate().request(modifiedRequest).build());}private boolean isValid(String token) { /* ... */ }private String getUserIdFrom(String token) { /* ... */ }
}

第5章:分布式系统核心问题解决方案

5.1. 分布式事务:Seata解决方案

在微服务架构中,一次业务操作往往需要跨越多个独立的服务。如何保证这些跨服务操作的原子性——要么全部成功,要么全部失败?这便是分布式事务要解决的核心难题。

5.1.1. Seata核心概念
  • Transaction Coordinator (TC - 事务协调者): Seata Server。它是独立的、中心化的服务,负责维护全局事务的状态,接收事务注册,并驱动全局事务的提交或回滚。
  • Transaction Manager (TM - 事务管理器): 嵌入在事务发起方(通常是业务入口的服务)的 Seata Client 中。负责开启一个全局事务,并最终向 TC 发起全局提交或回滚的决议。
  • Resource Manager (RM - 资源管理器): 嵌入在事务参与方的 Seata Client 中。负责管理分支事务,与 TC 协同,根据 TC 的指令来驱动分支事务的提交或回滚。
5.1.2. Seata核心事务模式
  1. AT 模式(Automatic Transaction): AT 模式因其对业务的零侵入性而最为常用。它通过代理数据源,拦截业务 SQL,生成 Undo Log 来实现分布式事务。
  2. TCC 模式(Try-Confirm-Cancel): TCC 模式是一种业务侵入性较强的事务模式,需要开发者为每个业务操作实现三个方法:Try、Confirm、Cancel。
  3. Saga 模式: Saga 模式是一种长事务解决方案,将一个长事务拆分为多个短事务,每个短事务都有对应的补偿操作。

5.2. 分布式锁:Redis与Zookeeper实现

在分布式系统中,应用部署在多台机器上,Java 的内置锁无法跨 JVM 生效,因此需要一种能够协调所有节点的机制,这就是分布式锁。

5.2.1. 基于Redis实现分布式锁

这是目前业界最主流、性能最高的分布式锁实现方式。

  • 核心命令

    SET lock_key random_value NX PX 30000
    
    • lock_key: 锁的唯一标识。
    • random_value: 一个随机值,用于保证"解铃还须系铃人",只有加锁的客户端才能释放锁。
    • NX: (Not eXists),只在 key 不存在时才设置成功,保证了原子性。
    • PX 30000: 设置锁的过期时间为 30000 毫秒,防止客户端宕机导致死锁。
  • 释放锁: 使用 Lua 脚本保证原子性。

    if redis.call("get", KEYS[1]) == ARGV[1] thenreturn redis.call("del", KEYS[1])
    elsereturn 0
    end
    
5.2.2. 基于Zookeeper实现分布式锁
  • 实现原理: 利用 Zookeeper 的临时有序节点
    1. 加锁: 每个客户端尝试在某个父节点下创建一个临时有序节点。
    2. 创建后,获取父节点下的所有子节点,判断自己创建的节点是否是序号最小的。如果是,则获取锁成功。
    3. 如果不是,则对序号比自己小的前一个节点注册一个 Watcher 监听。
    4. 释放锁: 执行完业务逻辑后,删除自己创建的节点即可。当一个节点被删除时,其后继节点会收到通知,再次尝试获取锁。

5.3. RPC框架:服务间通信基础

RPC (Remote Procedure Call),即远程过程调用,是一种允许一台计算机(客户端)上的程序,调用另一台计算机(服务器)上的子程序(过程或函数),而不需要程序员显式地为这个远程交互编码的协议。

5.3.1. RPC调用流程
ClientClient StubRPC FrameworkServer StubServer调用方法 (如 a.get(id))序列化请求 (方法名, 参数)网络传输接收数据反序列化请求执行本地方法返回结果序列化响应网络传输接收数据反序列化响应得到结果ClientClient StubRPC FrameworkServer StubServer
5.3.2. 主流RPC框架
  1. gRPC (Google): 基于 HTTP/2,性能优越,使用 Protobuf 作为接口定义语言和序列化协议。
  2. Dubbo (Alibaba): 功能丰富,服务治理能力强大,是 Java 领域最流行的 RPC 框架之一。
  3. Thrift (Facebook): 拥有自己的接口定义语言和完整的 RPC 解决方案,跨语言支持优秀。

第6章:微服务架构设计与最佳实践

6.1. 服务拆分原则

  1. 业务边界: 按照业务领域进行拆分,每个服务负责一个明确的业务功能
  2. 数据隔离: 每个服务拥有独立的数据存储,避免数据耦合
  3. 接口契约: 定义清晰的服务接口契约,确保服务间通信的稳定性
  4. 版本管理: 合理管理服务版本,支持平滑升级和回滚
  5. 单一职责: 每个服务只负责一个核心业务功能

6.2. 数据一致性处理

在微服务架构中,数据一致性是一个重要挑战。常见的处理方式包括:

  1. 分布式事务: 使用Seata等分布式事务框架保证强一致性
  2. 最终一致性: 通过消息队列实现最终一致性
  3. 补偿机制: 通过补偿操作来处理异常情况
  4. 幂等性设计: 确保重复操作不会产生副作用

6.3. 监控与运维

微服务架构需要完善的监控和运维体系:

  1. 链路追踪: 使用SkyWalking、Zipkin等工具追踪请求链路
  2. 指标监控: 监控服务的性能指标,如响应时间、错误率等
  3. 日志管理: 集中管理服务日志,便于问题排查
  4. 自动化运维: 使用Kubernetes等容器编排工具实现自动化部署和运维
  5. 健康检查: 实现服务健康检查机制,及时发现和处理问题

第7章:电商系统微服务架构实践

7.1. 典型电商系统架构

RPC
RPC
RPC
RPC
用户端
API网关
用户服务
商品服务
订单服务
支付服务
库存服务
用户数据库
商品数据库
订单数据库
支付数据库
库存数据库
Nacos注册中心
Nacos配置中心
Sentinel
Seata事务协调器

7.2. 核心服务设计

  1. 用户服务: 负责用户注册、登录、权限管理等功能
  2. 商品服务: 负责商品信息管理、商品搜索等功能
  3. 订单服务: 负责订单创建、订单查询、订单状态管理等功能
  4. 支付服务: 负责支付处理、退款处理等功能
  5. 库存服务: 负责库存管理、库存扣减等功能

7.3. 关键业务流程

  1. 订单创建流程:

    • 用户下单请求到达订单服务
    • 订单服务调用库存服务检查并扣减库存
    • 订单服务调用支付服务处理支付
    • 订单服务更新订单状态
  2. 库存管理流程:

    • 商品上架时库存服务增加库存
    • 用户下单时库存服务扣减库存
    • 库存不足时触发补货提醒

7.4. 高并发场景优化

  1. 缓存策略: 使用Redis等缓存热点数据,减少数据库压力
  2. 限流降级: 使用Sentinel实现接口限流和降级
  3. 异步处理: 使用消息队列处理非核心业务流程
  4. 数据库优化: 读写分离、分库分表等策略
  5. CDN加速: 静态资源使用CDN加速

第8章:核心概念与题库

Q: 什么是服务雪崩?如何防止?
A: 服务雪崩是指一个服务的故障导致依赖该服务的其他服务也接连发生故障。防止雪崩的核心手段是服务容错,主要有三种方式:服务隔离、服务熔断、服务降级。

Q: Nacos作为注册中心,AP和CP模式有什么区别?
A: AP模式(默认)保证可用性,允许短时间数据不一致。CP模式保证强一致性,但在网络分区时可能无法注册新服务。

Q: Spring Cloud Gateway和Zuul有什么区别?
A: Gateway基于Spring WebFluxNetty,是非阻塞异步模型,性能更高。Zuul 1.x是基于Servlet阻塞同步模型。Spring Cloud官方已推荐使用Gateway替代Zuul。

Q: 什么是服务熔断?Sentinel是如何实现的?
A: 服务熔断是一种保护机制,当某个服务出现故障时,暂时切断对该服务的调用,防止故障扩散。Sentinel通过监控服务的响应时间、异常率等指标,在达到阈值时触发熔断,进入熔断状态后直接返回错误或执行降级逻辑。

Q: 微服务架构中如何保证数据一致性?
A: 微服务架构中保证数据一致性的方式包括:

  1. 分布式事务: 使用Seata等框架实现强一致性
  2. 最终一致性: 通过消息队列实现最终一致性
  3. 补偿机制: 通过补偿操作处理异常情况
  4. 幂等性设计: 确保重复操作不会产生副作用

Q: Spring Cloud和Dubbo有什么区别?
A: 主要区别包括:

  1. 通信协议: Spring Cloud默认基于HTTP/RESTful,Dubbo基于RPC
  2. 生态系统: Spring Cloud生态更丰富,Dubbo专注于RPC
  3. 性能: Dubbo的RPC性能通常优于HTTP
  4. 集成性: Spring Cloud与Spring Boot集成更紧密

Q: 什么是分布式锁?有哪些实现方式?
A: 分布式锁是在分布式环境下保证同一时间只有一个客户端能够持有锁的机制。主要实现方式包括:

  1. 基于Redis: 使用SET NX PX命令和Lua脚本
  2. 基于Zookeeper: 利用临时有序节点实现
  3. 基于数据库: 使用唯一索引或行级锁实现

Q: 微服务如何进行服务拆分?
A: 微服务拆分应遵循以下原则:

  1. 业务边界: 按照业务领域进行拆分
  2. 单一职责: 每个服务只负责一个核心功能
  3. 数据隔离: 每个服务拥有独立的数据存储
  4. 接口契约: 定义清晰的服务接口
http://www.xdnf.cn/news/20484.html

相关文章:

  • 关于退耦电容
  • 【LeetCode热题100道笔记】将有序数组转换为二叉搜索树
  • 3分钟快速入门WebSocket
  • Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征提取 - 主成分分析 (PCA)
  • dify+Qwen2.5-vl+deepseek打造属于自己的作业帮
  • 第27节:3D数据可视化与大规模地形渲染
  • 如何下载小红书视频
  • MySQL的组复制(MGR)高可用集群搭建
  • vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)
  • STM32F4芯片RS485使用记录
  • 小迪自用web笔记29
  • 少儿配音教育:广州声与色在线科技有限公司打造趣味课程,助力青少年语言能力提升
  • 电脑外接显示屏字体和图标过大
  • 实体商业创新观察:AI 驱动的本地生活服务新模式解析
  • 计算机网络:物理层---物理层的基本概念
  • OpenSSL 1.0.1e 下载解压和运行方法(小白适用 附安装包)​
  • Nginx性能调优:参数详解与压测对比
  • 小孔成像原理
  • 吴恩达机器学习(九)
  • 正态分布 - 正态分布的标准化
  • 音视频技术全景:从采集到低延迟播放的完整链路解析
  • 【鸿蒙 NEXT】V1迁移V2状态管理
  • VMWare和centOS的安装
  • 集成学习 —— 梯度提升树GBDT、XGBoost
  • Javaweb 14.4 Vue3 视图渲染技术
  • 【MySQL | 高级篇 分片规则与管理监控】
  • 从Java全栈到前端框架的全面实战:一次真实面试的深度解析
  • c++ sqlite3库
  • CentOS下Bind服务的安装与故障排查
  • pyAutoGUI 模块主要功能介绍-(1)鼠标功能