#IstioConBuilding resilient systems inside the mesh: abstraction and automation of Virtual Service generationVladimir Georgiev, Thought Machine
核心观点与问题提出
- 同步调用失败处理:在服务网格中同步处理调用失败时,普遍存在如何快速失败和重试的问题。具体挑战包括:
- 超时设置:过早超时可能导致误判,过晚超时则可能让客户端长时间等待。
- 重试错误类型:需要明确哪些错误可重试。
- 责任归属:缺乏统一标准来决定由谁负责设置这些参数。
- 语言无关性:如何实现跨语言的解决方案。
虚拟服务API的局限性
- 虚拟服务API:虽然解决了部分问题,但存在以下挑战:
- 认知门槛:所有服务所有者需了解API以定义服务等级协议(SLO)。
- 配置错误:YAML配置中易出现类型错误。
- 状态漂移:服务API状态与虚拟服务配置可能不一致。
- 管理复杂性:服务数量庞大时难以管理。
抽象化解决方案:Proto文件与Annotations
- 抽象化方法:通过Proto文件和Annotations API定义虚拟服务:
- 示例:以Greeting服务为例,展示如何通过Proto文件抽象配置。
自动化构建系统:Please
- Please系统:使用BUILD文件和自定义规则实现自动化:
- 功能:通过
please规则自动生成虚拟服务配置。
- 示例:以Kubernetes Greeter服务为例,展示自动化生成过程。
部署与优势
- 部署流程:将自动化生成的规则部署到集群中。
- 主要优势:
- 配置管理:简化虚拟服务配置管理,使其成为发布工件。
- 语言无关性:以语言无关的方式定义超时和重试策略。
- 开发体验:应用开发者可依赖Istio/Envoy自动处理重试和超时,无需手动干预。
结论
- 通过Proto文件抽象和自动化构建系统(如Please),可有效管理虚拟服务配置,实现语言无关的失败处理策略,提升服务网格的健壮性。