微服务
微服务的基础构成
是一种架构模式实践,是分治算法的代表性应用。它具有分布式系统的代表性特征:分布性 ,并发性,异构性,可拓展性。
微服务架构的五大主要组件:
- 服务注册发现
- 负载均衡器
- 链路追踪
- 限流与熔断(保护应用本身)
- 日志收集与分析
服务注册与发现
概念
- 服务注册:服务进程向注册中心注册元数据
- 服务发现:用户向注册中心请求服务
服务注册/注销
心跳机制:定时上传与健康检查
注册中心自我保护:
服务发现
服务调用方 需要服务,向服务中心查询。服务中心返回一个可用的服务。
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 的所有健康实例列表 。然后,它会根据内置的负载均衡算法(如轮询、随机等)选择一个实例来发送请求 。
部署步骤:
- 修改 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:

浙公网安备 33010602011771号