一、微服务
1.1 SpringCloud核心组件有哪些?分别有哪些作用?
- 服务注册与发现——Netflix Eureka、Nacos、Zookeeper
- 客户端负载均衡——Netflix Ribbon、SpringCloud LoadBalancer
- 服务熔断器——Netflix Hystrix、Alibaba Sentinel、Resilience4J
- 服务网关——Netflix Zuul、SpringCloud Gateway
- 服务接口调用——Netflix Feign、Resttemplate、Openfeign
- 链路追踪——Netflix Sleuth、Skywalking、Pinpoint
- 聚合Hystrix监控数据——Netflix Turbine
- 监控中心---- SpringBoot Admin
- 配置中心——Spring Cloud Config . Apollo、nacos
1.2 注册中心的原理是什么?
服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中获取服务列表来完成服务调用
1.3 eureka和zookeeper的区别?
zookeeper使用的CP,而eureka使用的是AP
选择可用性 A(Availability),选择一致性C(Consistency)
P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,这时候就形成了P(partition),也就是由于网络问题,将系统的成员隔离成了2个区域,互相无法知道对方的状态,这在分布式环境下是非常常见的。
1.4 SpringCloud和Dubbo有什么区别?
- dubbo是二进制传输,对象直接转成二进制,使用RPC通信。
SpringCloud是http传输,同时使用http协议一般会使用SON报文,json再转二进制,消耗会更大。- Dubbo只是实现了服务治理,而Spring Cloud下面有几十个子项目分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。
1.5 Ribbon负载均衡的原理?
1, Ribbon通过ILoadBalancer接口对外提供统一的选择服务器(Server)的功能,此接口会根据不同的负载均衡策略(IRule)选择合适的Server返回给使用者。
2, IRule是负载均衡策略的抽象,lLoadBalancer通过调用IRule的choose()方法返回Server
3,IPing用来检测Server是否可用,ILoadBalancer的实现类维护一个Timer每隔10s检测一次Server的可用状态
4, IClientConfig主要定义了用于初始化各种客户端和负载均衡器的配置信息,器实现类为DefaultClientConfiglmpl
1.6 微服务的熔断降级机制??
微服务框架是许多服务互相调用的,要是不做任何保护的话,某一个服务挂了,就会引起连锁反应,导致别的服务
也挂。Hystrix 是隔离、熔断以及降级的一个框架。如果调用某服务报错(或者挂了),就对该服务熔断,在5分
钟内请求此服务直接就返回一个默认值,不需要每次都卡几秒,这个过程,就是所谓的熔断。但是熔断了之后就会
少调用一个服务,此时需要做下标记,标记本来需要做什么业务,但是因为服务挂了,暂时没有做,等该服务恢复
了,就可以手工处理这些业务。这个过程,就是所谓的降级。
1.7 什么是Hystrix?实现原理是什么 ?
Hystrix是一个延迟和容错库,旨在隔离对远程系统、服务和第三方库的访问点,停止级联故障,并在不可避免发生故障的复杂分布式系统中实现快速恢复。主要靠Spring的AOP实现
实现原理:
正常情况下,断路器关闭,服务消费者正常请求微服务
一段事件内,失败率达到一定阈值,断路器将断开,此时不再请求服务提供者,而是只是快速失败的方法((断路方法)
断路器打开一段时间,自动进入“半开"状态,此时,断路器可允许一个请求方法服务提供者,如果请求调用成功,则关闭断路器,否则继续保持断路器打开状态。
断路器hystrix是保证了局部发生的错误,不会扩展到整个系统,从而保证系统的即使出现局部问题也不会造成系统雪崩