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

简介: 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,通过动手和实践来加深印象。

参考

相关文章
|
机器学习/深度学习 网络协议 vr&ar
proteus仿真软件中芯片的命名规则与封装方法(详细版)
proteus仿真软件中芯片的命名规则与封装方法(详细版)
2014 0
|
canal 消息中间件 存储
DDD领域驱动设计实战(六)-理解领域事件(Domain Event)(中)
DDD领域驱动设计实战(六)-理解领域事件(Domain Event)(中)
1216 0
|
机器学习/深度学习 人工智能 自然语言处理
【专栏】Python在人工智能领域的应用现状、优势及未来趋势
【4月更文挑战第27天】本文探讨了Python在人工智能领域的应用现状、优势及未来趋势。Python作为数据科学、机器学习、深度学习和自然语言处理的首选语言,拥有丰富的库如NumPy、Pandas、TensorFlow和NLTK等。其简洁易学、跨平台和活跃社区等特点促进了AI的普及和发展。未来,Python将在强化深度学习、融合新兴技术、提高可解释性和人才培养等方面持续发挥关键作用。
3149 2
|
缓存 监控 Shell
如何使用 HBase Shell 进行数据的实时监控和备份?
如何使用 HBase Shell 进行数据的实时监控和备份?
350 5
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
351 4
|
Java Spring
SpringBoot入门 - 定制自己的Banner
SpringBoot入门 - 定制自己的Banner
259 2
SpringBoot入门 - 定制自己的Banner
|
存储 SQL NoSQL
详解数据库管理系统(DBMS)
【8月更文挑战第31天】
4158 0
|
SQL 分布式计算 Apache
Apache Superset
Apache Superset
|
消息中间件 JSON Cloud Native
Filebeat收集日志的那些事儿
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 【编者的话】最近因为云原生日志收集的需要,我们打算使用Filebeat作为容器日志收集工具,并对其进行二次开发,因此笔者将谈谈Filebeat收集日志的那些事儿。
Filebeat收集日志的那些事儿
SpringCloud Nacos服务注册指定注册的ip和端口号
SpringCloud Nacos服务注册指定注册的ip和端口号

热门文章

最新文章