LabHub
学习 学习路径 课程

微服务架构

实现熔断器并验证状态迁移

在 LabHub 中继续学习

目标

亲自实现电路断路器,用眼睛确认CLOSED、OPEN、HALF_OPEN之间的转换,通过思考案例感受为什么判断什么是失败最重要。

为什么重要

电路断路器不是修复故障的装置。当故障确定时,它是快速失败以防止呼叫者的连接池枯竭的装置。所以不是性能指标,而是隔离指标。在实际工作中,电路造成的故障主要有两种。第一,将4xx计入失败,甚至阻止正常流量——当库存服务开始给特定商品分配400时,电路会打开,甚至阻止正常商品查询的案例。第二,只允许1次HALF_OPEN测试呼叫,来往于OPEN和HALF_OPEN之间闪烁。这个练习将这两个陷阱分别分配一个步骤,亲自制作并亲自阻止。

阶段

  1. /opt/app/flaky.py将 127.0.0.1:8110 启动。GET /count到目前为止收到的请求数量用JSON给出。
  2. /root/cb/breaker.py制作/fast调用3次。/root/cb/state.json{"state":"CLOSED", ...}使用。
  3. /always500呼叫5次,超过失败率临界值。设置为Windows 10,最小呼叫5次,失败率50%。state.jsonstateOPEN变成这个。
  4. 在OPEN状态下再呼叫10次。/root/cb/fastfail.txtbefore=<n> after=<n> blocked=10 max_ms=<밀리초>写。before和after必须相同,max_ms必须小于50。
  5. waitDurationInOpenState将设置为3秒,等待3秒以上后呼叫一次。state.jsonstateHALF_OPEN变成这个。
  6. 在HALF_OPEN中/fast成功3次CLOSED回到。permitted_in_half_open价格必须记录为3以上。
  7. 用新的刹车/bad呼叫(400)10次。/root/cb/ignore4xx.jsonstate仍然是CLOSED并且failures必须是0。
  8. 一次性播放整个剧本/root/cb/transitions.logCLOSED->OPENOPEN->HALF_OPENHALF_OPEN->CLOSED按照这个顺序留下三行。

参考

准备下游和呼叫柜台

/opt/app/flaky.py将 127.0.0.1:8110 启动。GET /count到目前为止收到的请求数量用JSON给出。

/opt/app/flaky.py 会告诉你收到的请求数量为 /count。这个值在后续步骤中成为证据。

在CLOSED状态下通过

/root/cb/breaker.py制作/fast调用3次。/root/cb/state.json{"state":"CLOSED", ...}使用。

必须将状态留存在文件中才能评分。请将状态名称、失败次数、窗口大小用JSON格式写出来。

用失败率临界值创建OPEN

/always500呼叫5次,超过失败率临界值。设置为Windows 10,最小呼叫5次,失败率50%。state.jsonstateOPEN变成这个。

在填满最低呼叫次数之前不进行判断。请照样实现Windows 10、最低5、临界50%。

证明在OPEN中没有进入下游

在OPEN状态下再呼叫10次。/root/cb/fastfail.txtbefore=<n> after=<n> blocked=10 max_ms=<밀리초>写。before和after必须相同,max_ms必须小于50。

在阻止前后,下游的呼叫计数器必须保持不变。而且响应必须非常快。

等待时间后转为HALF_OPEN

waitDurationInOpenState将设置为3秒,等待3秒以上后呼叫一次。state.jsonstateHALF_OPEN变成这个。

记录OPEN进入时间,比较进度。只有自动转移才能不让人干预。

通过考试呼叫成功返回CLOSED

在HALF_OPEN中/fast成功3次CLOSED回到。permitted_in_half_open价格必须记录为3以上。

如果将测试呼叫次数设置为1,就会出现闪烁。请思考为什么必须大于3,然后实现。

不要把4xx定为失败

用新的刹车/bad呼叫(400)10次。/root/cb/ignore4xx.jsonstate仍然是CLOSED并且failures必须是0。

400是客户端错误,所以不是电路需要介入的事情。请将什么视为失败管理成列表。

综合验证通过经历

一次性播放整个剧本/root/cb/transitions.logCLOSED->OPENOPEN->HALF_OPENHALF_OPEN->CLOSED按照这个顺序留下三行。

请将前面的步骤连成一个剧本,将四个状态转换按顺序记录下来。