系列文章目录

第一章 什么是服务网格service-mesh??


什么是服务网格service-mesh?

  • 系列文章目录
  • 前言
  • 一、服务网格service-mesh是什么?
  • 二、为什么要使用服务网格?
  • 三、服务网格的适用场景?
  • 四、主流服务网格实现
  • 总结

前言

服务网格service-mesh作为云原生cloudNative领域最炙手可热的领域,已经被绝大多数云厂商如GCE,AWS,AliCloud等广泛使用。服务网格为大规模复杂度极高的云原生服务提供了专有的基础设施层,减轻了业务人员的非业务投入压力。

但是service-mesh本身引入的概念难以理解,技术复杂度很高,并且大多数从业者在实际项目中,连云原生技术都很少使用到,更不要说基于云原生的service-mesh技术。

因此,本系列文章通过笔者在某大厂云原生改造过程中的总结实践,深入浅出的为您剖析service-mesh的全貌。希望让你进一步理解service-mesh的概念、技术细节、落地实践,对您个人的技术能力提升、负责的项目都能带来一定的收益。


一、服务网格service-mesh是什么?

服务网格service-mesh是一个形象化的词语表达:service(服务)-mesh(网格),它描述了服务间的依赖形态,就像下面这张网一样:

其中,深色的是我们平时工作中接触最多的业务微服务,旁边蓝色的被称为边车(sidecar)服务,sidecar作为业务微服务的“代理”,处理与其他业务微服务sidecar之间的非功能需求,如网络通信、安全、监控、流量控制等。多个sidecar之间的连接和交互组成了“网格(mesh)”。
对于服务网格,可以参考如下几个权威定义:

  1. 维基百科

在软件架构中,服务网格是一个专用的基础设施层,用于使用代理促进服务或微服务之间的服务到服务通信。专用通信层可以提供许多好处,例如提供对通信的可观察性,提供安全连接,或自动重试和回退失败的请求。
服务网格由与应用程序中的每个服务配对的网络代理和一组任务管理流程组成。代理称为数据平面,管理进程称为控制平面。数据平面拦截不同服务之间的调用并“处理”它们;控制平面是网格的大脑,负责协调代理的行为,并为运维人员提供 API 来操作和观察整个网络

  1. servicemsh.es

如果没有服务网格,每个微服务都会自行实现业务逻辑和横切关注点 (CCC)。
使用服务网格,许多 CCC(如流量指标、路由和加密)被移出微服务并进入代理。业务逻辑和业务指标保留在微服务中。传入和传出请求通过代理透明地路由。除了一层代理(数据平面)之外,服务网格还添加了一个所谓的控制平面。它将配置更新分发给所有代理,并接收代理收集的指标以进行进一步处理,例如由 Prometheus 等监控基础设施。

根据如上引用的定义,总结一下服务网格的几个特点:

  1. 非侵入式代理:服务网格引入的sidecar作为业务微服务的代理,承担了非业务功能:如流量管理、安全认证、监控运维等。sidecar卸载掉了业务微服务的通用功能,使得业务开发人员专注于业务逻辑开发,无需关注其他非业务需求。
  2. 非业务公共能力解耦:业务微服务功能与sidecar非业务功能分离解耦,业务微服务专注于业务逻辑,与业务逻辑无关的DFX特性,如流量管理、安全认证、监控运维等,全部旁路到sidecar容器统一处理;
  3. 管理面数据面分离:这也是服务网格的一大优势,通过将控制面与数据面分离解耦,达到不同问题域的解耦目标。控制面只聚焦安全、监控、流量等策略的处理和下发,数据面只聚焦如何执行策略,各自的故障不会相互影响,例如控制面的故障不会影响数据面的流量转发。后面会进一步介绍控制面数据面分离的架构。

二、为什么要使用服务网格?

服务网格的价值就在于将与业务无关的公共能力,解耦到单独的服务sidecar进行处理。为什么这样说?

我们可以简要回顾一个新业务服务的成长历程:
最开始业务比较简单,研发人员可以很直接的去编写业务代码。比如一个spring MVC的web服务,去执行一些简单的CURD逻辑。

随着业务的不断增长,用户量逐步增加,服务会面临很多的挑战,例如过载导致的服务请求超时、安全认证、日志调用链、业务无损的升级变更,这些都需要大量的研发和运维投入。而这些能力本质上,都是与业务无关的通用能力。

如果没有服务网格,每个业务服务都需要重复构建这些相似的功能,而且这些能力都需要侵入式的代码开发,投入较大并且对业务功能的可用性会造成影响,但是却对业务本身的增长没有任何收益。而服务网格通过注入非侵入的业务sidecar容器,无需修改业务服务任何一行代码,就可以提供流量治理、可观测性以及默认访问安全等能力,使业务服务可以低成本的享受这些能力。

三、服务网格的适用场景?

软件世界没有银弹,任何好的技术是把双刃剑,service-mesh也要结合具体场景、具体问题来看落地的可能性。

服务网格的设计初衷,就是为了解决业务服务的非业务功能部分复杂度。只要业务服务发展到一定规模,遇到了诸如分布式微服务内/外的流量调度问题、安全隔离和认证以及监控指标采集和全局调用链分析等,都可以复用服务网格的现有能力。

当然,服务网格的引入本身会带来额外的成本:包括资源投入成本、运维投入成本、业务服务改造成本,需要结合业务线的具体情况进一步评估:

  • 资源投入成本:第一是网格控制面组件的引入(以istio为例,包括istiod,Prometeus,jagger),带来的部署资源消耗;第二是数据面的每个业务微服务都需要注入sidecar,带来的部署资源消耗和流量进出多一跳的性能消耗。尤其是数据面的性能消耗,对于某些性能敏感的微服务需要仔细评估。当然,也可以通过水平扩容的方式来解决。

  • 运维投入成本:服务网格为业务服务提供了便捷的运维监控能力,但其自身引入的运维复杂度非常高,例如服务网格中最流行的istio,引入了VirtualService、DestinationRule、ServiceEntry等模型,动辄上百行的流量规则配置,在现网运维上需要非常大的投入。同时,端到端的追踪流量策略在哪些微服务上生成、下发、生效,目前也没有成熟的工具。

  • 业务服务改造成本:服务网格体系一般是建立在云原生的体系架构上,即部署在K8s之上并且使用Prometeus,jagger,Zipkin等k8s生态组件。对于没有容器化的业务微服务如部署在VM、物理服务器的服务,需要先进行容器化改造后才能享受到服务网格的全部能力。

四、主流服务网格实现

如下是几种主流的服务网格产品的特性对比:

如上所述,Istio在流量治理领域支持丰富的流量策略如按流量比例切流、按请求header和path切流等;在安全韧性领域支持断路器、默认失败或超时重试、故障注入等;在平台支持性上,支持云原生的K8s、主流云厂商平台和多网格的扩展。同时Istio由Google主导并被很多大厂落地使用。 因此,后续文章以Istio作为服务网格的代表性产品,进一步深入探索。


总结

本文初步介绍了服务网格的基本概念、价值点、适用场景以及当前多种服务网格的产品特性对比,给想了解服务网格的各位读者一个初步的介绍,后续的文章会对服务网格当前最流行的开源项目istio为例,做深入的讲解。欢迎各位读者继续阅读。

参考:

  1. servicemesh.es
  2. Istio官方介绍

什么是服务网格service-mesh?相关推荐

  1. 下一代微服务架构——服务网格Service Mesh

    下一代微服务架构--服务网格Service Mesh 下一代微服务架构--服务网格Service Mesh 服务治理 什么是服务治理 系统架构形态演进 现阶段存在的问题 Service Mesh是什么 ...

  2. 什么是服务网格(Service Mesh)

    本文来说下什么是服务网格 文章目录 Service Mesh是什么 服务调用复杂度问题 Service Mesh怎么解决的 Service Mesh功能特性 Service Mesh实现 本文小结 S ...

  3. istio简介和基础组件原理(服务网格Service Mesh)

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 微服务对于每个功能的开发细化了,但是对与系统的管理复杂度增强了,尤其是网络流量的管理. 试想一下:黑名单,导流,加密,访问控制,流量监控,熔断,限速, ...

  4. 服务网格(Service Mesh)是什么?

    1. Service Mesh是什么(What) Service Mesh中文含义服务网格,是一种微服务网络层治理方案. 服务网格将微服务中与网络相关的部分抽象出来,形成一个应用层的抽象网络层,专门负 ...

  5. 服务网格Service Mesh学习整理

    服务网格从总体架构上来讲,就是一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成. 代理在服务网格中被称为数据层或数据平面(data plane), 管理流程被称为控制层或控制平面(control ...

  6. 微服务的未来,服务网格Service Mesh!!!

    微服务确实为分布式架构带来了极大的改善,但是侵入到服务中的各种配置也确实令人眼花缭乱,最近偶然接触到了Service Mesh(服务网格),感觉确实是个好东西,下面借鉴一些网络资源,简单的整理一下思路 ...

  7. Linkerd 2.11 服务网格Service Mesh 开箱

    客户端安装 https://github.com/linkerd/linkerd2/releases/download/stable-2.11.1/linkerd2-cli-stable-2.11.1 ...

  8. 浅谈服务治理、微服务与Service Mesh(一二三)

    本文为转载#原文链接:易商阜极 引言 本系列文章将为大家介绍当下最流行的服务治理.微服务等相关内容,从服务治理.SOA.微服务到最新的服务网格(Service Mesh)进行综合介绍和分析.作为本系列 ...

  9. 下一代微服务(service Mesh)

    有没有同学了解过Service Mesh. 什么是Service Mesh? 简单来说,它可以直接翻译成服务网格.它是一个基础设施层,用于处理服务之间的通信,并且负责请求的可靠传输.什么意思呢? se ...

  10. 下一代微服务!Service Mesh 2018年度总结

    作者团:敖小剑.崔秀龙.单家骏.宋净超.田晓亮.徐蓓.张超盟 \n 前言 \n 在2017年年底,在Service Mesh刚刚兴起之时,应InfoQ的邀请撰写过一篇名为 "Service ...

最新文章

  1. 千万用户同时在线,优酷智能档在双11“猫晚”直播如何防卡顿?
  2. 支持取消操作和暂停操作的Backgroundworker
  3. 2020腾讯二次元营销通案
  4. Unity 4 3 制作一个2D横版射击游戏 2
  5. JavaScript的初步探索(JS的入坑笔录)
  6. ATL接口映射宏详解
  7. 软件测试之如何进行易用性测试?
  8. 平衡小车simulink仿真_到底该用哪款神器来仿真我的机器人?
  9. 连接数据库查询数据的工具类(底层实现)——以查询Phoenix为例
  10. scrapy--Rule()与LinkExtractor()函数理解
  11. 施耐德电气:“三步走”实现配电数字化,制胜可持续未来
  12. Python 05 包Packet
  13. 发送邮箱验证码进行注册验证
  14. 如何使用计算机对文件修改密码,怎么给文件夹设密码-加密文档及给它们修改删除密码的具体操作方法...
  15. 如何查询往年国家自然科学基金
  16. Linux就业形势报告
  17. 一个开源经典的MCU菜单框架设计
  18. 洛谷_P2655 2038年问题(尚贤)
  19. 赛扬处理器_海尔逸15笔记本仅2299元,其酷睿10代赛扬处理器是什么情况?
  20. 洛谷 P1536 村村通

热门文章

  1. 如何把各种API文档放到任务栏的右下角
  2. 动荡下的科学投资 ”量加“掀起新一代炒股体验
  3. java自动拆箱时的nullPointException问题解析
  4. idea集成git合并分支到主干
  5. 一次并行化实践——通过重写全局newdelete操作符
  6. 51单片机过时了?为什么还有人学51呢?陈老师为你解答
  7. 一个非常棒的 RTSP OVER HTTP
  8. 亚马逊kindle设置_如何在您的亚马逊账户上重命名和删除Kindle设备
  9. 佳能Canon imagePROGRAF iPF8410 打印机驱动
  10. C#CAD二次开发学习 两条直线求交点的方法IntersectWith的一点整理