
晚上压测个接口,带和不带 sidecar 的 QPS 差了 10 倍,虽然感觉可能不纯是 envoy 带来的,但还是挺想吐槽。
往好处想是活来了,KPI 来了,绩效也来了。
顺便推荐 hey 和 ghz ,使用便捷程度直追 ab 。
Summary: Count: 500000 Total: 10.63 s Slowest: 29.76 ms Fastest: 0.37 ms Average: 1.57 ms Requests/sec: 47052.73 Response time histogram: 0.373 [1] | 3.311 [490186] | 6.249 [8568] | 9.188 [467] | 12.126 [371] | 15.065 [245] | 18.003 [55] | 20.941 [102] | 23.880 [0] | 26.818 [1] | 29.757 [4] | Latency distribution: 10 % in 0.84 ms 25 % in 0.97 ms 50 % in 1.37 ms 75 % in 1.99 ms 90 % in 2.49 ms 95 % in 2.81 ms 99 % in 3.91 ms Status code distribution: [OK] 500000 responses 1 Dart 2022-11-08 01:42:01 +08:00 HTTP 本来就耗资源,不过还要看你集群的配置,说白了 K8s 是云厂商 Google 搞出来的,设计的初衷主要还是面向“企业级”,Istio 组件也多,没有足够的资源做支撑对业务应用就是负担。 |
2 mengzhuo 2022-11-08 09:30:04 +08:00 这就看取舍了,如果你就 10 个 node 以下,连 k8s 都不用上。 istio 是流量全加密,不需要自己再配置证书、维护证书一堆破事。 网格化改造完之后可以不用自己折腾链路监控一堆破事, egress 可以调控流量和 destination ,顺手还能断流,香得不行。 多出来的功能跟这点性能下降比,还是可以的,因为一般业务也会读个库,少说也是 50ms 起。 |
3 GopherDaily OP @Dart 其实量大了更在意资源,毕竟钱的相对基数大太多了 |
4 GopherDaily OP @mengzhuo envoy 增加的耗时倒是不可怕,自身的序列化和反序列化消耗了大量 CPU |
5 ryan4yin 2022-11-08 11:39:21 +08:00 我这边为了避免性能问题,关掉了 mTLS. 不过我刚到公司就是 Istio 了,没专门跟无 Sidecar 模式做过对比。 不过我们业务场景下加了 Sidecar QPS 降低肯定没这么夸张,上 Istio 成本要涨十倍的话,业务团队肯定不会接的,老板不得骂死。 我印象中 QPS 高的服务,纯 HTTP ,无调优情况下 sidecar : app 的 cpu 比值为 1:2 ,延迟增加了 3ms. 但是有了 Sidecar 后很多事情就好做了,比如说我们因此得以快速上线 gRPC ,把增加的损耗又全砍掉了。 接口改造为 gRPC 后,服务流量下降 70%,延迟下降 30% ~ 50%,第二步优化给 gRPC 上再加了层 gzip ,流量又降了 70%,而 CPU/延迟 基本没啥增加(砍流量主要是为了省 AWS 跨区流量费)。 总的来说多了个 Sidecar 性能有损耗很正常,加它的目的不就是为了拿性能换开发迭代效率嘛。 至于差了 10 倍 QPS 这么离谱的现象,我觉得肯定是有别的问题。 |
6 ryan4yin 2022-11-08 11:41:13 +08:00 另外一个现象是,我们的节点 CPU 利用率其实一直不高,加了个 Sidecar 看着涨了 50% 的 CPU ,但是对成本的影响并不大... |
7 ryan4yin 2022-11-08 11:42:50 +08:00 Istio Sidecar 默认的资源 requests 很小,QPS 稍微高一点基本就会用超,相当于说加了个 Sidecar 还帮我们提升了节点资源利用率 emmm 不过这个是我们集群资源利用率优化不够带来的,往下讨论又是另外一个问题了,就不展开了。 |
8 GopherDaily OP @ryan4yin 我是专门在压测 snowflake ID 的生产,QPS 上不去才手动去掉。 envoy 大概 1c 处理 10k req ,大规模观察是。 上了肯定是下不了的,但是不妨碍吐槽嘛。 10x 这个问题,一个可能是 envoy 配置的 upstream 链接池可能处理不了这么多的请求;另一个可能是我们在 filter 做了一些花活 |
9 YzSama 2022-11-08 16:20:22 +08:00 压测 envoy 得出的理论值,另外也要看 业务应用 实例,是否也能达到这个要求。 感觉真实场景,也不会全部服务都挂上 sidecar 的。仅针对需要对外服务的业务 |
10 GopherDaily OP @YzSama 看你规划,大部分情况是都需要,服务发现、流量管控和 APM 都挂在 istio 上了 |
11 ryan4yin 2022-11-09 10:40:36 +08:00 @YzSama 是这样,我这边业务侧为了平衡成本跟流量的可观测性、流控等需求,曾经在加 sidecar 跟不加 sidecar 间反复横跳。 但是去掉了 sidecar ,它们业务服务内部又没有做完善的监控告警的话,出了问题流量降级了根本没人知道,因为出了这么次大问题,后来业务侧的领导就拍板全给加上了 sidecar emmm |
12 ryan4yin 2022-11-09 10:40:57 +08:00 @GopherDaily 嗯嗯,理解理解~ |
13 GopherDaily OP @ryan4yin sidarcar 之后 infra 终于不要大规模干预框架代码,终于不要多语言 SDK 了,感觉基本是回不去的; 而且,proxy 做为代理后针对 proxy 玩花活太容易,出成果太直接 |
14 ryan4yin 2022-11-29 15:40:28 +08:00 @GopherDaily 是这样 |