从草根到百万年薪程序员的十年风雨之路,附答案解析(代码片段)

程序员DCS阿里 程序员DCS阿里     2022-12-06     171

关键词:

造成雪崩的真实场景

1.4.1 服务提供者不可用

  • 硬件故障:如网络故障、硬盘损坏等。

  • 程序的 bug:如算法需要占用大量 CPU 的计算时间导致 CPU 使用率过高。

  • 缓存击穿:比如应用刚重启,短时间内缓存是失效的,导致大量请求直接访问到了数据库,数据库不堪重负,服务不可用。

  • 秒杀和大促:服务短时间承载不了那么多请求量。

1.4.2 重试加大流量

  • 用户连续重试:比如用户看到界面上没有响应,所以又操作了一遍,结果又增加了一倍请求量。

  • 程序重试机制:比如代码中有多次重试的逻辑,一次失败后,过几秒后再重试,重试个三次就取消重试,走异常处理分支了。也是增加了请求量。

五、如何防止雪崩

方案

出问题前预防:限流、主动降级、隔离

出问题后修复:熔断、被动降级

「本篇主要来讲解熔断机制。」 后续几篇会讲解其他方案。

六、熔断原理和算法

1.6.1 熔断概念

熔断这个概念来源于电路系统中的保险丝熔断。当电流过大时,保险丝熔断,防止因电流过大损坏电器元器件,或因电流过大,导致元器件热度过高,发生火灾。

「物理公式」 电功率 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 就不在这篇讲了,后续奉上~

总结

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

**另外想要面试题及答案的小伙伴请点击这里自行领取,本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

下面有部分截图希望能对大家有所帮助。

案的小伙伴请点击这里自行领取,本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **

下面有部分截图希望能对大家有所帮助。

在这里插入图片描述

从草根到百万年薪程序员的十年风雨之路,实战解析

前言当你准备跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是两个字——凉凉!而在如今的市场,什么多线程、高并发、分布式、负... 查看详情

草根程序员8年百万年薪之路

2012年,从一个很普通但很美丽的二本院校毕业(湖北师范大学),走上了一条草根程序员之路。近8年的职业生涯,今年刚好30岁,年薪现金部分已过百万。。三句话,三个维度来梳理下我的历程:一、公司历程:  1.杭州一家... 查看详情

从一个月2500没人要到大厂技术主管的编程之路|我的十年

我们程序员,即便做到CTO,也远没有到拼才华的时候,即使吹上天,也不过是普通人,一些看起来比我们牛逼的人物,只不过在别人选择安逸的时候,他选择了拼搏而已。我也一样,曾几何时,... 查看详情

从一个月2500没人要到大厂技术主管的编程之路|我的十年

我们程序员,即便做到CTO,也远没有到拼才华的时候,即使吹上天,也不过是普通人,一些看起来比我们牛逼的人物,只不过在别人选择安逸的时候,他选择了拼搏而已。我也一样,曾几何时,... 查看详情

上周热点回顾(3.23-3.29)

...bsp;WTM3.5发布,VUE来了! (liuliang79)· 从草根到百万年薪程序员的二十年风雨之路 (码农有道)· 大龄个人开发者,我是如何活下来的,又将怎样活下去 (张晓衡)· .NET5Preview1的深度解读和跟进 ... 查看详情

我的十年程序员之路

一晃做程序员也有十年了,总觉得时间过的很快,仿佛第一次写程序还是去年的事情。虽然到现在也已经换了三四家公司了,但总有种自己没有做过什么的感觉。于是便想把个人的经历写下来,留给以后的自己作为个回忆。大学... 查看详情

从“1l小钢炮”到“pc界变形金刚”——tiny助力企业数智转型的十年进化之路

...擎智沙龙活动,在北京顺利举办。本次沙龙回顾了Tiny的十年进化之路,分享诸多ThinkCentreTiny商用产品的创新,以及助力行业数字化、智能化发展的实践经验。2012年联想以T 查看详情

十年风雨,一个普通程序员的成长之路一眼望到头,一眼望不到头

还有十几天就是我的32岁生日,然后,33了,要过年了。古人三十而立,我却在这狭窄的圈子里兜兜转转。多年前的喊的一句创业口号,现在还是口号。焦虑、迷茫。这两天一场网易的暴力裁员事件,犹如一盆凉水当头浇下。让... 查看详情

百万年薪python之路--js基础介绍及数据类型

JS代码的引入方式1:<script>alert('兽人永不为奴!')</script>方式2:外部文件引入src属性值为js文件路径<scriptsrc="test.js"></script>变量声明变量名是区分大小写的。推荐使用驼峰式命名规则。首字母大写保留... 查看详情

我的十年技术成长之路漫谈及分享

经常有以前的同事或者群友问我如何成为架构师,如何保持学习,如何写简历等等问题。前段时间我也在公司部门内部做了一次非正式分享(只列提纲没写内容,即兴发挥)主要介绍作为技术人如何学习,... 查看详情

我的十年技术成长之路漫谈及分享

经常有以前的同事或者群友问我如何成为架构师,如何保持学习,如何写简历等等问题。前段时间我也在公司部门内部做了一次非正式分享(只列提纲没写内容,即兴发挥)主要介绍作为技术人如何学习,... 查看详情

justjavac:从辍学到成为deno核心代码贡献者,我的十年编程生涯

【CSDN编者按】大学因学费而辍学,最困难时睡在公园长椅,有远见的母亲让他走上了编程之路,温柔智慧的妻子用爱与信任激励着他秉承初心、奋勇前行。编程十余年,他已在GitHub开源三百多个项目,项目总S... 查看详情

justjavac:从辍学到成为deno核心代码贡献者,我的十年编程生涯

【CSDN编者按】大学因学费而辍学,最困难时睡在公园长椅,有远见的母亲让他走上了编程之路,温柔智慧的妻子用爱与信任激励着他秉承初心、奋勇前行。编程十余年,他已在GitHub开源三百多个项目,项目总S... 查看详情

aws的十年发展之路-永远前行

十年前的今天,云计算和任何一种新技术一样,不被大众所认可,十年后的今天,云计算正通过大数据、智能家居、物联网等具体的产品被人们所接受。作为云计算商业化的领导者和先驱,AWS所取得的成绩可谓名副实归,它的每... 查看详情

一个老程序员的十年回顾

目录  上篇-学习人生  一、计算机是什么东西?  二、漫长的理论学习时期  中篇-艰难人生  一、第一次考研的失败  二、“土包子”的北京之行  下篇-实践人生  一、希特勒地堡与CIH病毒  二、编程生涯... 查看详情

向founder致敬--我看aws的十年发展之路

大家是否都有过这样的经历?以前读书的时候,老师给我们布置作业甚至是考试的时候经常要在最后强调一句:“请独立完成!”而当我们走出校园参加工作后,经常被要求“协作开展项目”并时常以“具有团队精神”为荣。这... 查看详情

深入解读云计算的十年发展历程

引言:人生不会有太多的十年,但仅仅一个十年也可以成就很多事情。云计算从诞生到现在走过了十年,在不知不觉间改变了我们的生活。一、云的十年发展人生不会有太多的十年,但仅仅一个十年也可以成就很多事情。云计算... 查看详情

淘宝从几百到千万级并发的十四次架构演进之路(推荐收藏参考)

淘宝从几百到千万级并发的十四次架构演进之路(推荐收藏参考)牛旦教育IT课堂 2019-06-1911:53:00作者:huashiou原文地址:https://segmentfault.com/a/11900000186261631、概述本文以淘宝作为例子,介绍从一百个并发到千万... 查看详情