Service Mesh 实战
马若飞
FreeWheel 北京研发中心首席工程师、《Istio 实战指南》作者
11858 人已学习
新⼈⾸单¥59
课程目录
已完结/共 41 讲
Service Mesh 实战
登录|注册
留言
8
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 20 | 熔断:“秒杀”场景下的过载保护是如何实现的?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | Service Mesh的起源:为什么会出现Service Mesh技术?
04 | Service Mesh的发展:Service Mesh技术是如何演进的?
05 | 微服务通信的济世良方:什么是Service Mesh?它能帮你做什么?
06 | 列王的纷争:市面上有哪些主流的Service Mesh产品?
07 | 王者的诞生:为什么Istio有如此高的呼声?
08 | Istio的自我救赎:为什么Istio发生了两次重大的架构变更?
09 | 核心功能之流量控制:Istio是如何实现流量控制功能的?
10 | 服务的可观察性:如何理解服务可视化的重要性?
11 | 保卫你的网格:Istio是如何设计安全架构的?
12 | 安装与部署:如何安装Istio?它都支持哪些环境和部署方式?
13 | 动态路由:用Virtual Service和Destination Rule设置路由规则
14 | 网关:用Gateway管理进入网格的流量
15 | 服务入口:用Service Entry扩展你的网格服务
16 | 流量转移:灰度发布是如何实现的?
17 | Ingress:控制进入网格的请求
18 | Egress:用Egress实现访问外部服务
19 | 超时重试:提升系统的健壮性和可用性
20 | 熔断:“秒杀”场景下的过载保护是如何实现的?
21 | 故障注入:在Istio中实现一个“Chaos Monkey”
22 | 流量镜像:解决线上问题排查的难题
23 | 洞察你的服务:使用Kiali观测你的微服务应用
24 | 指标:使用Prometheus收集指标
25 | 监控:使用Grafana查看系统的整体状态
26 | 日志:如何获取Envoy的日志并进行调试
27 | 分布式追踪:使用Jeager对应用进行分布式追踪
28 | 守卫网格:配置TLS安全网关
29 | 双重保障:为应用设置不同级别的双向TLS
30 | 授权策略:如何实现JWT身份认证与授权?
31 | 实战演练(一):项目准备和构建过程
32 | 实战演练(二):实现自动化灰度发布
33 | 实战演练(三):提升系统的弹性能力
34 | 实战演练(四):配置安全策略
35 | 实战演练(五):收集指标并监控应用
36 | 实战演练(六):集成 ELK Stack 日志套件
37 | 实战演练(七):集成分布式追踪工具
38 | 调试工具和方法:调试网格的工具和方法有哪些?
39 | 实践经验总结:实际落地中的常见问题有哪些?
40 | 未来架构——从Service Mesh迈向云原生
41 | 结果测试&结束语
登录 后留言

全部留言(8)

  • 最新
  • 精选
覃士林
限流功能会在istio后续版本添加进来吗

作者回复: 有,通过envoyfilter,具体见官方文档

2021-06-17
Geek_66dcc6
关于连接错误次数,我有一个疑问,当consecuitiveErrors=1 时,代表有一个连续错误,就会触发熔断,当我使用“”kubectl exec fortio-deploy-7cb865f87f-z4s69 -c fortio -- /usr/bin/fortio load -c 3 -qps 0 -n 30 -loglevel Warning http://httpbin:8000/get “” 命令时,有百分之三十以上的503 ,一定是有至少一个连续错误了。但是此时,我使用kubectl exec fortio-deploy-7cb865f87f-z4s69 -c fortio -- /usr/bin/fortio curl -quiet http://httpbin:8000/get 单个访问请求,预期的结果是不是应该直接被拒绝,因为熔断被触发到了?我的访问仍然是200OK 的返回,想知道是不是我理解错了熔断机制。

作者回复: 看一下你的interval和ejectiontime设置的多少,如果比较短,假设只有10s,你两次操作之间超过了10s,那么熔断会进入半开状态。 另外istio的熔断并不是标准意义上基于请求数的熔断,是有一定偏差的,官网熔断相关页面有说明:“It’s interesting to see that almost all requests made it through! The istio-proxy does allow for some leeway.”

2020-09-01
3
Season
如何做限流呢?针对用户做限流,不是直接熔断服务

作者回复: 因为mixer被砍掉,限流功能暂时缺失,只支持连接数限制。不过可以直接通过envoy filter的方式引入,那样就不算是istio原生了

2020-07-28
明仔君
對於文末最後的思考題,應該至少需要考慮以下 2 點- 1. 服務發現的實現 - 比如大家都熟悉的Eureka / Consul, 用來提供統一的服務查詢中心 2. 緩存和容錯 - 對於某些服務,出於業務的需求,即使出現熔斷之後也不能直接報錯,而是需要提供cache值來防止業務中斷.這個就需要服務之間的契約設計到位. 歡迎指點交流.

作者回复: 优秀!

2020-07-17
Jepsenwan
创建Destination rule 和 fortio后,测试出现503,但是istio-system ns里面的pod都正常。。 kubectl exec -it $FORTIO_POD -c fortio -- /usr/bin/fortio load -curl http://httpbin:8000/get 07:19:06 W http_client.go:679> Parsed non ok code 503 (HTTP/1.1 503) HTTP/1.1 503 Service Unavailable content-length: 19 content-type: text/plain date: Thu, 14 May 2020 07:19:06 GMT server: envoy no healthy upstream07:19:06 E commonflags.go:130> Error status 503 : HTTP/1.1 503 Service Unavailable\r\ncontent-length: 19\r\ncontent-type: text/plain\r\ndate: Thu, 14 May 2020 07:19:06 GMT\r\nserver: envoy\r\n\r\nno healthy upstream command terminated with exit code 1

作者回复: 你进入envoy查看下日志里response_flags是什么值。还可以查一下pending的指标。看上去应该是触发了熔断,和配置有关。

2020-05-14
zzZZ
FORTIO_POD=$(kubectl get pod | grep fortio | awk '{ print $1 }') kubectl exec -it $FORTIO_POD -c fortio /usr/bin/fortio -- load -curl http://httpbin:8000/get 不知道是不是我的 kubectl 版本太高了,必须这样执行才能正常:kubectl exec -it $FORTIO_POD -c fortio -- /usr/bin/fortio load -curl http://httpbin:8000/get 才能正常。 Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.1", GitCommit:"7879fc12a63337efff607952a323df90cdc7a335", GitTreeState:"clean", BuildDate:"2020-04-15T01:55:22Z", GoVersion:"go1.14.2", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.5", GitCommit:"20c265fef0741dd71a66480e35bd69f18351daea", GitTreeState:"clean", BuildDate:"2019-10-15T19:07:57Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

作者回复: 看看什么错误输出。加上 -- 是标准写法。

2020-05-04
上天的恩赐
20 熔断,视频中是 kubectl exec -it fortio-deploy-6dc9b4d7d9-xc9x5 -c fortio /usr/bin/fortio -- load -curl http://httpbin:8000/get 正确的应该是: kubectl exec -it fortio-deploy-6dc9b4d7d9-xc9x5 -c fortio -- /usr/bin/fortio load -curl http://httpbin:8000/get 这里的 “--”,应该在contrainer后面
2020-08-29
6
仗剑走天涯
kubectl exec -it $FORTIO_POD -c fortio /usr/bin/fortio -- load -curl http://httpbin:8000/get 运行后显示 OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"load\": executable file not found in $PATH": unknown command terminated with exit code 126 是什么问题呀 谢谢老师
2022-04-14
1
收起评论