对 Service Mesh 望而却步?可能都没理解这一点

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: Service Mesh 发展已经有 6-7年的时间,很多人对 Service Mesh 只停留在知道的水平上,特别是很多技术人第一次接触到 Service Mesh,看到服务网格的解释,看到 Istio 的架构,对这门技术仍然云里雾里。实际上,劝退大多数人的不是技术,而是概念本身。

Service Mesh 发展已经有 6-7年的时间,很多人对 Service Mesh 只停留在知道的水平上,特别是很多技术人第一次接触到 Service Mesh,看到服务网格的解释,看到 Istio 的架构,对这门技术仍然云里雾里。


实际上,劝退大多数人的不是技术,而是概念本身。

大部分的架构演进止步于微服务

架构的演进都是为了解决问题,然而现实是,大部分的公司架构演进止步于微服务。

微服务现在大行其道,但是对于大多数的公司而言,除非使用 Java 等又大量框架和库能支持快速落地,其他语言技术栈可能找一些稍微通用的框架修修改改。甚至见过 RESTful API 格式提供的服务,以手写 SDK 调用其他服务这种最简陋原始的服务发现机制。

现实有两点:

  1. 少部分公司能够落地到接近微服务最佳实践,可能没有更大的业务体量迫使架构进一步优化。
  2. 更多公司似是而非的进行着架构落地,往微服务正走,支撑过业务的快速发展,足矣。甚至业务的生命周期比软件的生命周期更短。

问题是什么?

在落地微服务之后,在业务体量或数据量疯狂扩张,服务节点数量成倍增加。甚至服务拓扑图够成了一张立体的网。

网络异常,图片无法展示
|

我们都知道微服务治理是最重要的功课,如果所有的微服务都统一语言和技术栈还好。假如整个业务体系再跨语言,那治理微服务诸如重试、限流、认证等等手段难不成都要跨语言、跨不同的客户端去实现一遍?假如某一次请求异常,又如何再跨语言跨技术栈等复杂的系统中快速定位问题?

我们更应该清楚的看到在跨端、跨语言、跨技术栈、又特别大体量业务和网络环境的情况下:

  1. 开发团队要维护多套框架或组件;
  2. 框架或组件的升级或修复都要迫使所有业务方主动升级依赖;
  3. 跨服务特别是跨技术栈的网络问题因为调用链路冗长复杂,如何快速定位?
  4. 如果让流量统一可控?若发生未知的网络错误,如何统一处理?难道要开发人员都抄一份代码?

所有问题都可以通过增加一层来解决

我们以服务发现最简单的治理手段举例,我们已知的这几种服务发现方式:

  1. 客户端做发现

现有 RPC 框架的的服务发现多数是基于这种方式实现的,大致流程是,客户端定期从注册中心获取一组服务实例,根据一定规则和发现机制选取其一,然后发起 RPC 调用。

网络异常,图片无法展示
|

这种方式最常见,但并不是完美的,比如 负载均衡等逻辑是和客户端代码耦合(要升级算法必须升级客户端所在的 RPC 框架);多语言的发现机制要都实现一遍等的维护成本等;

  1. 集中式 LB 做转发

所有服务发现统一走一个 LB 或路由器,缺点也很明显,容易制造新的单点,且增加了的维护成本和调用次数。最开始的微服务可能会这么做,后续也很少这么用。

网络异常,图片无法展示
|

有没有折中的做法?

现在,客户端做服务发现是常见的方式,那比如我们是否能把耦合、维护成本高的常用公共逻辑抽出来?加一层?比如弄一个代理?

代理如何做?

Service Mesh 一言以蔽之:就是以代理的形式对服务进行治理,特别是网络层面的。所有流量的入网和出网请求都经过这个代理统一处理。

  1. 如 nginx 等产品的代理,最原始的方式实现,但是开发维护成本高,还容易出问题。

网络异常,图片无法展示
|

  1. 云原生时代演进出的优秀的开源产品,如 Linkerd Istio 等为了更好的解决这类问题,演进出了新的架构和解决思路:

网络异常,图片无法展示
|

即:每个代理组件都是独立于服务实例的,伴生的但对应用来说又是透明的。看起来像这样,绿色的是应用服务,蓝色的就是代理:

网络异常,图片无法展示
|

进一步抽象:

网络异常,图片无法展示
|

这些蓝色代理组成的拓扑网络,就是 Service Mesh

边车模型

将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。 使用此模式还可以使用异构组件和技术来构建应用程序。

边车模型是云原生时代应运而生的一种架构方式,特别是 k8s 体系中,在一个 Pod 中,除了提倡一个 Pod 一个应用或服务实例,还可以额外设置一个容器(进程)以伴生的方式为应用做一些协同工作

网络异常,图片无法展示
|

小结

Service Mesh 是对代理层的拓扑图抽象描述!

以往我们学习新技术可能会从概念本身出发,但是这种方式放在 Service Mesh 学习上行不通。

Service Mesh

官方定义

A service mesh is a dedicated infrastructure layer for handling service-to-service

communication. It’s responsible for the reliable delivery of requests through the

complex topology of services that comprise a modern, cloud native application. In

practice, the service mesh is typically implemented as an array of lightweight

network proxies that are deployed alongside application code, without the

application needing to be aware.

我们针对官方定义抽取几个关键点:

  • 架构定位:基础设施层
  • 任务:处理服务间通信
  • 组件形式:轻量的网络代理
  • 部署方式:与应用代码一同部署,但不被应用感知

引入之后有什么好处?

  • 解构,将业务代码和可能会带来风险和维护成本的基础代码进行分离。

如果您正在使用微服务,或者花费大量时间编写基础架构代码来解决弹性、安全性和可观察性问题,那么研究服务网格是值得的。

  • 开发效率的提升,让开发人员更专注的实现业务价值,让基础组的同事用最小的代价统一的解决共性的问题,以实现更快速的测试和迭代。
  • 降低迁云成本

服务网格使云迁移更容易、更无缝

  • 解决系列服务治理问题,如可观测性的流量监控和日志追踪、安全性的通信加密与身份认证、流量管理等等

具体能做什么?

  • 负载均衡
  • 服务发现
  • 健康监测
  • 验证
  • 流量管理和路由
  • 断路和故障转移策略
  • 安全
  • 日志记录、指标和遥测
  • 故障注入

总结

我们发现学习一门技术最好能从问题触发,了解问题的背景和解决思路才能更好的搞懂创造性的事物。创造性的词汇往往是对问题和描述的高度抽象,很难通过字眼拆解以达到理解的目标。

以上通过的微服务遇到的问题和解决思路的讲解,希望今天能帮助大家了解 Service Mesh 的由来。如果你想快速上手,深入理解 Service Mesh,强烈打开技术文档上手一个 Demo,通过动手和实践来加深印象。

参考

相关文章
|
6月前
|
负载均衡 监控 Cloud Native
|
6月前
|
Kubernetes 网络协议 数据库
在Service Mesh内访问网格外的服务
阿里云服务网格ASM提供了访问外部服务的三种方式,包含设置外部服务访问策略、配置ServiceEntry和设置拦截对外访问的网段。本文介绍如何在服务网格ASM上访问外部服务。
96 0
|
6月前
|
负载均衡 监控 Cloud Native
Service Mesh的实现原理
【5月更文挑战第6天】Service Mesh是一种针对云原生应用的服务治理技术,通过轻量级网络代理(SideCar)实现服务间的通信和可靠性保证,无需代码集成。它解决了跨语言服务调用和云原生服务治理的问题。
|
6月前
|
负载均衡 监控 Cloud Native
Service Mesh 的实现原理
【2月更文挑战第20天】
|
运维 监控 安全
什么是service mesh?
什么是service mesh?
|
Rust Kubernetes 负载均衡
Service Mesh 体系解析
Service Mesh(服务网格)诞生于云原生生态领域的潮流中,虽然大家对这一技术生态充满不确定性,甚至难以接受,然而,如果我们消除外面的“杂声”,细心洞察里面的细节,或许能有不一样的收获,毕竟,所有新技术的出现是为了解决业务痛点,而非是为了一些没用意义的炒作。
366 0
|
Kubernetes 监控 Devops
Service Mesh 介绍| 学习笔记
快速学习 Service Mesh 介绍
|
负载均衡 监控 网络协议
Service Mesh之Sidecar
时间总是给你意外,在使用微服务架构吗?还在考虑使用哪种微服务架构呢?要准备大干一场,学习spring cloud吗? 还在纠结这些问题时,这些技术都将要被淘汰了,下一代微服务Service Mesh出现了
279 0
Service Mesh之Sidecar
|
负载均衡 Java 微服务
服务网格(Service Mesh)是什么?
概述服务网格的概念,了解服务网格的作用及业界产品
357 1
|
Cloud Native 前端开发 Dubbo
到底谁才需要Service Mesh?(二)
到底谁才需要Service Mesh?(二)
133 0
到底谁才需要Service Mesh?(二)