1231 字
6 分钟
微服务入门.md
2025-11-14
无标签

Spring CLoud概览#

1. 什么是微服务?#

单体-SOA-微服务 有什么区别?
soa是粗粒度+ESB统一调度
微服务是细粒度+各种管理

2.微服务带来了哪些好处和哪些挑战?#

- 好处:
1. 高扩展、高可用
2. 技术自由,快速迭代
- 挑战:
1. 系统复杂性增加
2. 服务间通信开销
3. 数据一致性和事务管理:分布式事务
4. 部署和运维复杂性
5. 团队沟通和协作成本
6. 服务治理和版本管理: 服务的注册发现、负载均衡、 监控和故障处理等。
7. 分布式系统的复杂性
总结是微服务用复杂度换灵活性。

3.现在有哪些流行的微服务解决方案?#

方案有什么区别?
Dubbo体系:高性能rpc框架,主要提供高性能远程过程调用,其他的服务治理功能依赖其他第三方实现
注册中心 zookeeper
配置中心
远程调用 dubbo
负载均衡
服务容灾
服务网关
链路追踪
分布式事务
Spring Cloud Netflix:早期的微服务框架,现在闭源了,不推荐
注册中心 eureka
配置中心 spring cloud config
负载均衡 Ribbon
服务容灾 Hystrix
服务网关 Zuul
链路追踪 zipkin
分布式事务
Spring Cloud Alibaba: 提供了一整套微服务解决方案全家桶
注册中心 Nacos
配置中心 Nacos
远程调用 openfeign
负载均衡 Loadbalance/Ribbon
服务容灾 Sentinel
服务网关 Spring Cloud Gateway
链路追踪 SkyWalking
分布式事务 seata

4.说下微服务有哪些组件?#

注册中心: Eureka、Nacos
配置中心: Spring Cloud Config、Nacos
远程调用: Dubbo、OpenFeign
负载均衡: Dubbo、Ribbon、Loadbalance
服务容灾: Hystrix、Sentinel
服务网关: Zuul、Spring Cloud Gateway
链路追踪: zipkin、SkyWalking
分布式事务: Seata

注册中心#

5. 注册中心是用来干什么的?#

服务注册
服务发现
负载均衡
故障恢复
服务治理:动态扩缩容、服务路由、灰度发布

6.SpringCloud可以选择哪些注册中心?#

zookeeper:一般搭配dubbo一起用
eureka:闭源了,不推荐用
nacos: 好用,还能作为配置中心

7.说下Eureka、 Zookeeper、 Nacos的区别?#

主要区别是zookeeper支持CP、eureka支持AP、Nacos支持AP和CP
CAP理论:
C:一致性,所有节点在同一时间看到的数据是一致的
A:可用性,每个请求都能收到响应,无论是否成功
P:分区容错性,系统在遇到网络分区故障时,仍然能正常运行
为什么要选择Nacos而不是zookeeper或eureka?
1. 支持服务发现+配置管理
2. AP和CP都支持
3. 多数据中心与高可用
4. 多租户和细粒度隔离
5. 开箱即用

8.Nacos注册中心原理了解吗?#

1.服务注册
客户端注册ip端口 服务名
服务端存储信息到注册表
2.健康检查
客户端心跳或者服务端主动探测
3.服务发现
客户端全量拉取或者服务端增量推送

9.Nacos怎么保证高可用?#

Nacos集群
心跳检测
故障自动重试其他节点
多级数据持久化:客户端,服务端,本地,mysql都存储了数据

配置中心#

10. 为什么微服务需要配置中心?#

11.Spring Cloud可以选择哪些配置中心?#

1. Spring Cloud Config
2. Nacos

12.Nacos配置中心的原理了解吗?#

三层存储:NameSpace(租户/环境隔离)-> Group(项目分组)-> Data ID(配置文件)
客户端长轮询拉去和服务器变更推送
原理:服务端配置->客户端拉取->服务端更新->客户端长轮询拉取或服务端变更推送

13.Nacos配置中心的长轮询机制?#

客户端拉取配置的请求,如果配置没变化,会先不返回请求,而是定时30秒,中间如果有变更,会立刻响应,更新配置。这种方式,降低了服务端的压力,且实时性高。

14.能说下HTTP和RPC的区别?#

http是网络通信协议,如浏览器访问网页
rpc是远程调用框架,像调用本地函数一样调用远程服务
rpc性能高但是更复杂,http更通用但是效率比较低

15.那Feign和Dubbo的区别呢?#

feign基于http实现远程调用
dubbo基于rpc实现远程调用

16.说一下Feign?#

feign是基于注解的http客户端,能够像调用本地方法一样发送请求
底层是RestTemplate+Ribbon/LoadBalancer

17.为什么Feign第一次调用耗时很长?#

第一次调用,需要从注册中心获取服务列表,这个过程会增加首次调用的耗时。
可以通过启动时调用一次,预热Feign客户端来解决。

18.Feign怎么实现认证传递?#

拦截器 RequestInterceptor 中认证信息添加到请求头中。
微服务入门.md
https://www.fdssong.js.cn/posts/微服务入门/
作者
FDSSONG
发布于
2025-11-14
许可协议
CC BY-NC-SA 4.0