1231 字
6 分钟
微服务入门.md
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 分布式事务 seata4.说下微服务有哪些组件?
注册中心: 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和CPCAP理论: 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. Nacos12.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/LoadBalancer17.为什么Feign第一次调用耗时很长?
第一次调用,需要从注册中心获取服务列表,这个过程会增加首次调用的耗时。可以通过启动时调用一次,预热Feign客户端来解决。18.Feign怎么实现认证传递?
拦截器 RequestInterceptor 中认证信息添加到请求头中。