服务网格不是银弹,唯有结合自身实际需求与团队能力,才能做出最适合的技术决策。
你可能参加过各种云原生、服务网格相关的技术分享,在社区里看到很多人在讨论 Istio,但对于自己是否真的需要引入服务网格感到踌躇。在决定采用 Istio 之前,请先仔细评估自己团队和业务的现状,看看是否真的需要服务网格,以及处于什么样的应用阶段。
本文不是 Istio 使用指南,而是基于社区实践经验整理的评估指南。在决定使用 Istio 之前,请考虑以下关键因素:
在引入 Istio 之前,建议先回答以下问题:
团队能力评估
业务架构现状
技术需求分析
服务网格虽然号称对应用透明,但在实际应用中往往无法做到完全透明:
SDK 兼容性问题
配置复杂性
虽然 Istio 支持多种部署环境,但 Kubernetes 仍然是最佳实践:
非 Kubernetes 环境的挑战
混合环境的复杂性
Istio 对不同协议的支持程度差异很大:
HTTP 协议的优势
其他协议的限制
虽然 Istio 架构高度可扩展,但实际扩展成本
以 Istio 为代表的 Sidecar 架构的特殊性在于,Sidecar 直接承接了业务流量,而不像一些其他的基础设施那样,只是整个系统的旁路组件(比如 Kubernetes)。
因此在 Isito 落地初期,你必须考虑,如果 Sidecar 进程挂掉,服务怎么办?是否有退路?是否能 fallback 到直连模式?
在 Istio 落地过程中,是否能无损 fallback,通常决定了核心业务能否接入 Service Mesh。
虽然 Istio 1.0 版本已经发布了很久,但是如果你关注社区每个版本的迭代,就会发现,Istio 目前架构依然处于不太稳定的状态,尤其是 1.5 版本前后的几个大版本,先后经历了去除 Mixer 组件、合并为单体架构、仅支持高版本 Kubernetes 等等重大变动,这对于已经在生产环境中使用了 Istio 的用户非常不友好,因为升级会面临各种不兼容性问题。
好在社区也已经意识到这一问题,2021 年社区也成立了专门的小组,重点改善 Istio 的兼容性和用户体验。
Istio 作为一套技术方案,却并不是一套产品方案。
如果你在生产环境中使用,你可能还需要解决可视化界面、权限和账号系统对接、结合公司已有技术组件和产品生态等问题,仅仅通过命令行来使用,可能并不能满足你的组织对权限、审计、易用性的要求。
而 Isito 自带的 Kiali 功能还十分简陋,远远没有达到能在生产环境使用的程度,因此你可能需要研发基于 Isito 的上层产品。
Istio 目前主要解决的是分布式系统之间服务调用的问题,但还有一些分布式系统的复杂语义和功能并未纳入到 Istio 的 Sidecar 运行时之中,比如消息发布和订阅、状态管理、资源绑定等等。
云原生应用将会朝着多 Sidecar 运行时或将更多分布式能力纳入单 Sidecar 运行时的方向继续发展,以使服务本身变得更为轻量,让应用和基础架构彻底解耦。
如果你的生产环境中,业务系统对接了非常多和复杂的分布式系系统中间件,Istio 目前可能并不能完全解决你的应用的云原生化诉求。
看到这里,你是否感到有些沮丧,而对 Isito 失去信心?
别担心,上面列举的这些问题,实际上并不影响 Isito 依然是目前最为流行和成功的 Service Mesh 技术选型之一。Istio 频繁的变动,一定程度上也说明它拥有一个活跃的社区,我们应当对一个新的事物报以信心,Isito 的社区也在不断听取来自终端用户的声音,朝着大家期待的方向演进。
同时,如果你的生产环境中的服务规模并不是很大,服务已经托管于 Kubernetes 之上,也只使用那些 Istio 原生提供的能力,那么 Istio 依然是一个值得尝试的开箱即用方案。
但如果你的生产环境比较复杂,技术债务较重,专有功能和策略需求较多,亦或者服务规模庞大,那么在开始使用 Istio 之前,你需要仔细权衡上述这些要素,以评估在你的系统之中引入 Istio 可能带来的复杂度和潜在成本。