浅析ServiceMesh & Istio

前言

公司于18年10月正式确认服务容器化,到18年12月4日第一个服务正式部署到生产环境kubernetes集群,再到如今已有23个服务完成了生产环境容器化的切换,更多的服务在测试环境容器化部署随时可以切换到生产环境。目前新项目的开发,大部分都直接在测试环境容器化部署,不再需要新购ECS搭建测试环境。随着容器化的深入,服务间的通信和联系变的更加复杂,其中通信的可视化、流量的控制和服务质量的评估问题日益凸显,成为了微服务方案的短板。这个时候Service mesh就进入了我们的视野。

Service mesh是什么

Service mesh 又译作 “服务网格”,作为服务间通信的基础设施层。随着规模和复杂性的增长,服务网格越来越难以理解和管理。我们对它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控,以及通更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等。它负责通过包含现代云原生应用程序的复杂服务拓扑来可靠地传递请求。实际上,服务网格通常通过一组轻量级网络代理来实现,这些代理与应用程序代码一起部署,而不需要感知应用程序本身。

这里注意:istio只是Service mesh服务网格的一种。

服务网格的特点

服务网格有如下几个特点:

  • 应用程序间通讯的中间层
  • 轻量级网络代理
  • 应用程序无感知
  • 解耦应用程序的重试/超时、监控、追踪和服务发现

目前两款流行的服务网格开源软件 Linkerd 和 Istio 都可以直接在 Kubernetes 中集成,其中 Linkerd 已经成为 CNCF 成员,Istio 在 2018年7月31日宣布 1.0。

服务网格的发展历史

  • Spring Cloud

    Spring Cloud 诞生于2015年,Spring Cloud 最早在功能层面为微服务治理定义了一系列标准特性,比如:智能路由、服务熔断、服务注册于发现等这些名词我最早看到都是在 Sprint Cloud 相关文章中。同时也有一些缺点,比如:需要在代码级别对诸多组件进行控制,并且都依赖于 Java 的实现,这与微服务的多语言协作背道而驰;没有对资源的调度、devops等提供相关支持,需要借助平台来完成;众所周知的Eureka闭源等。
    
  • Linkerd

    Service mesh 这个命名就是来源于Linkerd。Linkerd 很好地结合了 kubernetes 所提供的功能,于2017年加入CNCF。
    
  • Istio

    2017年5月, Google、 IBM 和 Lyft 宣布了Istio的诞生。一经发布,便立即获得Red Hat、F5等大厂响应,社区活跃度高涨,很快超越了 Linkerd,成为了 Service mesh 的代表产品。
    
  • 国内服务网格

    这里不得不提的是国内服务网格的兴起,在 Service mesh 概念具体定义以前,国内的许多厂商就已经开始了微服务进程,同时在做自己的微服务治理产品。而在 Service mesh 概念普及之后,厂商意识到了自己产品也具有 Service mesh 的特点,将自己的服务治理平台进行了改造和完善,推出了自己的 Service mesh 产品。例如,微博、腾讯和华为都有自己的服务网格产品,华为更是已经将产品投入到公有云中进行商业应用。蚂蚁金服的 SOFAMesh 则是针对大流量的生产场景,在 Istio 的架构基础上进行修改并推广。
    

Istio又是什么

Istio 提供了一个完整的解决方案,通过为整个服务网格提供行为洞察和操作控制来满足微服务应用程序的多样化需求。Istio 允许您连接、保护、控制和观测服务。在较高的层次上,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志记录平台、遥测或策略系统的 API。Istio 的多样化功能集使您能够成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

Istio的架构

Istio总的来说由两部分组成:控制平面数据平面

  • 数据平面由一组以 sidecar 方式部署的智能代理(Envoy)组成。sidecar通过注入的方式和业务容器共存于一个 Pod 中,会劫持业务容器的流量,接受控制面组件的控制,可以调节和控制微服务及 Mixer 之间所有的网络通信。
  • 控制平面是 Istio 的核心,负责管理和配置代理来路由流量。此外控制平面配置 Mixer 以实施策略和收集遥测数据。

下图显示了构成每个面板的不同组件:

图片为原创,转载请标记出处 https://blog.maoxianplay.com/

Envoy

Istio 使用 Envoy 代理的扩展版本,Envoy 是用 C++ 开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy 的许多内置功能被 Istio 发扬光大,例如:

  • 动态服务发现
  • 负载均衡
  • TLS 终止
  • HTTP/2 & gRPC 代理
  • 熔断器
  • 健康检查、基于百分比流量拆分的灰度发布
  • 故障注入
  • 丰富的度量指标

Envoy 被部署为 sidecar,和对应服务在同一个 Kubernetes pod 中。这允许 Istio 将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在 Mixer 中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。

Sidecar 代理模型还可以将 Istio 的功能添加到现有部署中,而无需重新构建或重写代码。可以来了解为什么我们在设计目标中选择这种方式。

Mixer

Mixer 是一个独立于平台的组件,负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据。代理提取请求级属性,发送到 Mixer 进行评估。

Mixer 中包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出 Envoy 代理和 Istio 管理的服务。

Pilot

Pilot 为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们传播到 sidecar。

Pilot 将平台特定的服务发现机制抽象化并将其合成为符合 Envoy 数据平面 API 的任何 sidecar 都可以使用的标准格式。这种松散耦合使得 Istio 能够在多种环境下运行(例如,Kubernetes、Consul、Nomad),同时保持用于流量管理的相同操作界面。

Citadel

Citadel 通过内置身份和凭证管理赋能强大的服务间和最终用户身份验证。可用于升级服务网格中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。从 0.5 版本开始,Istio 支持基于角色的访问控制,以控制谁可以访问您的服务,而不是基于不稳定的三层或四层网络标识。

Galley(1.1版本新增)

Galley 代表其他的 Istio 控制平面组件,用来验证用户编写的 Istio API 配置。随着时间的推移,Galley 将接管 Istio 获取配置、 处理和分配组件的顶级责任。它将负责将其他的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节中隔离开来。

结语

在云原生架构下,容器的使用给异构应用程序带来更多可行性,Kubernetes 增强了应用的横向扩容能力,用户可以快速的编排出复杂环境、复杂依赖关系的应用程序,Istio可以使开发者又无须过分关心应用程序的监控、扩展性、服务发现和分布式追踪这些繁琐的事情而专注于程序开发,赋予开发者更多的创造性。

参考

  • Istio 官方文档 - istio.io
  • 《深入浅出istio》

浅析ServiceMesh Istio相关推荐

  1. 第十一课 Kubernetes生产级实践-ServiceMesh代表作istio

    第十一课 Kubernetes生产级实践-ServiceMesh代表作istio tags: k8s 慕课网 categories: ServiceMesh istio 文章目录 第十一课 Kuber ...

  2. Mecha:将 Mesh 进行到底

    内容摘要:Service Mesh 落地实践三年,效果一直并不理想,到了该反思的时候了.Mecha 作为面向服务的分布式能力抽象层,是 Service Mesh 模式的自然进化版本,预计也将是云原生化 ...

  3. 【技术解决方案】企业如何从SpringBoot应用平滑迁移到云原生K8s平台

    文章目录 在K8S上部署Spring Cloud Alibaba 在Kubernetes上部署Spring Cloud Kubernetes 在Kubernetes上部署Spring Boot应用 方 ...

  4. OpenShift 4 之Service Mesh教程(1)- 创建ServiceMesh环境,部署Istio的微服务

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 创建ServiceMesh环境 部署Istio的微服务 参考 创建Servi ...

  5. ServiceMesh、SideCar和Istio

    Service Mesh简介 Service Mesh直译过来就是服务网格,而他的架构就是一个个微服务组成的网络. Sidecar简介 Service Mesh中的节点就是Sidecar节点. sid ...

  6. Istio Pilot源码浅析

    ] Pilot相关代码全部在pilot包下 istio/pilot包主要负责以下几个主要职责 Pilot API server:Istio将任何底层平台的微服务信息,转换成一种规范格式,并通过Pilo ...

  7. kubesphere服务网格servicemesh(Istio)示例:部署 Bookinfo 和管理流量

    Istio,作为一种开源服务网格解决方案,为微服务提供了强大的流量管理功能.以下是 Istio 官方网站上关于流量管理的简介: Istio 的流量路由规则可以让您很容易的控制服务之间的流量和 API ...

  8. ServiceMesh最火项目:Istio架构解析

    Istio 是一个开源的服务网格,可为分布式微服务架构提供所需的基础运行和管理要素.随着各组织越来越多地采用云平台,开发者必须使用微服务设计架构以实现可移植性,而运维人员必须管理包含混合云部署和多云部 ...

  9. 云原生和ServiceMesh主要组件--理解K8s/Istio/Envoy

    1. K8s vs Istio 1.1 k8s简介 2014 年,Google 开源了 Kubernetes,随后几年得到迅猛发展,在 2017 年奠定了容器编排调度标准的地位. Kubernetes ...

  10. ServiceMesh架构的演变过程概述

    ServiceMesh概述 在软件体系结构中,服务网格是专用的基础结构层,用于通常使用Sidecar代理来促进微服务之间的服务之间通信. 具有这样一个专用的通信层可以提供许多好处,例如,提供对通信的可 ...

最新文章

  1. python手机app 授权登录_Appium+unittest+python登录app
  2. sklearn快速入门教程:(四)模型自动调参
  3. Java 中 Varargs 机制详解
  4. 设计模式之禅之六大设计原则-依赖倒置原则
  5. Queries with streaming sources must be executed with writeStream.start()
  6. ios 倒数器_如何使用倒数计时器来停止游戏 – iOS [SWIFT] –
  7. 【C++笔记】文件操作
  8. excel保存快捷键_电脑技巧篇之快捷键
  9. 初识设计模式之--简单工厂
  10. VB+ACCESS酒店服务管理系统
  11. 《英语语法新思维 基础版1》读书笔记(三)
  12. MacBook Pro打开前置摄像头
  13. WIN10专业版无法隐藏任务栏图标
  14. 语言表达能力强的人真的就情商高吗?
  15. html设置一句话的样式,页面上的div标签,其HTML代码为divid=boxstyle=color:red文字/div,为其设置CSS样式如下:...
  16. CentOS 5/6/7使用摘记
  17. python:计划持有基金n年,求n年的每年复利_利率
  18. 键盘、鼠标各键对应的ASCII码值
  19. 前端技术周刊 2018-12-24:移动无限加载
  20. android手机互联是什么软件,车机互联app哪个好_车联网和手机互联哪个好_车机互联软件排行...

热门文章

  1. unity 0 Asset Store ,package如何快速导入,快捷键
  2. Atitit 群控云控资料索引index cyonkon yunkon cyonkonYonkon群控云控方面资料.rar C:\Users\ATI\Documents\cyonkonYonko
  3. Atitit 调用百度语音识别 目录 1. 建立一个音频app项目,获得appid kersec 1 2. 直接使用JAR包步骤如下: 1 2.1. public class baiduAudio
  4. Atitit 常见触发器功能总结 目录 1.1. mysql触发器实例 插入数据前更改数据值.mhtml 1 1.2. 数据修改后更改数据值 1 1.3. 不能为空检测约束。。 1 2. Ref 2
  5. Atitit tomcat 启动报错 ZipException: archive is not a ZIP archive. 1.1. ----Should sh lib jar err... 1
  6. Atitit 利用前端cache indexdb localStorage 缓存提升性能优化attilax总结 1.1. indexdb 更加强大点,但是结果测试,api比较繁琐 使用叫麻烦些 1
  7. Atitti 图像处理 特征提取的科技树 attilax总结
  8. paip.获取地理位置根据Ip
  9. Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1
  10. paip.支付宝自动反退款器