文章目录
- 前言
- SpringCloud是什么?
- SpringCloud 在 2018 年,技术体系
- SpringCloud 在 2020 年,“移除”了技术体系
- SpringCloud 在 2024 年,移除了技术体系
- SpringCloud 2024年,技术体系
- 服务注册与发现 模块
- 1、Eureka
- 2、Consul - 官网 Java 推荐
- 3、Etcd (适用 Go 语言)
- 4、Nacos - 主流
- 服务调用和负载均衡
- 1、Ribbon - GG了,不关注
- 2、openFeign
- 3、LoadBalancer
- 分布式事务
- 1、Seata - 主流
- 2、LCN
- 3、Hmily
- 服务熔断和降级
- Hystrix - 不再使用,知道就行
- Circuit Breaker 断路器
- Sentinel - 哨兵 (主流)
- 服务链路追踪
- Sleuth + Zipkin 【已过期,了解即可】
- Micrometer Tracing - 重点
- 服务网关
- Zuul - 过时,了解即可
- Gate Way 重点
- 分布式配置管理
- Config + Bus 了解即可
- consul
- Nacos
- 汇总
前言
本专栏文章的内容均来自于B站up主“尚硅谷”的教程视频。
博主的博客,你可以理解为是博主在做笔记,方便复习。
希望也可以帮到你们。
SpringCloud是什么?
基于 Spring Boot 的 Spring 集成应用程序.
它利用 Spring Boot 的开发便利性简化了分布式系统的开发,提供与外部系统的集成。
如服务注册与发现、服务调用,服务熔断,负载均衡,服务接口调用,消息队列,配置中心管理,服务路由,服务监控,全链路追踪,自动化构建部署,数据流操作。
SpringCloud是一个由许多子项目组成的综合项目,各子项目有不同的发布节奏。
换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。
Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
注意!上图中的每一个功能,都有对应的 Cloud 组件
但不是每一个都需要,我们只需要关注主要功能的组件即可。
以下7个技术,是构成现在主流分布式微服务架构的重要支撑体系。
黑色名称的组件,都是来自 SpringCloud。
红色名称的组件,都是来自 SpringCloud - Alibaba。
SpringCloud 在 2018 年,技术体系
我们回过头来看 2018 年,技术体系又有哪些?
值得注意的是:这七个主键中有4个都是 NETFLIX OSS (网飞)公司提供的、
即便到现在,SpringCloud Netflix 依然存在
但是,在不就之后,NETFLIX OSS 就被移除了。原因:
更新版本没有什么大惊小怪的,但是本次更新却正式开启了SpringCloudNetflix体系的终结进程。Netflix公司是目前微服务落地中最成功的公司。
它开源了诸如Eureka、Hystrix、Zuul、Feign、Ribbon等等广大开发者所知微服务套件,统称为Netflix OSS。
在当时 NetflixOSS 成为微服务组件上事实的标准。
但是微服务兴起不久,也就是在2018年前后Netflix公司宣布其核心组件Hystrix、Ribbon、Zuul、Eureka等进入维护状态,不再进行新特性开发,只修BUG。
这直接影响了 SpringCloud 项目的发展路线,Spring官方不得不采取了应对措施,在2019年的在SpringOne2019大会中,SpringCloud 官方宣布Spring Cloud Netflix项目进入维护模式,并在2020年移除相关的NetflixOSS组件。
SpringCloud 在 2020 年,“移除”了技术体系
那么,在2020年之后,原先的SpringCloud架构中组件被“干死”了?
上面这九个,是被“移除”(维护)的。
但是,注意!
“移除”(维护):
停更(新)不停用
进一步来说:
1、被动修复Bugs:除非是重大bug,可能会修复,否则不理会
2、不在接受合并请求
3、不再发布新版本
SpringCloud 在 2024 年,移除了技术体系
注意,这是被 remove 掉了,和前面的维护是2个意思。
这里是指这些技术,在新版本的SpringCloud中舍弃了,不再使用。
也就是说,没有学习的必要了。
SpringCloud 2024年,技术体系
服务注册与发现 模块
我们发现有2个: Consul,Alibaba Nacos
那么,服务注册体系中,只有这两个体系?
1、Eureka
由于 NetFlix 的摆烂,与其相关的技术体系,基本全军覆没。
可以用,但不推荐。
2、Consul - 官网 Java 推荐
首先,在功能方面 比 Eureka 更强大!
3、Etcd (适用 Go 语言)
这也是目前比较主流的服务测试体系之一。
但是,它是 go 语言 编写的。
键值型 服务注册中心
4、Nacos - 主流
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
Kubernetes Service
gRPC & Dubbo RPC Service
Spring Cloud RESTful Service
相信很多人接触过 SpringCloud 项目的人,都对它很熟悉。
基本上,我遇到的 SpringCloud 项目,都是使用 Nacos 的。
Nacos 的关键特性包括:
服务发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或 HTTP&API查找和发现服务。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。
动态配置服务
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
动态 DNS 服务
动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.
服务及其元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
服务调用和负载均衡
1、Ribbon - GG了,不关注
2、openFeign
Ribbon 的替代品之一
是目前远程微服务调用,面向接口编程,需要掌握了解到的。
应用场景:SpringCloud项目,在登录时,通过 Feign 组件调用用户信息接口,获取用户信息,生成token令牌
3、LoadBalancer
Ribbon 的替代品之一,属于 SpringCloudCommons、
点击 绿色文本(微服务)
分布式事务
分布式,是 微服务 重要构成部分,也是面试常见问题之一。
1、Seata - 主流
Apache Seata(incubating) 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
2、LCN
LCN框架在2017年6月份发布第一个版本,从开始的1.0,已经发展到了5.0版本。LCN名称是各取如下单词首字母得来的。锁定事务单元(lock)、确认事务模块状态(confirm)、通知事务(notify) 。
5.0以后由于框架兼容了LCN、TCC、TXC三种事务模式,为了避免区分LCN模式,特此将LCN分布式事务改名为TX-LCN分布式事务框架。
LCN并不生产事务,LCN只是本地事务的协调工
TX-LCN定位于一款事务协调性框架,框架其本身并不操作事务,而是基于对事务的协调从而达到事务一致性的效果。
3、Hmily
Hmily 一款金融级的分布式事务解决方案,支持 Dubbo、Spring Cloud、Motan ,GRPC,BRCP等 RPC 框架进行分布式事务。
服务熔断和降级
Hystrix - 不再使用,知道就行
Spring Cloud Hystrix 是一款优秀的服务容错与保护组件,也是 Spring Cloud 中最重要的组件之一。
Spring Cloud Hystrix 是基于 Netflix 公司的开源组件 Hystrix 实现的,它提供了熔断器功能,能够有效地阻止分布式微服务系统中出现联动故障,以提高微服务系统的弹性。Spring Cloud Hystrix 具有服务降级、服务熔断、线程隔离、请求缓存、请求合并以及实时故障监控等强大功能。
在微服务系统中,Hystrix 能够帮助我们实现以下目标:
保护线程资源:防止单个服务的故障耗尽系统中的所有线程资源。
快速失败机制:当某个服务发生了故障,不让服务调用方一直等待,而是直接返回请求失败。
提供降级(FallBack)方案:在请求失败后,提供一个设计好的降级方案,通常是一个兜底方法,当请求失败后即调用该方法。
防止故障扩散:使用熔断机制,防止故障扩散到其他服务。
监控功能:提供熔断器故障监控组件 Hystrix Dashboard,随时监控熔断器的状态。
Circuit Breaker 断路器
这是目前主流使用,非常重要,需要熟悉掌握
几乎 将 Hystrix 平替了。
Circuit Breaker 就是 接口,类似与 Java 的 List
其中 Resilience4J 重点掌握,其中 J 就是代表Java,这是为Java准备的。
Sentinel - 哨兵 (主流)
… Sentinel定位是分布式系统的流量防卫兵。目前互联网应用基本上都使用微服务,微服务的稳定性是一个很重要的问题,而限流、熔断降级是微服务保持稳定的一个重要的手段。
Sentinel有哪些特征?
丰富的应用场景。控制突发流量在可控制的范围内,消息削峰填谷,集群流量控制,实时熔断下游不可用的应用等等。
完备的实时监控。Sentinel 提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态。Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
完善的 SPI 扩展点。Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等
服务链路追踪
通俗来说:
服务链路追踪,就是记录 某个方法,在某个时刻被谁调用,执行时间多长。
并且,在执行的过程中,是否顺畅。
针对这些数据进行图形展示,方便监控。
Sleuth + Zipkin 【已过期,了解即可】
我们可以看到 Sleuth 已经被 Micrometer Tracing 所代理了。
Micrometer Tracing - 重点
2016年,Sprin Cloud 团队开发了一个追踪库,能够极大地帮助众多开发者。
该库被称为Spring Cloud Sleuth。
Spring 团队意识到追踪功能可以与Spring Cloud 分离出来,于是创建了Micrometer Tracing项目,这本质上就是 Spring 无关的版本的 Spring Cloud Sleuth。
Micrometer Tracing 于2022年11月发布了1.0.0正式版,并且此后一直在不断改进
故米追踪为最常用的追踪库提供了简便的接口,让您在不受供应商限制的情况下检测基于jvm的应用程序代码。
它的目的是在最大限度地提高跟踪工作的可移植性的同时,为跟踪收集活动增加很少甚至没有开销。
服务网关
等价于 Nginx,但是 地位 和 环境部署 是不一样的。
Zuul - 过时,了解即可
Spring Cloud Zuul 是 Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能
API 网关为微服务架构中的服务提供了统一的访问入口,客户端通过 API 网关访问相关服务。
API 网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。
它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。
Gate Way 重点
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
分布式配置管理
Config + Bus 了解即可
consul
Nacos
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
Kubernetes Service
gRPC & Dubbo RPC Service
Spring Cloud RESTful Service
相信很多人接触过 SpringCloud 项目的人,都对它很熟悉。
基本上,我遇到的 SpringCloud 项目,都是使用 Nacos 的。
Nacos 的关键特性包括:
服务发现和服务健康监测
Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或 HTTP&API查找和发现服务。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。
动态配置服务
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
动态 DNS 服务
动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。
Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.
服务及其元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。