Spring Cloud Alibaba介绍
官方文档:https://sca.aliyun.com/docs/2023/overview/what-is-sca/
Spring Cloud Alibaba 是阿里开源的基于 Spring Cloud 的分布式微服务解决方案,它将阿里的中间件产品与 Spring Cloud 框架无缝集成,为开发者提供简单、便捷的一站式微服务开发解决方案。
依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Spring Cloud 微服务体系
Spring Cloud 是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建。 Spring Cloud 提供以微服务为核心的分布式系统构建标准。
Spring Cloud本身并不是一个开箱即用的框架,它是一套微服务规范,共有两代实现。
1.Spring Cloud Netflix 是Spring Cloud的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
2.Spring Cloud Alibaba 是Spring Cloud的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。
Spring Cloud Alibaba 定位
注册配置中心–Nacos
服务治理架构
服务治理(Service Governance)是指在微服务架构中管理和控制服务的生命周期、状态、质量和安全性的一系列技术和策略。
注册中心原理
服务治理中的三个角色分别是什么?
1.服务提供者:暴露服务接口,供其它服务调用;
2.服务消费者:调用其它服务提供的接口;
3.注册中心:记录并监控微服务各实例状态,推送服务变更信息。
消费者如何知道提供者的地址?
·服务提供者会在启动时注册自己信息到注册中心,消费者可以从注册中心订阅和拉取服务信息。
消费者如何得知服务状态变更?
·服务提供者通过心跳机制向注册中心报告自己的健康状态,
当心跳异常时注册中心会将异常服务剔除,并通知订阅了该服务的消费者。
当提供者有多个实例时,消费者该选择哪一个?
·消费者可以通过负载均衡算法,从多个实例中选择一个。
Nacos介绍
官方文档:https://nacos.io/docs/latest/what-is-nacos/
Nacos 是阿里巴巴推出的一款用于服务发现、配置管理和服务治理的开源平台。它在微服务架构中起着重要作用,尤其是用于服务的注册和发现、动态配置管理,以及支持 DNS 和 RPC 的服务健康检查等功能。
Nacos 的关键特性
1.服务注册和发现
服务发现和注册:
1.Nacos支持基于DNS和HTTP的服务发现。服务提供者启动时,会将自己的服务信息注册到 Nacos,消费者则通过 Nacos 查找可用服务。
2.通过实时心跳机制和健康检查,确保服务的可用性。
2.动态配置服务
动态配置管理
1.Nacos 提供集中化的配置管理,支持动态更新。应用在运行时可以从 Nacos 中获取并实时更新配置,无需重启应用。
2.支持多环境(如开发、测试、生产)的配置管理。
3.实时健康监控
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。
若服务不可用,Nacos 会自动将其从可用列表中移除,确保系统稳定。
4.动态DNS服务
动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
5.易于集成:
Nacos 很容易与 Spring Cloud、Dubbo 等微服务框架集成,提供更加便捷的开发体验。
Nacos入门示例
服务注册与发现
1.环境准备
1.1下载Nacos
https://github.com/alibaba/nacos/releases
1.2启动 Nacos
解压并在终端中运行以下命令启动 Nacos:
sh startup.sh -m standalone
1.3创建 Spring Boot 项目
可以使用 Spring Initializr 来生成项目。
选择 Spring Boot 版本 2.6.0 或以上,添加以下依赖:
Spring Web
Nacos Discovery
2.服务注册与发现依赖
在 pom.xml 中,添加 Nacos Discovery 依赖:
<dependencies>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
&l