前篇:

《ServiceMesh究竟解决什么问题》

《什么是Istio,ServiceMesh最流行落地》

Istio是ServiceMesh的产品化落地:

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

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

(1)服务发现(discovery)

(2)负载均衡(load balancing)

(3)故障恢复(failure recovery)

(4)服务度量(metrics)

(5)服务监控(monitoring)

(6)A/B测试(A/B testing)

(7)灰度发布(canary rollouts)

(8)限流限速(rate limiting)

(9)访问控制(access control)

(10)身份认证(end-to-end authentication)

等功能。

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

今天来说一下Istio的核心架构设计

关于Istio的架构设计,官网用了这样一句话:

逻辑上,Istio分为:

  • 数据平面(data plane)

  • 控制平面(control plane)

这两个词,是Istio架构核心,但又是大家被误导最多的地方。

数据平面和控制平面,不是ServiceMesh和Istio第一次提出,它是计算机网络,报文路由转发里很成熟的概念:

  • 数据平面(data plane):一般用来做快速转发

  • 控制平面(control plane):为快速转发提供必要的信息

画外音:上两图为路由器架构。

它的设计原则是:

  • 在一个路由设备里,转发是最重要的工作,它具备最高的优先级,数据平面(data plane)的设计核心就是高效转发,如何在最短的时间里处理最多的包,往往使用高效内存管理、队列管理、超时管理等技术实现在硬件里

  • 控制平面(control plane)则不然,它要实现路由协议,设备管理,IGMP,ARP协议的,它更偏向于控制与应用,往往由软件实现

画外音:

IGMP(Internet GroupManagement Protocol),一个组播协议;

ARP(Address ResolutionProtocol),这个大家比较熟悉,根据IP地址获取MAC地址;

Istio的架构核心与路由器非常类似:

  • 服务(最上面的小红框),通过本地通讯与proxy交互

  • 数据平面,由一系列proxy组成(中间一层的两个小红框),核心职责是:

(1)高效转发;

(2)接收和实施来自mixer的策略;

  • 控制平面(底下的大红框),核心是控制与应用,核心职责是:

(1)管理和配置边车代理;

(2)通过mixer实施策略与收集来自边车代理的数据;

画外音:

(1)sidecar proxy,原文使用的是envoy,后文envoy表示代理;

(2)mixer,不确定要怎么翻译了,有些文章叫“混音器”,后文直接叫mixer;

(3)pilot,galley,citadel,不敢翻译为飞行员,厨房,堡垒,后文直接用英文;

如架构图所示,该两层架构中,有五个核心组件。

数据平面,有一个核心组件:

Envoy (proxy)

Envoy的核心职责是高效转发,更具体的,它具备这样一些能力:

(1)服务发现

(2)负载均衡

(3)安全传输

(4)多协议支持,例如HTTP/2,gRPC

(5)断路器(Circuit breakers)

(6)健康检查

(7)百分比分流路由

(8)故障注入(Fault injection)

(9)系统度量

大部分能力是RPC框架都具备,或者比较好理解的,这里面重点介绍下断路器和故障注入。

断路器设计

它是软件架构设计中,一个服务自我保护,或者说降级的设计思路。

举个例子:当系统检测出某个接口有大量超时时,断路器策略可以终止对这个接口的调用(断路器打开),经过一段时间后,再次尝试调用,如果接口不再超时,则慢慢恢复调用(断路器关闭)。

故障注入设计

它是软件架构设计中,一种故意引入故障,以扩大测试覆盖范围,保障系统健壮性的方法,主要用于测试。

国内大部分互联网公司,架构设计中不太会考虑故障注入,在操作系统内核开发与调试,路由器开发与调试中经常使用,可以用来模拟内存分配失败、磁盘IO错误等一些非常难出现的异常,以确保测试覆盖度。

控制平面,有四个核心组件:

Mixer

Mixer的一些核心能力是:

(1)跨平台,作为其他组件的adapter,实现Istio跨平台的能力;

(2)和Envoy通讯,实时各种策略

(3)和Envoy通讯,收集各种数据

Mixer的设计核心在于“插件化”,这种模型使得Istio能够适配各种复杂的主机环境,以及后端基础设施。

Pilot

Pilot作为非常重要的控制平面组件,其核心能力是:

(1)为Envoy提供服务发现能力;

(2)为Envoy提供各种智能路由管理能力,例如A/B测试,灰度发布;

(3)为Envoy提供各种弹性管理能力,例如超时,重试,断路策略;

Pilot的设计核心在于“标准化”,它会将各种流控的控制命令转化为Envoy能够识别的配置,并在运行时,将这些指令扩散到所有的Envoy。Pilot将这些能力抽象成通用配置的好处是,所有符合这种标准的Envoy都能够接入到Pilot来。

潜台词是,任何第三方可以实现自己的proxy,只要符合相关的API标准,都可以和Pilot集成。

Citadel

Citadel组件,它提供终端用户身份认证,以及服务到服务的访问控制。总之,这是一个和安全相关的组件。

Galley

Gally组件,它是一个配置获取、校验、处理、分发的组件,它的设计核心在于“解耦”,它将“从底层平台(例如:K8S)获取用户配置”与Istio解耦开来。

花边:为什么80%的中文用户对Istio的二层架构的了解是错的?

很多朋友问我,通过什么渠道学习最新的技术知识,我的回答一直是,英文官网

画外音:本文所有信息来源于Istio1.1英文官网。

我在百度搜了下Istio,80%的资料,将二层架构翻译为:

  • 数据面板

  • 控制面板

画外音:大家可以百度搜一下“istio 控制面板”

一开始我极其蒙圈,因为“数据平面”和“控制平面”是非常成熟的翻译,路由器就是使用这个二层架构,ServiceMesh使用相同的架构设计进行解耦,应该不需要创造性翻译呀。

后来,我懂了:

  • 控制平面(control plane)

  • 控制面板(control panel)

半吊子英语的程序员,二手的技术文档,真害人,唉。

总结

Istio采用二层架构,五大模块,进行微服务ServiceMesh解耦:

  • 数据平面,主要负责高效转发

(1)envoy模块:即proxy;

  • 控制平面,主要负责控制与应用

(2)mixer模块:支持跨平台,标准化API的adapter;

(3)pilot模块:控制与配置envoy的大部分策略;

(4)citadel模块:安全相关;

(5)galley模块:与底层平台(例如:K8S)配置解耦;

实施与控制分离,经典的架构设计方法,GOT?

思路比结论重要。

Istio分层架构?80%的人有误解相关推荐

  1. Service Mesh 最火项目 Istio 分层架构,你真的了解吗?

    作者 | 王夕宁  阿里巴巴高级技术专家 参与"阿里巴巴云原生"公众号文末留言互动,即有机会获得赠书福利! 本文摘自于由阿里云高级技术专家王夕宁撰写的<Istio 服务网格技 ...

  2. iOS8开发视频教程Swift语言版-Part 9:iOS分层架构设-关东升-专题视频课程

    iOS8开发视频教程Swift语言版-Part 9:iOS分层架构设-8532人已学习 课程介绍         传统企业级项目开发需要低耦合性,那么iOS这种相对比较小的应用开发需要么?答案是肯定的 ...

  3. 你真的了解分层架构吗?——写给被PetShop毒害的朋友们 (转)

    转自:http://www.cnblogs.com/leoo2sk/archive/2009/06/01/1494095.html 一叶障目 .NET平台上的分层架构(很多朋友称其为"三层架 ...

  4. 你了解分层架构吗?给被PetShop“毒害”的朋友(转)

    笔者在仔细阅读了大量这方面文章后,认为许多朋友在分层架构的理解上存在两个比较大的偏颇: 1.没有从本质角度去理解分层的内涵,而只是了解其表象. 2.对分层架构的理解过于狭隘,只是少数概念,而又不够深入 ...

  5. 走向.NET架构设计—第四章—业务层分层架构(后篇)

    走向.NET架构设计-第四章-业务层分层架构(后篇) 前言: 在上一篇文章中,我们讨论了组织业务逻辑的模式:Transaction Script和Active Record,Domain Model. ...

  6. 基于.NET平台的分层架构实战(一)——综述

    通过浏览博客园的文章发现,很多朋友对分层架构特别感兴趣,刚好我刚做完的毕业设计就是专门研究.NET平台上分层架构的(题目叫"基于.NET平台的分层架构与设计模式应用研究").通过做 ...

  7. 这 3 种 DDD 分层架构的模式,你掌握了么?

    -     前言    - 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识. -     DDD 的基本概念     - DDD(Domain DrivenDesign, ...

  8. DDD分层架构的三种模式

    本文来说下DDD分层架构的三种模式 文章目录 概述 DDD 分层架构 模式一:四层架构 模式二:五层架构 模式三:六边形架构 本文小结 概述 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和 ...

  9. 架构的变迁,从分层架构先聊起

    摘要:分层架构简单而高效,业界已经有很多成熟的应用,对那些项目刚刚起步,架构师们还没想好要采用哪种架构模式的系统而言,这是非常适合的. 前言 软件刚出现的时候,还是大型计算机的年代,一个软件系统一般都 ...

最新文章

  1. jQuery的效果方法
  2. pandas python2.7_python-2.7 – Pandas Seaborn安装
  3. 半个小时用计算机怎么算,CPA机考计算器操作指南,掌握这些快捷键,考试“延长”半小时!...
  4. linux网卡备份还原,CentOS6.x双网卡采用主-备份策略绑定(bond)
  5. 实战案例:场景测试之ATM机取款业务测试
  6. Linux搭建NFS文件服务器
  7. editorMd插件的使用总结(包括开启图片上传及拖拉粘贴上传图片)
  8. 小程序开发笔记(二):微信小程序富文本编辑器editor的使用
  9. uniapp安卓端禁止截屏允许截屏
  10. redis简单分布式锁实现 超简单的那种
  11. 牛刀:房价泡沫的破灭只是人性的回归
  12. Linux git配置
  13. python 网页版笔记_【Python笔记】Python网页正文抽取工具
  14. cdp4j介绍及使用
  15. 常用的美颜滤镜sdk算法
  16. srm系统的供应管理策略
  17. 回流焊机T962维修
  18. Linux_UNIX编程手册-读书笔记-第五十四章(POSIX共享内存)
  19. 数据分享_SoilGrids世界土壤信息数据
  20. 三壶问题 java实现

热门文章

  1. 背完这444句英语,你的口语绝对不成问题了
  2. Python实现二分查找
  3. 安全篇之手机数字密码九宫格究竟哪个更安全?
  4. Python零基础学习笔记(二十二)—— set
  5. input的readonly属性与TextBox的ReadOnly和Enabled属性区别
  6. Android开发者必备:推荐一款助力开发的开源APP
  7. 【Karma】多环境自动测试框架 -- 基础教程
  8. HDU 2079-课程时间(生成函数)
  9. 软件级负载均衡器(LVS/HAProxy/LVS)的特点简介和对比
  10. 我和我老妈的经典搞笑故事[原创]