# 微服务

# 1.rpc和http的区别

答案

1.用途不同: http一般用于web浏览器和服务器之间的通信。rpc一般用于跨主机的方法调用

2.服务发现:http一般通过dns服务进行服务发现,而rpc通过专门的中间服务保存服务名和Ip地址(如Consul,etcd,zk)

3.底层链接形式:rpc中有一个链接池,发数据的时候从连接池中取一条出来,用完放回去下次再复用,有利于提高网络请求性能

4.传输的内容不同:http是使用的json传输数据,rpc用的protobuf传输数据

# 2.限流算法

答案

1.基于计数的限流算法:在固定时间窗口,每收到一个请求计数器+1,超过阈值后拒绝请求,到达下一个时间窗口后计数器清空

优点:实现简单,资源消耗少。 缺点:无法处理突发流量,无法解决突刺现象(一个时间窗口的末端和下一个时间窗口的始端,会导致请求数量超过阈值)

2.基于滑动窗口的限流算法:将时间分成多个固定大小的连续小窗口,随着时间的推进窗口向右滑动,使得窗口切换变得更加平滑

优点:平滑限流,适合突发流量。缺点:空间占用大,复杂性高

3.漏桶算法:桶有固定容量,桶上有固定的漏水口表示系统能处理请求的速度,当请求速率超过漏水速度,请求会被堆积起来

优点:流量稳定,可以防止系统负过载。缺点:无法处理突发流量缺乏弹性,资源利用率不高

4.令牌桶算法:桶有固定容量,定期向桶中放入令牌,请求到来时取令牌,没有令牌则拒绝请求

优点:允许突发流量,平滑限流 缺点:无法限制瞬时流量,内存占用大

# 3.熔断算法

答案

1.hystrix熔断算法:将熔断器的状态分为三种,关闭,开启,半开启。关闭状态是初始状态,当调用总数达到200,并且错误率超过50%(通过滑动窗口实现),则进入开启状态。开启状态会立即返回错误,当冷却时间到了之后会进入半开启状态。半开启状态会允许一定数量的请求取调用服务端,如果请求调用成功数量达到参数值,则进入关闭状态

2.google sre熔断算法:当请求总数>=K*请求成功数(K是熔断器的敏感参数),会打开熔断器,以max(0,请求总数-K*请求成功数)/(请求成功数+1)的概率被拒绝,从而实现自适应熔断

hystrix会导致如果服务出现波动,可能导致一段时间不可用。而 google sre的自适应性更强

# 4.负载均衡算法

答案

1.轮询

2.加权轮询

3.最少连接

4.一致性哈希

5.加权最少连接

# 5.单体架构和微服务架构

答案

1.单体架构就是将多个功能都写在一起,所有功能耦合在在一起,互相影响,不能单独开发和调试

2.微服务就是将单体架构的多个功能进行拆分成多个服务,每个服务都是一个独立运行的程序,服务之间相互独立,服务功能单一,一个服务可以调用其他服务的功能,实现复用

# 6.令牌桶底层设计

答案

每次请求的时候,根据上次添加令牌的时间与当前的时间差计算出需要添加多少的令牌,然后更新令牌总数,并且不能超过容量。如果令牌总数还充足,则请求成功,否则请求失败。并更新添加令牌的时间和令牌总数。

# 7.服务降级,熔断,限流

# 8.系统稳定性设计

答案

1.存储数据冗余,多副本。出问题自动切换

2.支持横向扩容,有突发流量自动扩容

3.对服务进行分级,对于非核心服务,在下游故障时通过拦截器自动熔断/人工 然后不再调用下游接口,走缓存 or 默认值 or配置的兜底数据。

4.配置限流策略,在大流量冲击下,保证服务不宕机

Last Updated: 2024/9/25 01:48:52