内容简介:written by Alex Stocks on 2019/05/21,版权所有,无授权不得转载愚人曾对 Service Mesh 有成见:以为其不过又是一些西方商业公司的 “概念党” 们基于利益包装出来的有一个所谓的新概念,然后国内一帮 “布道师” 们便开始锣鼓喧天地抬轿子引进来。基于这种认知愚人去年一年躲开了一些机会,但 "躲得了初一躲不过十五",今年刚进公司第一天,便被同事告知工作内容之一便是某系统的 Service Mesh 改造工作......
written by Alex Stocks on 2019/05/21,版权所有,无授权不得转载
愚人曾对 Service Mesh 有成见:以为其不过又是一些西方商业公司的 “概念党” 们基于利益包装出来的有一个所谓的新概念,然后国内一帮 “布道师” 们便开始锣鼓喧天地抬轿子引进来。
基于这种认知愚人去年一年躲开了一些机会,但 "躲得了初一躲不过十五",今年刚进公司第一天,便被同事告知工作内容之一便是某系统的 Service Mesh 改造工作......
考虑到饭碗,愚人还是很愉快无节操地拥抱项目开干了。随着工作展开逐步了解 Service Mesh 的内容之后,对这项技术有了兴趣,进而有了自己的一些看法。
1 k8s 缺陷
以前个人有愚见,Service Mesh 概念其实不过是新瓶装老酒。大概 2012 年时,愚人在 “南方某厂” 干活时,曾见过一个称之为 nlb 的系统,其核心组件 proxy 工作职责有:
- 1 从配置中心拉取配置;
- 2 为 client 到 zookeeper 进行服务发现;
- 3 为 server 向 zookeeper 进行服务注册;
- 4 记录每个服务的在某段时间内的成功率,基于此权值进行随机均衡转发网络请求;
- 5 定时把服务质量上报到监控中心;
后来这套系统被移植到其云系统之上时,被改名为 F5。当看到后来的 Service Mesh 概念时,便有种孩子出生六年了还是个 nobody,到六岁上小学时才被匆匆命名之觉。
当然以上为个人愚见,按照正史记载:2017 年 Service Mesh 概念之所以出现且存在是为了减轻网络中心控制节点的压力。
以 2015 年出现的 k8s 的为例,其每个 Worker Node 需要同 Master Node 之间通信以上报容器状态并接收控制信息,Master Node 便成为整个系统的单点。有了单点,上帝需要对其拆分,于是便有了 Istio。愚人以为 Istio 其实也不过是从十年发展历史的 envoy 某些概念的拆分组合后形成的。
淡然,本文无意向深处阐述 k8s 的各种概念【那是因为目前我还没入门^_^】,只能从一些虚处入手,结合个人以往的粗浅项目经验来谈谈自己的 Service Mesh 见识。
2 “经典” 框架
Istio 要求每个容器有自己的代理(Sidecar),所有 Sidecar 直接进行数据通信【数据平面】而后组成一个服务网格(Service Mesh),从 Istio 接收配置信息且进行服务发现并进行状态上报【控制平面】。
Sidecar 接管容器应用的所有网络流,负责流量管理(服务发现、服务治理、流量控制)、安全管理、健康检查和监控上报。某容器出现故障便会被系统网络隔离,而后会被新容器替换之,并不影响整体网络健康度。整体网络弹性可伸缩,且流量会被精细调度,系统整体不存在单点。
Istio 官方给出了如下一个基于 Envoy 作为 Sidecar 的 "经典" Servidce Mesh 宏观视图:
整体框架图甚是精简,若把其嵌入 k8s,便有如下让密集恐惧症患者们肃(望)然(而)起(生)敬(畏)的围棋图:
愚人初学 k8s 已经被其各种名词吓倒,再加上 istio 的各种 “新概念”,心中只有跪拜的想法。虽如是,二者的功能都是搭建一个健康的 “数据管道”,其本质必脱离不了 “流量管控”。
3 Service Mesh 升级流程
应用无论是否运行在 Service Mesh 系统之中,都有需要升级之时,即使 Service Mesh 系统自身也面临升级问题。Service Mesh 系统升级,核心便是众多 Sidecar 的升级,最高要求就是做到 Sidecar 升级时,其服务的应用系统无感【高大上说法是 “在飞驰的火车(鹅厂用词)/飞机(猫厂用词)上换引擎”】。
个人曾见到这样的说法:基于 Istio 的 Service Mesh 系统的 Sidecar 如果能做到热升级,其升级便能做到 “丝滑般柔顺”。但个人在基于某 sidecar 进行定制开发时,从一起干活的同事的开发经历中见到的真实情况是:为了做到对应用系统无感,sidecar 热升级【如蝉蜕变】花费 30s,给其定义了若干状态,然后形成一个巨复杂的状态机等待业务方去填充业务逻辑,且整个过程某些子服务的网络流还是会暂停的!
当然,身为高段位的我厂同事处理这种流程还是手到擒来,最后很 ease 地把整个流程搞定了,但最终的结果是业务流程也配合做了改变。事后反思整个流程,个人的看法是:既然现实中做不到热升级过程中的 “丝滑般柔顺” 和 “应用层无感”,为何不通过服务降级这种更方式进行简单地流程处理呢?
升级的最终结果只要做到应用层服务流程不中断即可,不必强调 “应用层无感知”。换一只认知便是换需要一种处理方法,通过服务降级,虽然整个流程让应用层也分担整个过程的复杂度,但也降低的 Sidecar 自身处理整个升级流程的复杂度【复杂性守恒定律】,且应用层的流程处理完全可以经梳理后形成标准,在应用层的网络 SDK 层内处理整个升级流程,最终的结果其实能做到 “应用开发者无感知”。
如上图【源自 参考文档1 】中给出了唯品会公司的 Service Mesh 框架以 服务降级 手法处理 Service Mesh 框架升级流程:“如果本地Proxy不可用或宣称自己准备关闭,就将请求无损转发到Remote Proxy,再启动一个监视器观察本地Proxy什么时候重新可用"【源自 参考文档1 】。
其核心在于其 “Remote Proxy Cluster”,解决手法简单漂亮,整个升级过程中没有 “热升级” 处理流程中需要旧版本 Sidecar 容器和新版本 Sidecar 容器共存而引起的额外资源占用问题。
4 未来的 Service Mesh
Sidecar 作为网络层组件接管了其服务应用的流量后,服务应用层以 local 方式连接 Sidecar,可以实现自身网络层处理逻辑的解耦。
服务应用层无论是各种跨进程访问方式还是走本机协议栈形式以 local 形式连接 Sidecar,但毕竟多了一个 “hop”,对整理系统的吞吐、延迟都有影响,且多了这么一个组件必然会增加硬件资源地消耗,所以有一个问题便是:Sidecar 这个组件是必不可少的吗?
在 Service Mesh 概念出来之前,服务治理框架有谷歌的 gRPC、鹅厂的 Tars、猫厂的 Dubbo【内部有一个 HSF】等,其本质是以 SDK 形式嵌入服务应用的网络层实现整体系统的可靠通信。在 Service Mesh 概念出现后,这些组件当然还是会以各种形式进化下去,gRPC 地进化应该会最引人注目。
上图详细得描述了 gRPC 的 Service Mesh 进化方向,其最终形态是:一个无 Sidecar 的 Service Mesh。
gRPC 自身由于协议的向前先后兼容性,所以基于其上的应用能够做到升级过程中服务的兼容性不存在问题,则通过滚动升级可以做到升级过程中 “服务不中断”,所以没有 Sidecar 的 Service Mesh 形态随出乎意料但并不令人意外。
谷歌创造了 k8s 和 istio,谷歌也创造了 gRPC。谷歌未来的 Service Mesh 框架具体会以何种形态面世,愚人无从预测,然其生态中应该少不了自家的 k8s 和 istio,但是没有 Sidecar。
参考文档
扒粪者-于雨氏
- 2019/05/21,于雨氏,于 G4x,初作此文。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 关于二叉树形态的推导
- 一起来学opencv(四):形态转换
- 敏捷DoD和DoR的多种形态
- Opencv图像处理系列(五)—— 形态变化
- opencv中的图像形态学——腐蚀膨胀
- 深度 | 解读神经形态计算:从基本原理到实验验证
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CSS实战手册(第2版)
[美] David Sawyer McFarland / 俞黎敏 / 电子工业出版社 / 2010-6 / 69.80元
本书从介绍最基本的CSS知识开始,到建立用于打印网页的CSS和改进你的CSS习惯的最佳实践。将关于CSS的选择器、继承、层叠、格式化、边距、填充、边框、图片、网站导航、表格、表单、浮动布局、定位网页上的元素,以及用于打印网页的CSS等技术通过逐步地讲解与教程串联了起来。每章内容从简单到复杂,一步一步地建立起一个完整的教程示例,并在每章都会详细讨论一些技巧、最佳实践和各浏览器之间一致性的兼容问题及如......一起来看看 《CSS实战手册(第2版)》 这本书的介绍吧!
HEX HSV 转换工具
HEX HSV 互换工具
HSV CMYK 转换工具
HSV CMYK互换工具