java开源报表框架,完整版开放免费下载!
造成雪崩的真实场景
1.4.1 服务提供者不可⽤
硬件故障:如⽹络故障、硬盘损坏等。
程序的 bug:如算法需要占⽤⼤量 CPU 的计算时间导致 CPU 使⽤率过⾼。
缓存击穿:⽐如应⽤刚重启,短时间内缓存是失效的,导致⼤量请求直接访问到了数据库,数据库不堪重负,服务不可⽤。
秒杀和⼤促:服务短时间承载不了那么多请求量。
1.4.2 重试加⼤流量
⽤户连续重试:⽐如⽤户看到界⾯上没有响应,所以⼜操作了⼀遍,结果⼜增加了⼀倍请求量。
程序重试机制:⽐如代码中有多次重试的逻辑,⼀次失败后,过⼏秒后再重试,重试个三次就取消重试,⾛异常处理分⽀了。也是增加了请求量。
五、如何防⽌雪崩
⽅案
出问题前预防:限流、主动降级、隔离
出问题后修复:熔断、被动降级
「本篇主要来讲解熔断机制。」 后续⼏篇会讲解其他⽅案。
六、熔断原理和算法
1.6.1 熔断概念
熔断这个概念来源于电路系统中的保险丝熔断。当电流过⼤时,保险丝熔断,防⽌因电流过⼤损坏电器元器件,或因电流过⼤,导致元器件热度过⾼,发⽣⽕灾。
小白学java有前途吗「物理公式」 电功率 P = I^2 * R,I 代表电流,元器件的电阻 R 不变的情况下,电流越⼤,电功率约⼤,电阻做的电功⼤部分都⽤来发热了,所以电功率越⼤,发热越严重。(还好⾼中物理没忘。)
放到我们系统中,怎么理解熔断?
如果在某段时间内,调⽤某个服务⾮常慢甚⾄超时,就可以将这个服务熔断,后续其他服务再调⽤这个服务就直接返回,告诉其他服务:「“已经熔断了,你别调⽤我了,过段时间再来试下吧。”」
1.6.2 如何熔断
「熔断有个原则」 ⼀段时间内,统计失败的次数或者失败请求的占⽐超过⼀定阈值,就进⾏熔断。
详细的原理如下图所⽰:
1.6.3 统计请求的算法
请求访问到后台服务后,⾸先判断熔断开关是否打开。
如果熔断开关已打开,则表明当前请求不能被处理。
如果熔断开关未打开,则判断时间窗⼝是否已满。
如果时间窗⼝未满,则请求桶中的请求数加 1。
如果返回的响应有异常,则失败桶的失败数加 1,如果返回的响应没有异常,则成功桶的成功数加 1。
如果时间窗⼝已满,则开始判断是否需要熔断。
1.6.4 熔断的恢复算法
当熔断后,开关切换到断开状态。
过⼀段时间后,开关切换为半断开状态(Half-Open)。半断开状态下,允许对应⽤程序的⼀定数量的请求可以去调⽤服务,如果调⽤成功,则认为服务可以正常访问了,于是将开关切换为闭合状态。
如果半断开状态下,还是有调⽤失败的情况,则认为服务还没有恢复,开关从半断开状态切换到断开状态。
1.6.5 统计失败率的时间窗⼝
时间窗⼝可以⽐喻为⼈坐在窗户边,看外⾯来往的车辆,⼀定时间内从窗户外经过的车辆。
每次请求,都会判断时间窗⼝是否已满(如5分钟),如果时间窗⼝已满,则重新开始计时,且清理请求数/成功数/失败数。
注意:第⼀次开始的起始时间默认为当前时间。
1.6.6 尝试恢复服务的时间窗⼝
开关为断开的状态,经过⼀定时间后,⽐如 1 分钟,设置为半断开的状态,尝试发送请求检测服务是否恢复。
如果已恢复,则切换状态为关闭状态。如果未恢复,则切换状态为断开的状态,经过 1 分钟后,重复上⾯的步骤。
这⾥的时间窗⼝可以根据环境的运⾏状态进⾏动态调整,⽐如第⼀次是 1 分钟,第⼆次是 3 分钟,第三次是 10 分钟。
七、熔断中间件
肯定有⼈会问了,你这上⾯讲的原理,难道还真的⾃⼰去写这套算法?
「答案:是的,项⽬中我们⾃⼰造了⼀个轮⼦:熔断器。」
但这⾥我不推荐⼤家这么做。市⾯上还有更优秀的开源组件供⼤家使⽤,⽐如阿⾥系的 Sentinel(推荐),Netflix 的 Hystrix(已停⽌更新)。
当然 Sentinel 就不在这篇讲了,后续奉上~
总结
机会是留给有准备的⼈,⼤家在求职之前应该要明确⾃⼰的态度,熟悉求职流程,做好充分的准备,把⼀些可预见的事情做好。
对于应届毕业⽣来说,校招更适合你们,因为绝⼤部分都不会有⼯作经验,企业也不会有⼯作经验的需求。同时,你也不需要伪造⾼⼤上的实战经验,以此让⾃⼰的简历能够脱颖⽽出,反倒会让⾯试官有所怀疑。
你在⼤学时期应该明确⾃⼰的发展⽅向,如果你在⼤⼀就确定你以后想成为Java⼯程师,那就不要花太多的时间去学习其他的技术语⾔,⾼数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届⽣乃⾄转⾏过来的⼩⽩要学习的Java内容:
需要获取这份学习规划路线以及⽂章中提到的Java阿⾥内部Java应届⽣就业宝典的同学,请转发本⽂⽀持⼀下,关注我,
应届⽣就业宝典的同学,请转发本⽂⽀持⼀下,关注我,**
[外链图⽚转存中…(img-uVHLRXty-1625933767832)]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。