目录:
(1)SpringCloud 和 SpringBoot 的区别和关系?
(2)SpringCloud 由哪些组件组成?
(3)SpringCloud 与 Dubbo 的区别?
(4)Eureka 和 ZooKeeper 的区别?
(5)Eureka 工作原理?
(6)Feign 工作原理?
(7)什么是 Hystrix?
(8)什么是服务熔断?什么是服务降级?
(9)什么是服务雪崩效应?
(10)微服务之间如何独立通讯?
(1)SpringCloud 和 SpringBoot 的区别和关系?
• Spring Boot 专注于快速方便的开发单个个体微服务。
• Spring Cloud 是关注全局的微服务协调整理治理框架以及一整套的落地解决方 案,它 将 Spring Boot 开发的 一个个单体微服务整合并管理起来,为各个微 服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线等的 集成服务。
• Spring Boot 可以离开 Spring Cloud 独立使用,但是 Spring Cloud 离不开 SpringBoot ,属于依赖的关系。
总结: Spring Boot 专注于快速,方便的开发单个微服务个体。 SpringCloud 关注 全局的服务治理框架。
(2)SpringCloud 由哪些组件组成?
• Eureka 或 Nacos:服务注册与发现
• Zuul 或 SpringCloudGateway:服务网关
• Ribbon:客户端负载均衡
• Feign:声明性的 Web 服务客户端
• Hystrix:断路器
• SpringCloudConfig 或 Nacos:分布式统一配置管理
(3)SpringCloud 与 Dubbo 的区别?

服务调用方式:
• dubbo 是 RPC
• springcloud 是 Rest Api
注册中心:
• dubbo 是 zookeeper;
• springcloud 是 eureka,也可以是 zookeeper、nacos
服务网关:
• dubbo 本身没有实现,只能通过其他第三方技术整合;
• springcloud 有 Zuul 路由网关,作为路由服务器,进行消费者的请求分发; springcloud 支持断路器,与 git 完美集成配置文件支持版本控制,事物总线实 现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
(4)Eureka 和 ZooKeeper 的区别?
• ZooKeeper 中的节点服务挂了就要选举,在选举期间注册服务瘫痪,虽然服务最 终会恢复,但是选举期间不可用的, 选举就是改微服务做了集群,必须有一台 主其他的都是从。
• Eureka 各个节点是平等关系,服务器挂了没关系,只要有一台 Eureka 就可以保 证服务可用,数据都是最新的。如果查询到的数据并不是最新的,就是因为 Eureka 的自我保护模式导致的。
• Eureka 本质上是一个工程,而 ZooKeeper 只是一个进程。
• Eureka 可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像 ZooKeeper 一样使得整个注册系统瘫痪。
• ZooKeeper 保证的是 CP,Eureka 保证的是 AP
(5)Eureka 工作原理?
• EurekaServer:服务注册中心(可以是一个集群),对外暴露自己的地址
• 提供者:启动后向 Eureka 注册自己信息(地址,提供什么服务)
• 消费者:向 Eureka 订阅服务,Eureka 会将对应服务的所有提供者地址列表发送 给消费者,并且定期更新
• 心跳(续约):提供者定期通过 http 方式向 Eureka 刷新自己的状态(每 30s 定时 向 EurekaServer 发起请求)
(6)Feign 工作原理?
1. 主程序入口添加了@EnableFeignClients 注解开启对 FeignClient 扫描加载 处理。根据 FeignClient 的开发规范,定义接口并加@FeignClientd 注解。
b) 当程序启动时,会进行包扫描,扫描所有@FeignClients 的注解的类,并 且将这些信息注入Spring IOC容器中,当定义的Feign接口中的方法被调 用时,通过 JDK 的代理方式,来生成具体的 RequestTemplate.
c) 当生成代理时,Feign 会为每个接口方法创建一个 RequestTemplate 对象, 改对象封装可 HTTP 请求需要的全部信息,如请求参数名,请求方法等 信息都是在这个过程中确定的。
4. 然后 RequestTemplate 生成 Request,然后把 Request 交给 Client 去处理, 这里的 Client 可以是 JDK 原生的 URLConnection、Apache 的 HttpClient、 也可以是 OKhttp,最后 Client 被封装到 LoadBalanceClient 类,这个类结 合 Ribbon 负载均衡发起服务之间的调用。
(7)什么是 Hystrix?
在分布式系统,我们一定会依赖各种服务,那么这些个服务一定会出现失败的情况, 就会导致雪崩,Hystrix 就是这样的一个工具,防雪崩利器,它具有服务降级,服务 熔断,服务隔离,监控等一些防止雪崩的技术。 Hystrix 有四种防雪崩方式:
• 服务降级:接口调用失败就调用本地的方法返回一个空
• 服务熔断:接口调用失败就会进入调用接口提前定义好的一个熔断的方法,返 回错误信息
• 服务隔离:隔离服务之间相互影响
• 服务监控:在服务发生调用时,会将每秒请求数、成功请求数等运行指标记录下 来。
(8)什么是服务熔断?什么是服务降级?
• 熔断机制: 是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用 或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速 返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。 在 SpringCloud 框架里熔断机制通过 Hystrix 实现,Hystrix 会监控微服务间调用 的状况,当失败的调用到一定阈值,缺省是 5 秒内调用 20 次,如果失败,就 会启动熔断机制。
• 服务降级: 一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再 被调用,此时客户端可以自己准备一个本地的 fallback 回调,返回一个缺省值
(9)什么是服务雪崩效应?
雪崩效应是在大型互联网项目中,当某个服务发生宕机时,调用这个服务的其他服 务也会发生宕机,大型项目的微服务之间的调用是互通的,这样就会将服务的不可 用逐步扩大到各个其他服务中,从而使整个项目的服务宕机崩溃
(10)微服务之间如何独立通讯?
• 同步通信:Dubbo 通过 RPC 远程过程调用、springcloud 通过 REST 接口 json 调用 等。
• 异步通信:消息队列,如:RabbitMq、ActiveM、Kafka 等。