
【百度云原生导读】2021年伊始,如果你打算在生产环境中落地 Service Mesh,那么 Istio 必定在你的考虑范围之内。作为目前最流行的 Service Mesh 技术之一,Istio 拥有活跃的社区和众多的落地案例。但如果你想在生产环境大规模落地 Isito,这看似壮观美好的冰山下,却是暗流涌动,潜藏着无数凶险。
01
使用 Istio 无法做到完全对应用透明
SDK 需要关闭一些功能,例如重试。一个典型的场景是,SDK 重试 m 次,Sidecar 重试 n 次,这会导致 m * n 的重试风暴,从而引发风险。
02
Istio 对非 K8S 环境的支持有限
这会带来一系列挑战:
原有 PaaS 可能没有容器网络,Istio 的服务发现和流量劫持都可能要根据旧有基础设施进行适配才能正常工作
如果旧有的 PaaS 单个实例不能很好的管理多个容器(类比 K8S 的 Pod 和 Container 概念),大量 Istio Sidecar 的部署和运维将是一个很大的挑战
缺少 K8S webhook 机制,Sidecar 的注入也可能变得不那么透明,而需要耦合在业务的部署逻辑中
03
只有 HTTP 协议是一等公民
04
扩展 Istio 的成本并不低
以扩展 Istio 支持某一种私有协议为例,首先你需要在 Istio 的 api 代码库中进行协议扩展,其次你需要修改 Istio 代码库来实现新的协议处理和下发,接着你还需要修改 xds 代码库的协议,最后你还要在 Envoy 中实现相应的 Filter 来完成协议的解析和路由等功能。
05
Istio 在集群规模较大时的性能问题
可以想象,在稍大一些的集群规模,Envoy 的内存开销、Istio 的 CPU 开销、XDS 的下发时效性等问题,一定会变得尤为突出。
06
XDS 分发没有分级发布机制
07
Istio 组件故障时是否有退路?
08
Istio 技术架构的成熟度还没有达到预期
09
Istio 缺乏成熟的产品生态
10
Istio 目前解决的问题域还很有限
如果你的生产环境中,业务系统对接了非常多和复杂的分布式系系统中间件,Istio 目前可能并不能完全解决你的应用的云原生化诉求。
写在最后
上面列举的这些问题,实际上并不影响 Istio 依然是目前最为流行和成功的 Service Mesh 技术选型之一。Istio 频繁的变动,一定程度上也说明它拥有一个活跃的社区,我们应当对一个新的事物抱以信心,Istio 的社区也在不断听取来自终端用户的声音,朝着更合理的方向演进。
同时,如果你的生产环境中的服务规模并不是很大,服务已经托管于 K8S 之上,也只使用那些 Istio 原生提供的能力,那么 Istio 依然是一个值得尝试的开箱即用方案。
但如果你的生产环境比较复杂,技术债务较重,专有功能和策略需求较多,亦或者服务规模庞大,那么在开始使用 Istio 之前,你需要仔细权衡上述这些要素,以评估在你的系统之中引入 Istio 可能带来的复杂度和潜在成本。