微服务拷打第一讲!

1. Spring Cloud 5大组件有哪些?

早期 Spring Cloud 五大组件一般指 Eureka(注册发现)、Ribbon(负载均衡)、Feign(远程调用)、Hystrix(熔断降级)、Zuul(网关)。

现在新项目里更常见的是 Nacos、Spring Cloud LoadBalancer、OpenFeign、Sentinel 和 Gateway。

2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?

复制代码
服务提供者和消费者->解决的什么->心跳机制

服务注册发现指的是,在微服务架构里,服务提供者启动后把自己的服务名、IP、端口等信息注册到注册中心;服务消费者调用时不写死 IP,而是根据服务名从注册中心获取可用实例列表,再通过负载均衡选择一个实例调用。

它主要解决的是服务实例动态上下线、扩容缩容时,调用方不用手动维护服务地址的问题。

在 Spring Cloud 里,早期可以用 Eureka,现在也常用 Nacos。注册中心一般会通过心跳机制(服务实例主动发消息给注册中心)判断实例是否存活,如果长时间没有心跳,就会把实例从可用列表中剔除。

3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?

复制代码
注册中心,配置中心,临时实例,非临时实例,服务更改感知

Nacos 和 Eureka 都可以做服务注册发现,但 Nacos 的能力更完整一些。

Eureka 主要就是注册中心,服务实例通过心跳续约,消费者定时拉取服务列表;Nacos 除了注册发现,还可以做配置中心,这是项目里用得比较多的一个区别。

另外 Nacos 区分临时实例和非临时实例。临时实例一般也是服务实例上报心跳,异常后可以被删除;非临时实例更偏注册中心主动健康检查,异常时通常是标记不健康。

服务变更感知上,Nacos 支持推送,实例变化后消费者感知会更及时;Eureka 更偏客户端主动拉取。CAP 上,Eureka 更偏 AP,Nacos 支持 AP 和 CP 两种模式,具体和实例类型有关。

4. 你们项目负载均衡如何实现的?

复制代码
注册中心拿实例列表->远程调用->结合负载均衡组件发请求->策略

我们项目里的负载均衡主要是客户端负载均衡。比如订单服务调用用户服务时,不会写死某一台机器的 IP,而是通过服务名从注册中心拿到 user-service 的实例列表。

然后 OpenFeign 发起远程调用时,会结合负载均衡组件从多个实例里选择一个发请求。老版本 Spring Cloud 常用 Ribbon,现在新版本一般用 Spring Cloud LoadBalancer。

默认比较常见的是轮询策略,也就是多个实例轮流处理请求。

5. Ribbon负载均衡策略有哪些?

Ribbon 的负载均衡策略本质上就是从注册中心拿到的服务实例列表里选一台来调用。

常见的策略有轮询 RoundRobinRule,按顺序依次选择实例;

RandomRule 是随机选择;

RetryRule 是调用失败后在一定时间内重试其他实例;

WeightedResponseTimeRule 会根据响应时间分配权重,响应越快的实例被选中的概率越高;

还有 ZoneAvoidanceRule,会综合区域和实例可用性来选择,Ribbon 默认的也是这个策略。

6. 如果想自定义负载均衡策略如何实现?

复制代码
ribbon->IRule(全局)
ribbon->@RibbonClient(单独)
ribbon->配置文件(单独)
Spring Cloud LoadBalancer->ServiceInstanceListSupplier
->ReactorServiceInstanceLoadBalancer

如果是老版本 Ribbon,自定义负载均衡策略主要是围绕 IRule 来做。

简单一点,可以直接配置一个 IRule 的 Bean,比如返回 RandomRule,这样会改变默认的负载均衡策略。

如果只想对某个服务生效,可以用 @RibbonClient 指定服务名和单独的配置类,或者在配置文件里通过 服务名.ribbon.NFLoadBalancerRuleClassName 指定具体的 Rule 类。

如果是新版本 Spring Cloud LoadBalancer,一般是通过自定义 ReactorServiceInstanceLoadBalancer,或者调整 ServiceInstanceListSupplier 来实现自己的选择逻辑。

相关推荐
微订校园外卖平台3 小时前
同城外卖小程序开发:校园外卖系统四端架构与订单链路拆解
架构·外卖系统·本地生活·微订
m0_587383003 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
牛战士coding3 小时前
AI Agent 如何接入真实业务系统?订单助手三层架构完整拆解
人工智能·架构
收放扳机4 小时前
PCB收放板设备机械手架构选型参考——三轴/四轴/六轴/蜘蛛手对比
人工智能·科技·架构·自动化·制造·pcb工艺
九卷4 小时前
企业级Agent系统整体技术架构介绍
ai·架构·大模型·llm·agent·智能体
木子n15 小时前
软件架构设计实战-架构18.从Classic到Adaptive:SOA架构在MATLAB里的模样
架构·autosar·性能工程·服务化架构
陈陈CHENCHEN6 小时前
【Kubernetes】纯 IPv6 K8s 用 socat 打通 IPv4 服务
云原生·容器·kubernetes
孟健6 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
CCblandy8 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
阿里云云原生8 小时前
阿里云 AgentCore 产品负责人解读产品全景
云原生·agent