SpringCloud面试题

1 Springcloud核心组件及其作用

1.1 Eureka: 服务注册与发现
注册:每个服务都向Eureka登记自己提供服务的元数据,包括服务IP地址,端口号,版本号,通信协议等。eureka将各个服务维护在一个服务清单中(双层Map,第一层key服务名,第二层key是实例名,value是服务地址加端口)。同时对服务维持心跳,剔除不可用的服务。
发现:eureka注册的服务之间调用不需要指定服务地址,而是通过服务名向注册中心咨询,并获取所有服务实例清单(缓存到本地),然后实现服务的请求访问。
1.2 Ribbon:服务间发起请求时,基于Ribbon做负载均衡。从一个服务的多台机器中选择一台,Ribbon是通过发起http请求进行调用 。
1.3 Feign: 基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求,简化服务间的调用。在引入Spring cloud feign后,我们只需要创建一个接口并用注解的方式来配置,即完成对服务提供方的接口绑定。调用远程就像调用本地服务一样。
1.3 Hystrix: 发起请求是通知Hystrix的线程池来走,不同的服务走不同的线程池,实现不同服务调用的隔离,通过统计接口超时次数返回默认值,实现服务熔断和降级。
1.4 Zuul: 如果前端,移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务,通过与Eureka进行整合,将自身注册为Eureka下的应用。Zuul还提供一套过滤器机制,开发者可以指定哪些规则的请求需要执行校验逻辑,通过了才会被路由到具体的服务实例上,否则就返回错误。

 

2 SpringCloud 和 Dubbo区别

SpringCloud是一个微服务框架,提供微服务中很多功能组件。基于RestFul API。
Dubbo是一个RPC调用框架,核心是解决服务调用间的问题。


3 SOA,分布式,微服务

3.1 SOA - 是一种面向服务的架构,系统的所有服务都注册在总线上,当调用服务时,从总线上查找服务信息。ESB(企业服务总线)
3.2 分布式 - 是指将单体架构的各个部分拆分,然后部署不同的机器或进程中。
3.3 微服务 - 是一种更彻底的面向服务的架构,将系统中各个功能个体抽成一个个小的应用程序,基本保持一个应用对应的一个服务架构。主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有Spring cloud、Dubbo等。

4 集群和分布式的区别

集群是个物理形态,分布式是个工作方式。
    •    分布式:一个业务分拆多个子业务,部署在不同的服务器上
    •    集群:同一个业务,部署在多个服务器上

 

5 高并发场景下如何实现系统限流

三把利器来保护系统:缓存、降级和限流
限流一般需要结合容量规划和压测,当外部请求接近或达到系统最大阈值时,触发限流,采取其他的手段降级,保护系统。常见降级策略包括延迟处理,拒绝服务,随机拒绝等。
5.1 计数器法 - 临界点问题,已经不用了
5.2 滑动窗口计数法 - 将时间划分为细粒度的区间
漏桶算法:任意速率流入,从出口处限制请求速率,无法应对突发流量,相当于一个空桶+固定处理线程
令牌桶算法:假设一个大小恒定的桶,这个桶容量和设定阈值有关,桶里放很多令版,通过一个固定的速率,往里面放入令牌,如果桶满了,就把令牌丢掉。

6 Hystrix实现机制

分布式容错框架

  • 阻止故障的连锁反应,实现熔断
  • 快速失败,实现降级
  • 提供实时监控和告警

资源隔离:线程隔离,信号量隔离

线程隔离:Hystrix会给每个command分配一个单独的线程池,在里德单个服务调用 时就可以独立的线程池里面进行,而不会对其他线程池造成影响。

信号量隔离:客户端向依赖服务发起请求时,首先获取一个信号量才能发起调用 ,由于信号量的数量有限,当并发请求量超过信号量个数时,后续的请求都会拒绝。

 

posted @ 2022-11-28 14:05  NingShare  阅读(404)  评论(0编辑  收藏  举报