首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Spring Cloud Alibaba 系列之 Sentinel 熔断降级

一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。   现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。注意:Sentinel 1.8.0 对熔断降级特性进行了全新的改进升级。

01

Java服务异常排查定位大图

研发工程师日常的工作除了开发实现新需求之外,排查定位问题也是重要的组成部分。如果在发生线上故障的时能够快速定位线上bug并且修复bug,不仅是研发工程师技术能力的重要体现,同时也可以帮助线上及时止血避免平台故障进一步蔓延,从而导致影响用户体验或者产生不可挽回的资损。但是实际上很多研发工程师由于工作经验还不充足,导致经常在遇到问题的时候不知所措,不知道该如何分析排查定位问题。因此本文主要聚焦日常工作中经常遇到的异常场景,梳理了问题排查定位的思路大图,这样大家在实际项目中如果遇到类似的异常场景,可以按照思路大图进行问题排查定位解决,相信大家掌握了故障定位的分析套路之后就可以做到遇到问题时临危不乱。

02

HTTP状态码502与504的区别及解决思路

首先得搞清楚502错误和504错误的区别,以我比较熟悉的PHP为例,502是PHP-FPM(PHP的进程管理器没办法从进程池里找到可分配的进程来处理请求了,就会返回502错误,本质上是PHP进程状态异常—进程不够用了或者PHP服务根本就没开启),这种情况下应该检查PHP服务是否启动了,如果启动了,就要看一下是不是进程池太小,已经全部处于繁忙状态,这种情况下通常将PHP的可用进程数提高数提高就能解决问题;而504错误是网关超时,它代表负责处理HTTP请求的PHP进程超过了约定的最长时间仍未返回处理结果,出现这种异常的原因通常是sql执行的时间太长或代码里出现了死循环之类的问题。

03

hystrix并发不友好?sentinel怎么样?

最近公司压测,业务系统压测效果一直不是很好,细问之下才知道,在业务系统中会调用很多下游服务。为了控制调用下游服务的时间,防止太长的响应时间拖垮应用,他们针对每一个下游应用的调用处都使用hystrix进行线程池隔离来进行保护应用。而在使用时加入了execution.isolation.thread.timeoutInMilliseconds来控制每次请求的超时熔断降级,其主要目的是用于处理系统rpc调用中的慢调用,在rpc调用超时的时候会进入fallback逻辑。这种模式虽然在一定程度上能保护应用,而且能够达到超时快速失败的效果,但是在高并发场景下,稍微慢一些的慢调用多起来之后,整个线程池很快就会打满,对系统产生影响。虽然与本文的重点内容无关,但我还是想先来分析一下hystrix线程池隔离超时熔断降级的原理。

04
领券