Istio 是由Google、IBM 和Lyft 发起的开源Service Mesh 框架。Istio 是Service Mesh 目前的实现的典型代表,Istio 使用Envoy 作为Sidecar

作为本系列的开篇,主要介绍服务网格所解决的痛点,以及 Istio 的功能和组件。

本篇大纲
在之前的一篇文章 云原生思想 中,说过软件架构是从 单体 -> 微服务 -> 基于 k8s 上的微服务 -> 服务网格 逐步演进的。
而原因,在文章中也给出了答案:
为了将业务和基础设施解耦
这短短一句话却是服务架构的终极目标。
微服务架构的难题:服务治理
微服务架构流行至今,沉淀出了一套属于自己的模式[1]:

微服务模式
图中几个主要的点:
- Communication patterns(通信模式)
- Style(风格):通信机制的选择。有远程过程调用(Remote Procedure Invocation)、消息(Messaging)和领域独用协议(Domain-specific protocol)。
- Service registry(服务注册):用于记录服务实例位置的服务注册表。
- Service discovery(服务发现):通过查询服务注册表获取服务实例的位置。有客户端服务发现(Client-side discovery)和服务器端服务发现(Server-side discovery)两种模式。
- Reliability(可靠性):当调用远端服务返回的故障率超过一定的阀值时,需要使用断路器(Circuit Breaker)熔断服务调用方和远端服务的调用链并立刻返回失败的信息,以防止引发服务雪崩现象。
- External API(外部 API):外部客户端与服务之间的通讯。需要引入 API 网关(API gateway),为了让后端 API 满足不同的前端使用场景,可能还需要引入 BFF 层,即服务前端的后端(Backend for front-end)。
- Security(安全)
- 服务实例之间可以通过在请求头携带访问令牌(Access Token)等方式来安全地传递客户端的身份信息。
- Observability(可观测性)
- 应用日志(Log aggregation):聚合应用程序产生的日志文件。
- 审计日志(Audit logging):把用户行为记录在数据库中供日后核查。
- 应用指标(Application metrics):在代码中实现收集应用运营过程中各类指标的功能。
- 分布式追踪(Distributed tracing):在服务代码中针对每一个外部访问,都分配一个唯一的标识符,并在跨服务访问时传递这个标识符以供追踪分布式引发的问题。
- 异常追踪(Exception tracking):把所有服务程序代码触发的异常信息都汇聚到集中的异常追踪服务,并根据一定的逻辑对开发者或运维人员发出通知。
- 健康检查 API(Health check API):一个监控服务可调用的 API,通常返回服务健康度信息,或对 ping 等心跳检查请求做出响应。
这些 非业务性 的基础功能都是 微服务需要治理的问题 。
我们把上述长篇大论所涉及的功能点提炼一下:
