spring微服务宏观概念

本片从宏观的角度,说明微服务的重要概念,后续会有实际操作,怎么集成开发、原理等。

网关
注册中心
负载均衡

常见的负载均衡解决方案:

集中式:客户端和服务器之间,通过独立的设施分发请求,如:nginx;

进程式:单个服务器内部,将请求分配给预先启动好的工作进程,如:ribbon。

想必大家都知道spring中是那种方案,但ribbon官方不在更新,目前官方推荐:Spring Cloud LoadBalancer。

使用场景:

1、当 gateway 识别出需要负载均衡请求资源时,由 gateway 调用 LoadBalancer 按策略选择出一个资源调用。

2、当服务内通过 feign(或者restTemplate等)调用集群时,也会触发负载均衡。

LoadBalancer 内置 随机策略 和 轮询策略;扩展策略有:不过需我们自己实现!

策略类型 描述
加权轮询/随机 根据实例的配置(CPU、内存)或性能为其分配权重,按权重分配流量。
最少连接数 跟踪每个服务实例的当前活跃请求数,将新请求转发到连接数最少的实例。
基于标签/元数据的路由 根据实例的元数据(如版本、区域)进行路由,实现灰度发布或同区域优先。
一致性哈希 对于缓存等场景,能将同一用户的请求总是转发到同一个后端实例。
最佳响应时间 根据实例的历史平均响应时间动态调整流量分配。

nacos中已经帮我们实现了:加权。

限流

配置中心

断路器

是一种容错机制,用于防止故障的扩散。在服务调用失败、超时、异常等情况下,能够快速失败并阻止进一步的失败请求发送到问题服务,从而防止整个系统因单个服务的故障而崩溃。

拟人化解释:

比如:你们家,你大舅开鞋厂,二舅开包厂,三舅开裤带厂,你们家给他们三家供货,提供皮革。这几天赶上皮革节,他们三家搞活动,大舅说我要3万张皮革,二舅说要1万张,三舅说给点边角料就行。你们开始24小时不停的生产,最终3口人全部累到,你这3个舅活动也没办完,提前结束。

这就是一个资源不可用,导致全面崩溃!

记住,断路器是加在调用方的;

当断路器感知,被调用方(资源方)不可用时,直接告诉自己不可用。

如果放在资源方,断路器无法感知自己不好用,就算感知了,怎么通知调用方,难道发送http请求?

有人会问:让调用方直接失败不就行吗?

也行,但这是限流。其实断路器可以理解为逆向限流!

采用断路器还是限流,看你们公司怎么考虑。

两个重要概念

降级:当发生错误时返回兜底数据。

熔断:当错误发生的结果达到设定的阈值时,直接返回兜底数据。

断路器应该加在那些服务上面?没必要每个都加吧

原则:就是你觉得,这个服务一定不能奔溃,那就在调用方加上断路器。

支付、靠近数据库的服务、就是越靠近资源的服务。

应具备那些功能

官网能持续维护;轻量化;资源占用低;可与spring feign天然集成;可兼容大众化的监控平台。

边外扩展

一般断路器都是在系统内部使用的,对外一般都是通过http框架去调用,容错方式和断路器类似,有的框架可以说就是,比如:Resilience4j

相关推荐
leagsoft_10035 小时前
上新!联软科技发布新一代LeagView平台,用微服务重塑终端安全
科技·安全·微服务
寒士obj5 小时前
分布式组件【ZooKeeper】
微服务·zookeeper
麦麦鸡腿堡5 小时前
Java的抽象类
java·开发语言
Java水解5 小时前
Go基础:Go语言中 Goroutine 和 Channel 的声明与使用
java·后端·面试
Chan166 小时前
流量安全优化:基于 Nacos 和 BloomFilter 实现动态IP黑名单过滤
java·spring boot·后端·spring·nacos·idea·bloomfilter
小小爱大王7 小时前
AI 编码效率提升 10 倍的秘密:Prompt 工程 + 工具链集成实战
java·javascript·人工智能
神龙斗士2407 小时前
继承和组合
java·开发语言
小蒜学长7 小时前
springboot基于JAVA的二手书籍交易系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端