本片从宏观的角度,说明微服务的重要概念,后续会有实际操作,怎么集成开发、原理等。
网关
注册中心
负载均衡
常见的负载均衡解决方案:
集中式:客户端和服务器之间,通过独立的设施分发请求,如: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