微服务常见面试题

1.SpringCloud常见组件有哪些?

SpringCloud包含的组件很多,有很多功能是重复的,其中最常见的组件包括:

注册中心组件:Eureka,Nacos等。

负载均衡组件:Ribbon

远程调用组件:OpenFeign

网关组件:Zuul,Gateway

服务保护组件:Hystrix,Sentinel

服务配置管理组件:SpringCloudConfig,Nacos

2.Nacos的服务注册表结构是怎样的?

Nacos采用了数据的分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。

对应到Java代码中,Nacos采用了一个多层的Map来表示。结构是Map<Stirng, Service>>,其中最外层Map的key就是namespaceId,值是一个Map。内层Map的key是group评价serviceName,值是Service对象。Service对象内部又是一个Map,key是集群名称,值是Cluster对象。而Cluster对象内部维护了Instance的集合。

3.Nacos如何支持数十万服务注册压力?

Nacos内部接收到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列就立即响应给客户端。然后利用线程池读取阻塞队列中的认为,异步来完成实例更新,从而提高并发写能力。

4.Nacos如何避免并发读写冲突问题?

Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。在更新拷贝列表时,使用服务做为锁对象。这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题。

5.Nacos与Eureka的区别有哪些?

接口方式:Nacos与Eureka都对外暴露了Rest风格的API接口,用来实现服务注册,发现等功能。

实例类型:Nacos的实例有永久和临时实例之分,而Eureka只支持临时实例。

健康检测:Nacos对临时实例采用心跳模式检测,对永久实例采用主动请求来检测;Eureka只支持心跳模式

服务发现:Nacos支持定时拉取和订阅推送两种模式;Eureka只支持定时拉取模式。

6.Sentinel的线程隔离与Hystix的线程隔离有什么差别?

Hystix默认是基于线程池实现的线程隔离,每一个被隔离的业务都要创建一个独立的线程池,线程过多会带来额外的CPU开销,性能一般,但是隔离性更强。

Sentinel是基于信号量(计数器)实现的线程隔离,不用创建线程池,性能较好,但是隔离性一般。

7.Sentinel的限流与Gateway的限流有什么差别?

限流算法对比

对比项滑动时间窗口令牌桶漏桶
能否保证流量曲线平滑不能,但窗口内区间越小,流量控制越平滑基本能,在请求量持续高于令牌生成速度时,流量平滑。但请求量在令牌生成速率上下波动时,无法保证曲线平滑能,所有请求进入桶内,以恒定速率放行,绝对平滑。
能否应对突增流量不能,突增流量,只要高出限流阈值都会被拒绝能,桶内积累的令牌可以应对突增流量能,请求可以暂存在桶内
流量控制精确度低,窗口区间越小,精度越高

限流算法常见的有三种实现:滑动时间窗口,令牌桶算法,漏桶算法。

Gateway则采用了基于Redis实现的令牌桶算法。

而Sentinel内部比较复杂

        默认限流模式是基于滑动时间窗口算法

        排队等待的限流模式则是基于漏桶算法

        而热点参数限流则是基于令牌桶算法

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值