微服务

微服务的基础构成

是一种架构模式实践,是分治算法的代表性应用。它具有分布式系统的代表性特征:分布性 ,并发性,异构性,可拓展性。
微服务架构的五大主要组件:

  • 服务注册发现
  • 负载均衡器
  • 链路追踪
  • 限流与熔断(保护应用本身)
  • 日志收集与分析

服务注册与发现

概念
  • 服务注册:服务进程向注册中心注册元数据
  • 服务发现:用户向注册中心请求服务
服务注册/注销

心跳机制:定时上传与健康检查
注册中心自我保护:

服务发现

服务调用方 需要服务,向服务中心查询。服务中心返回一个可用的服务。

Nacos 实现微服务的注册与发现

注册 (Registration):

  • 服务提供者(Provider) 启动时,会通过 Nacos 客户端库(例如 Spring Cloud Alibaba Nacos Discovery)向 Nacos Server 发送自己的 IP 地址、端口、服务名称以及其他元数据信息 。
  • Nacos Server 会接收这些信息,并将该服务实例存储在其服务注册表中 。
  • 服务实例会定期向 Nacos Server 发送心跳,以表明自己仍然存活和可用 。

发现 (Discovery):

  • 服务消费者(Consumer) 在启动时或者需要调用某个服务时,会向 Nacos Server 查询目标服务的所有可用实例列表 。

  • Nacos Server 会返回该服务当前所有健康的服务实例的 IP 地址和端口列表给消费者 。

  • 消费者会缓存这份服务列表,并定期从 Nacos Server 同步最新的服务实例状态(包括实例的上下线、健康状况等) 。
    核心配置 (application.properties 或 application.yml):

服务提供者和消费者都需要配置 Nacos Server 的地址:

Properties
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
(注意:8848 是 Nacos API 服务的默认端口)

服务提供者和消费者都需要配置自己的服务名称:

spring.application.name=your-service-name
(例如,您的 ProviderApplication 使用 spring-cloud-provider)

部署多个同名实例实现负载均衡

我的git
https://github.com/cahd12/Microservice-registration-and-discovery-

实现原理:
  • 多个 Provider 实例注册:启动多个 ProviderApplication 实例,但它们都使用相同的 spring.application.name(例如 spring-cloud-provider)注册到 Nacos 。

  • 不同的端口:为了在同一台机器上运行多个实例,每个 Provider 实例必须配置一个不同的 server.port 。

  • Nacos 维护多实例列表:Nacos Server 会将这些具有相同服务名的、不同 IP:Port 的实例都记录下来,并监控它们的健康状态 。

  • 客户端负载均衡:当 ConsumerApplication 调用 spring-cloud-provider 时,其内部的 @LoadBalanced RestTemplate (或 Feign 客户端) 会从 Nacos 获取 spring-cloud-provider 的所有健康实例列表 。然后,它会根据内置的负载均衡算法(如轮询、随机等)选择一个实例来发送请求 。

部署步骤:
  1. 修改 Provider 服务的端口:
  • 在 ProviderApplication 模块的 application.properties 文件中,确保 spring.application.name 配置为服务名称(例如 spring-cloud-provider),并设置 spring.cloud.nacos.discovery.server-addr 指向 Nacos 服务。

  • 关键是为每个要启动的实例指定不同的 server.port。

用jar包启动多个实例
# 启动第一个实例
java -jar your-provider-application.jar --server.port=8070

# 启动第二个实例
java -jar your-provider-application.jar --server.port=8071

# 启动第三个实例
java -jar your-provider-application.jar --server.port=8072
Consumer 服务的配置:
  • ConsumerApplication 的 application.properties 也需要配置 spring.application.name 和 spring.cloud.nacos.discovery.server-addr。

  • 它的 server.port 需要与 Nacos Console (8080) 和 Provider 实例 (8070, 8071, 8072等) 都不同(例如 8082)。

  • Consumer 调用时只需使用服务名:代码中通过 restTemplate.getForObject("http://spring-cloud-provider/echo/" + str, String.class) 调用,无需指定 IP 或端口.

验证负载均衡:
  • 访问 Nacos UI (http://127.0.0.1:8080/),在“服务列表”中查看 spring-cloud-provider,确认有多个实例(如 127.0.0.1:8070, 127.0.0.1:8071 等)注册成功 。

  • 多次访问 ConsumerApplication 的接口(例如 http://127.0.0.1:8082/echo/test_lb),并观察每个 ProviderApplication 实例的控制台日志。你会看到请求被分发到不同的 Provider 实例上,从而验证负载均衡效果 。

常用服务注册发现组件
  • ZooKeeper:
  • Etcd:

负载均衡器

posted @ 2025-07-26 01:06  浪矢-CL  阅读(30)  评论(0)    收藏  举报