微服务架构和实践架构设计基础知识

应对接口级故障:服务降级、熔断、限流、排队

2018-08-07  本文已影响22人  zlcook

解决思路

解决策略

降级

系统将某些不重要的业务或接口的功能降低,可以只提供部分功能,也可以完全停到所有所有不重要的功能。降级的思想是丢车保帅。

熔断

降级是应对系统自身的故障,而熔断的目的是应对外部系统的故障。比如A服务的X功能依赖B服务的某个接口,当B服务接口响应很慢时,A服务X功能的响应也会被拖慢,进一步导致了A服务的线程都卡在了X功能上,A服务的其它功能也会卡主或拖慢。此时就需要熔断机制,即A服务不在请求B这个接口,A服务内部发现B接口就直接返回错误,从而避免整个A服务被拖慢。

限流

限流:只允许系统能够承受的访问量进来,超出的会被丢弃。

排队

排队方式来应对接口级故障的方式是:让用户等待一段时间,而不是像限流方式直接拒绝用户。从体验上来讲,虽然用户没有很快得到拒绝响应,但是如果等待时间过长,体验也不是很好。(但是对于一些请求,等待比直接拒绝要好,比如支付请求,排队总比直接拒绝好,因为直接拒绝用户就有可能不买了)

1号店双11秒杀排队系统

实现思路:蓝色区域是排队系统

【排队模块】
负责将用户的请求以FIFO的方式存入队列中,不同商品的秒杀请求放在不同的队列中,队列大小可以根据秒杀商品数量自行定义。
【调度模块】
负责动态调度排队模块中的请求到服务模块中。动态性体现在:会根据服务模块的当前处理能力控制拉取请求速度,如果服务模块的处理能力有空闲就提升拉取请求速度,否则降慢速度。
【服务模块】
负责调用真正的业务来处理请求,并获取返回结果,再调用排队模块的接口写回业务处理结果。

案例

如果你来设计一个整点限量秒杀系统,包括登录、抢购、支付(依赖支付宝)等核心功能,你会如何设计接口级的故障应对手段?

内容参考:《从0开始学架构》
微服务接口限流的设计与思考(附GitHub框架源码)

上一篇下一篇

猜你喜欢

热点阅读