跳转至

Istio基础之服务网络

Istio基础之服务网格历史

一 服务网格历史

要讨论服务网格( Service Mesh ),就必须提到微服务。微服务( Microservices )自2012年被提出以来,就继承了传统SOA 架构的基础, 并在理论和工程实践中形 成新的标准,热度不断攀升, 甚至有成为默认软件架构的趋势。

1. 微服务应该具备的特点:

  • 在结构上,将原有的从技术角度拆分的组件,升级为从业务角度拆分的独立运行的服务,这些服务具备各自的实现平台,并且独占自有数据,在服务之间以智能端点和哑管道的方式通信。
  • 在工程上,从产品而非项目的角度进行设计,强调迭代、自动化和面向故障的设计方法。

2. 微服务的好处与坏处

2.1 好处

  • 提高应用的伸缩性
  • 方便部门或业务之间的协作
  • 提高自动化程度,减少增耗

2.2 坏处

  • 实例数量急剧增长,对部署和运维自动化要求更高
  • 使用网络调用API,因此对网络依赖更强
  • 调用链路变长,分布式跟踪成为必选(当然你不选,谁也没有办法)
  • 日志分散,跟踪和分析难度加大
  • 服务分散,易受攻击
  • 自动伸缩、路由管理、故障控制、存储共享等。

[info]因此出现了kubernetes解决微服务架构产生的一些问题。在进程级别为微服务提供了部署、调度、伸缩、监控、日志等功能 。但是通信和联系更加复杂了,其中的观测和服务质量保障成为微服务方案的短板,因此service mesh登场了。

3. SerivceMesh相关发展历程

3.1 Spring Cloud

2015年,Spring Cloud诞生。它定义了一系列的标准特性,如智能路由、熔断机制、服务注册与发现等。并提供了对应的库和组件来实现这些标准特性。

但Spring Cloud缺点也有,如下所示:

  • 用户需要学习和熟悉各组件的“语言”并分别运维,增加了应用门槛。
  • 需要在代码给别对组件进行控制,不能够多语言协作。
  • 自身没有对调度、资源、Devops的相关支持。

3.2 Linkerd

2016年年初,由两位Twitter工程师开发了Linkerd项目,并打出了“The services must mesh”的口号,成为了Service Mesh的第一批布道者。

Linkerd 很好地结合了Kubernetes 所提供的功能,以此为基础,在每个Kubernetes Node 上都部署运行一个L ink erd 实例,用代理的方式将加入Mes h 的Pod 通信转接 给Linkerd ,这样Linkerd 就能在通信链路中完成对通信的控制和监控。

Linkerd相比先前说的Spring Cloud完成了以下:

  • 无须侵入工作负载的代码,直接进行通信监视和管理。
  • 提供了统一的配置方式,用于管理服务之间的通信和边缘通信。
  • 对kubernetes的支持,当然还支持其它底层平台。

3.3 Istio

2017年5月,Goolge、IBM、Lyft宣布了Istio的诞生。Istio 以Envoy 为数据平面,通过S idecar 的方式让Envoy 同业务容器一起运行,并劫持其通信, 接受控制平面的统一管理,在此基础上为服务之间的通信提供丰富的连接、控制、观察、安全等特性。

二 服务网格历史

1. 服务网格定义

服务网格是一个专注于处理服务间通信的基础设施层,它负责在现代云原生应用组成的复杂服务拓扑中可靠地传递请求。

  1. 服务网格特点如下:

  2. 轻量级的网络代理

  3. 应用无感知
  4. 应用之间的流量由服务网格接管
  5. 服务间的调用可能出现的超时、重试、监控、追踪等工作下沉到服务网格层处理。

如下图所示: 深色代表应用,清灰色代表网格中轻量级的网络代理。代理之间可以相互通信,而应用之间的通信完全由代理来进行。如果只看代理部分,可以看到一个网状结构,服务网格由此得名。 网格一般由数据平面和控制平面组成,数据平面负责在服务中部署一个称为“边车”(sidecar)的请求代理,控制平面负责请求代理之间的交互,以及用户与请求代理的交互。

2. 服务网格优势

随着服务数量增长,每个服务都需要自己管理复杂的服务间的网络通信,也让开发人员头疼。也变得越来难以管理,这要求服务治理包含很多功能。例如:服务发现、负载均衡、故障转移、服务度量指标收集和监控等。