造成雪崩的真实场景

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 就不在这篇讲了,后续奉上~

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再免费分享一波我的Java面试真题+视频学习详解+技能进阶书籍

点击这里即可免费获取以上我收集整理的全部学习资料

这一点。**

再免费分享一波我的Java面试真题+视频学习详解+技能进阶书籍

点击这里即可免费获取以上我收集整理的全部学习资料

Java详解:淘宝秒杀脚本java相关推荐

  1. 巩固知识体系!淘宝秒杀脚本java

    一轮: 第一轮面试官(是一位女性,喜欢钻研一些细节性的东西) 自我介绍 1. HashMap和ArrayList的原理解释下. 2. Netty原理介绍下. 3. 了解过NIO,BIO,AIO么?介绍 ...

  2. java淘宝秒杀脚本(已自测)

    点赞再看,养成习惯,全网无BUG的java淘宝秒杀脚本!!! 开场白 我的室友如花是个貌美如花的黄花大闺女,这不是放假,大家都在宿舍幻想未来,只有如花在睡觉,突然,如花原地炸起,说了一句:" ...

  3. Java 淘宝秒杀脚本(已自测)

    开场白 我的室友如花是个貌美如花的黄花大闺女,这不是放假,大家都在宿舍幻想未来,只有如花在睡觉,突然,如花原地炸起,说了一句:"我要学习用java写一个淘宝秒杀脚本!!!" 大家一 ...

  4. python手机端秒杀_python实现淘宝秒杀脚本

    本文实例为大家分享了python实现淘宝秒杀脚本的具体代码,供大家参考,具体内容如下 1.安装pycharm.网上教程很多. 2.安装 Selenium 库. Selenium支持很多浏览器,我选择的 ...

  5. python 制作淘宝秒杀脚本

    1.  安装pycharm.网上教程很多. 2.  安装 Selenium 库. Selenium支持很多浏览器,我选择的是Firefox浏览器. 因为我这里是Python3环境,自带的又pip,所以 ...

  6. python写淘宝秒杀脚本_python实现淘宝秒杀脚本

    本文实例为大家分享了python实现淘宝秒杀脚本的具体代码,供大家参考,具体内容如下 1.安装pycharm.网上教程很多. 2.安装 Selenium 库. Selenium支持很多浏览器,我选择的 ...

  7. 还在担心抢不过别人,python淘宝秒杀脚本

    本文实例为大家分享了python实现淘宝秒杀脚本的具体代码,供大家参考,具体内容如下 1.安装pycharm.网上教程很多. 2.安装 Selenium 库. Selenium支持很多浏览器,我选择的 ...

  8. 淘宝秒杀脚本(python学习笔记)

    淘宝秒杀脚本(python学习笔记) 最近在自学python中,闲的无聊把最近学的内容和查阅的文档资料结合写了个简单的淘宝秒杀脚本,测试结果可以在2s左右完成下单,当然肯定和post方式的秒杀脚本没法 ...

  9. 详解淘宝直播背后的技术

    在移动网络.云计算.人工智能等技术发展的驱动下,直播成为当今时代的一个电商新物种.而该领域发展至今,无论是从量级上,还是技术上,作为行业中的佼佼者--淘宝直播,一直以来,都备受技术人的关注. 在阿里文 ...

最新文章

  1. 环境变量,cp,mv,查看文档命令
  2. 【网页前端设计Front end】HTML语言基础.下(看不懂你来打我)
  3. python黑客代码_[翻译]Python开发中的密码散列(Hashing)
  4. UIWebView执行JS语句
  5. 一天搞定CSS: 浮动(float)与inline-block的区别--11
  6. html 删除记录,添加删除记录.html
  7. Oracle 监听配置详解(转载)
  8. 汽车电子专业知识篇(六十三)-继电器的结构、工作原理、检测方法
  9. 本地连不上远程mysql数据库(2)
  10. xor(线性基的合并)
  11. Redis,真的不完美!
  12. ESLint 规则详解(二)
  13. 使用Excel生成符合正态分布的随机数
  14. 信链可信存证平台CCDP
  15. 5-3 人际资源整合-辨别同事、结交优质同事、拒绝烂同事
  16. 每天一道大厂SQL题【Day01】
  17. 初次入坑解析的小程序(决定写代码风格的小程序)
  18. 一文深度学习建模预测全流程(Python)
  19. 斯坦福 CS228 概率图模型中文讲义 四、贝叶斯网络
  20. 数据处理--图片像素点聚类

热门文章

  1. Windows平台下的SOCKS5代理配置与网络安全
  2. 软件测试刚开始学习你需要知道软件测试必备知识
  3. 异常Exception 和 运行时异常RuntimeException
  4. 数据库系统三级模式之“外模式”
  5. iOS 键盘限制只能数字和字母
  6. Swoole与Thinkphp整合
  7. App LinkDeep Link
  8. Wujian100 SOC FPGA原型验证,bootrom的实现
  9. ArcGIS 10.1 for Server 数据注册(下)
  10. Stream之flatMap