Istio究竟是干嘛的? - 知乎

标签: | 发表时间:2021-06-02 07:28 | 作者:
出处:https://zhuanlan.zhihu.com

当微服务架构体系越来越复杂的时候,需要将“业务服务”和“基础设施”解耦,将一个微服务进程一分为二:


  • 一个进程实现业务逻辑,biz,即上图白色方块
  • 一个进程实现底层技术体系,proxy,即上图蓝色方块,负载均衡、监控告警、服务发现与治理、调用链…等诸多基础设施,都放到这一层实现

如此解耦之后:

  • biz不管是调用服务,还是提供服务,都只与本地的proxy进行本地通信
  • 所有跨网的通信,都通过proxy之间进行

要聊ServiceMesh,就不得不提Istio,它是ServiceMesh目前最流行的实践,今天说说Istio是干啥的。

画外音:不能落伍。

什么是Istio?

Istio是ServiceMesh的产品化落地,它的一些关键性描述是:

(1) 帮助微服务之间建立连接,帮助研发团队更好的管理与监控微服务,并使得系统架构更加安全

画外音:Istio helps you to connect, secure, control, and observe microservices.

(2) 帮助微服务分层解耦,解耦后的proxy层能够更加专注于提供基础架构能力,例如:

  • 服务发现(discovery);
  • 负载均衡(load balancing);
  • 故障恢复(failure recovery);
  • 服务度量(metrics);
  • 服务监控(monitoring);
  • A/B测试(A/B testing);
  • 灰度发布(canary rollouts);
  • 限流限速(rate limiting);
  • 访问控制(access control);
  • 身份认证(end-to-end authentication);

画外音:佩服,硬是凑齐了十条,其实ServiceMesh还能提供更多基础服务功能。

(3) 使得业务工程团队与基础架构团队都更加高效的工作,各自专注于自己的工作,更好的彼此赋能

画外音:说的还是解耦。

Istio官网是怎么吹嘘自己的?

画外音:这个问题的另一个问法是“为什么大家要来用Istio”。

Istio非常牛逼,如果要实施ServiceMesh,必须用Istio,因为:

(1) 可以通过,在现有服务器新增部署边车代理(sidecar proxy),应用程序不用改代码,或者只需要改很少的代码,就能实现上述N项基础功能

画外音:你信了么?

(2) 可以通过,控制后台,简单改改配置,点点按钮,就能管理和查看上述N项基础功能

(3) 以下特性,Istio在这个环节里进行了附加说明:

  • 负载均衡支持多协议,HTTP, gRPC, WebSocket, TCP
  • 通过路由、重试、故障转移对流量进行细粒度流控
  • 通过可插拔策略层以及可配置API,能够支持流量访问控制、限速、配额管理
  • 自动度量、日志收集、调用跟踪
  • 服务到服务的身份认证

Istio的核心特性是什么?

Istio强调了它提供的五项关键特性:

(1) 流控(traffic management)

画外音:断路器(circuit breakers)、超时、重试、高可用、多路由规则、AB测试、灰度发布、按照百分比分配流量等。

(2) 安全(security)

画外音:加密、身份认证、服务到服务的权限控制、K8S里容器到容器的权限控制等。

(3) 可观察(observability)

画外音:追踪、监控、数据收集,通过控制后台全面了解上行下行流量,服务链路情况,服务运行情况,系统性能情况,国内微服务架构体系,这一块做得比较缺乏。

(4) 平台无关系(platform support)

画外音:K8s,物理机,自己的虚机都没问题。

(5) 集成与定制(integration and customization)

画外音:可定制化扩展功能。

Istio的吹嘘与特性,对于国外很多通过RESTful提供内网服务的公司,很有吸引力,但相对于国内微服务架构,未必达到了很好的拉拢效果:

  • 国内基本都是TCP的RPC框架,多协议支持未必是必须的
  • RPC框架里,路由、重试、故障转移、负载均衡、高可用都是最基础的
  • 流控、限速、配额管理,是服务治理的内容,在微服务架构初期是锦上添花
  • 自动度量,系统入口出口数据收集,调用跟踪,可观察和可操控的后台确实是最吸引人的
  • 服务到服务的身份认证,微服务基本是内网访问,在架构初期也只是锦上添花;

另外一个花边,为什么代理会叫sidecar proxy?


看了上图就容易懂了,biz和proxy相生相伴,就像摩托车(motor)与旁边的车厢(sidecar)。未来,sidecar和proxy就指微服务进程解耦成两个进程之后,提供基础能力的那个代理进程


Istio究竟是干嘛的?

相关 [istio 知乎] 推荐:

Istio究竟是干嘛的? - 知乎

- -
当微服务架构体系越来越复杂的时候,需要将“业务服务”和“基础设施”解耦,将一个微服务进程一分为二:. 一个进程实现业务逻辑,biz,即上图白色方块. 一个进程实现底层技术体系,proxy,即上图蓝色方块,负载均衡、监控告警、服务发现与治理、调用链…等诸多基础设施,都放到这一层实现. biz不管是调用服务,还是提供服务,都只与本地的proxy进行本地通信.

知乎落地的 Service Mesh Istio

- -
在知乎,我们很早就进行了非常彻底的容器化部署. 全站在线运行的微服务数量高达两千多个. 这些微服务通过我们自己维护的 RPC 框架和 Kodor 体系来实现服务互联的能力. 在这其中,我们也存在一系列的问题:. 各种基础组件维护成本比较高,单点风险存在. 各语言客户端特性难以统一,熔断、重试等特性实现颇有不同,且不能做到动态线上进行调整.

Istio 在知乎大规模集群的落地实践

- - DockOne.io
在知乎,我们很早就进行了非常彻底的容器化部署. 全站在线运行的微服务数量高达两千多个. 这些微服务通过我们自己维护的 RPC 框架和 Kodor 体系来实现服务互联的能力. 在这其中,我们也存在一系列的问题:. 各种基础组件维护成本比较高,单点风险存在. 各语言客户端特性难以统一,熔断、重试等特性实现颇有不同,且不能做到动态线上进行调整.

istio 原理简介

- - 掘金 架构
由于 istio 自 1.5 版本以后架构上有了较大变化,控制面从多组件变成了单体的 istiod 组件,所以下文会先介绍 1.5 之前的架构,再介绍 1.5 之后的,是一个由繁到简的过程. istio 1.5 之前架构. Istio 的架构分为控制平面和数据平面. 数据平面:由一组智能代理(Envoy)以 sidecar 模式部署,协调和控制所有服务之间的网络通信.

Istio 常见的 10 个异常分析

- - DockOne.io
本文总结了使用 Istio 常见的 10 个异常. Istio 支持多平台,不过 Istio 和 Kubernetes 的兼容性是最优的,不管是设计理念,核心团队还是社区, 都有一脉相承的意思. 但 Istio 和 Kubernetes 的适配并非完全没有冲突,一个典型问题就是 Istio 需要 Kubernetes Service 按照协议进行端口命名(Port Naming).

使用 Istio 进行金丝雀部署

- -
本篇博客最后更新时间 2018 年 5 月 16 号,采用了最新版本的流量管理模型. Istio项目的一大好处就是为服务金丝雀方式部署提供了控制便利. 金丝雀部署(或上线)背后的想法是通过让一小部分用户流量引入的新版本进行测试,如果一切顺利,则可以增加(可能逐渐增加)百分比,逐步替换旧版本. 如在过程中出现任何问题,则可以中止并回滚到旧版本.

实践k8s istio熔断 - fat_girl_spring - 博客园

- -
熔断主要是无感的处理服务异常并保证不会发生级联甚至雪崩的服务异常. 在微服务方面体现是对异常的服务情况进行快速失败,它对已经调用失败的服务不再会继续调用,如果仍需要调用此异常服务,它将立刻返回失败. 与此同时,它一直监控服务的健康状况,一旦服务恢复正常,则立刻恢复对此服务的正常访问. 这样的快速失败策略可以降低服务负载压力,很好地保护服务免受高负载的影响.

如何理解 Istio 中的 VirtualService 和 DestinationRule?

- - Jimmy Song - 专注于探索后 Kubernetes 时代的云原生新范式 – 博客
Istio 在刚开源的时候就定义了几十个 CRD,其中用于流量治理的有 RouteRule、 DestinationPolicy、 EgressRule 等,后来推出了 v1alpha3 API 使用 VirtualService 和 DestinationRule 等取代了之前的 API.

Istio 中的服务和流量的抽象模型

- - IT瘾-dev
本文介绍了 Istio 和 Kubernetes 中的一些服务和流量的抽象模型. 虽然 Istio 一开始确定的抽象模型与对接的底层平台无关,但目前来看基本绑定 Kubernetes,本文仅以 Kubernetes 说明. 另外在 ServiceMesher 社区中最近有很多关于 Istio、Envoy、Kubernetes 之中的服务模型关系的讨论,本文作为一个开篇说明,Kubernetes 和 Isito 之间有哪些共有的服务模型,Istio 在 Kubernetes 的服务模型之上又增加了什么,为什么说 Kubernetes service 存在的意义仅剩下做服务发现.

洞若观火:使用 OpenTracing 增强 Istio 的调用链跟踪

- - IT瘾-dev
分布式调用跟踪和Opentracing规范. 什么是Opentracing. CNCF Opentracing项目. Opentracing概念模型. Opentracing数据模型. Istio对分布式调用跟踪的支持. 使用Opentracing来传递分布式跟踪上下文. 在Istio调用跟踪链中加入方法级的调用跟踪信息.