ServiceMesh究竟解决什么问题?

简介: 服务网格(ServiceMesh)这两年异常之火,号称是下一代微服务架构,接下来两个月,准备系统性的写写这个东西,希望能够让大家对最新的架构技术,有个初步的了解。

服务网格(ServiceMesh)这两年异常之火,号称是下一代微服务架构,接下来两个月,准备系统性的写写这个东西,希望能够让大家对最新的架构技术,有个初步的了解。

画外音:我的行文的风格了,“为什么”往往比“怎么样”更重要。

互联网公司,经常使用的是微服务分层架构。

画外音:为什么要服务化,详见《服务化到底解决什么问题?》。

随着数据量不断增大,吞吐量不断增加,业务越来越复杂,服务的个数会越来越多,分层会越来越细,除了数据服务层,还会衍生出业务服务层,前后端分离等各种层次结构。

画外音:分层的细节,详见《互联网分层架构演进》。

不断发现主要矛盾,抽离主要矛盾,解决主要矛盾,架构自然演进了,微服务架构,潜在的主要矛盾会是什么呢?

引入微服务架构,一般会引入一个RPC框架,来完成整个RPC的调用过程。

image.png

如上图粉色部分所示,RPC分为:

  • RPC-client,它嵌在调用方进程里
  • RPC-server,是服务进程的基础

画外音:《离不开的微服务架构,脱不开的RPC细节》。

不只是微服务,MQ也是类似的架构:

image.png

如上图粉色部分所示,MQ分为:

  • MQ-send-client
  • MQ-server
  • MQ-recv-client

画外音:《MQ,互联网架构解耦神器》。

框架只是第一步,越来越多和RPC,和微服务相关的功能,会被加入进来。

例如:负载均衡

image.png

如果要扩展多种负载均衡方案,例如:

  • 轮询
  • 随机
  • 取模
  • 一致性哈希

RPC-client需要进行升级。

例如:数据收集
image.png

如果要对RPC接口处理时间进行收集,来实施统一监控与告警,也需要对RPC-client进行升级。

画外音,处理时间分为:

  • 客户端视角处理时间
  • 服务端视角处理时间
  • 如果要收集后者,RPC-server也要修改与上报。

又例如:服务发现

image.png

服务新增一个实例,通知配置中心,配置中心通知已注册的RPC-client,将流量打到新启动的服务实例上去,迅猛完成扩容。

再例如:调用链跟踪

image.png

如果要做全链路调用链跟踪,RPC-client和RPC-server都需要进行升级。

下面这些功能:

  • 负载均衡
  • 数据收集
  • 服务发现
  • 调用链跟踪

其实都不是业务功能,所以互联网公司一般会有一个类似于“架构部”的技术部门去研发和升级相关功能,而业务线的技术部门直接使用相关框架、工具与平台,享受各种“黑科技”带来的便利。

完美!!!

理想很丰满,现实却很骨感,由于:

  • RPC-client,它嵌在调用方进程里
  • RPC-server,是服务进程的基础

往往会面临以下一些问题:

  • 业务技术团队,仍需要花时间去学习、使用基础框架与各类工具,而不是全心全意将精力花在业务和产品上
  • client要维护m个版本, server要维护n个版本,兼容性要测试m*n个版本
  • 如果要支持不同语言,往往要开发C-client,Python-client,go-client,Java-client多语言版本
  • 每次“黑科技”的升级,都需要推动上下游进行升级,这个周期往往是以季度、半年、又甚至更久,整体效率极低

这些耦合,这些通用的痛点,有没有办法解决呢?

一个思路是,将服务拆分成两个进程,解耦。

image.png

  • 一个进程实现业务逻辑(不管是调用方,还是服务提供方),biz,即上图白色方块
  • 一个进程实现底层技术体系,proxy,即上图蓝色方块

画外音:负载均衡、监控告警、服务发现与治理、调用链…等诸多基础设施,都放到这一层实现。

  • biz和proxy共同诞生,共同消亡,互为本地部署,即上图虚线方框
  • biz和proxy之间,为本地通讯,即上图黑色箭头

所有biz之间的通讯,都通过proxy之间完成,proxy之间才存在远端连接,即上图红色箭头

这样就实现了“业务的归业务,技术的归技术”,实现了充分解耦,如果所有节点都实现了解耦,整个架构会演变为:

image.png

  • 绿色为biz
  • 蓝色为proxy

整个服务集群变成了网格状,这就是Service Mesh服务网格的由来。

架构演进,永无穷尽,痛点多了,自然要分层解耦。希望大家有收获,后续再细聊SM的设计与架构细节。

思路比结论更重要。

架构师之路-分享技术思路

相关文章:

《服务化到底解决什么问题?》

《互联网分层架构演进》

《离不开的微服务架构,脱不开的RPC细节》

《MQ,互联网架构解耦神器》

调研:

贵司推广一个“底层技术”,周期大概多长,业务侧要配合升级么?

阅读原文

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
弹性计算 运维 网络协议
揭秘云网络大会“网红”:阿里云自研高性能网关XGW
XGW是洛神云网络平台的硬件转发层核心,提供了高性能的网络转发能力,负责公网,专线和跨Region流量的汇聚和分发,满足用户大带宽、大单流、稳定性、低延时/低抖动等需求。
8948 0
揭秘云网络大会“网红”:阿里云自研高性能网关XGW
|
分布式计算 并行计算 数据库
Schedulerx2.0分布式计算原理&最佳实践
1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。
28287 2
|
人工智能 JavaScript 前端开发
LangGraph架构解析
本文深入解析了传统Agent开发的三大痛点:状态管理碎片化、流程控制复杂及扩展性差,提出使用LangGraph通过有向图模型重构工作流,将LLM调用与工具执行抽象为节点,实现动态流程跳转。文中详述LangGraph四大核心组件——状态机引擎、节点设计、条件边与工具层集成,并结合生产环境最佳实践,如可视化调试、状态持久化与人工干预机制,最终对比LangGraph与传统方案的性能差异,给出选型建议。
2746 1
|
存储 监控 数据安全/隐私保护
Docker网络模式:深度理解与容器网络配置
Docker 的网络模式是容器化应用中一个关键而复杂的方面。本文将深入讨论 Docker 的网络模式,包括基本概念、常用网络模式以及高级网络配置,并通过更为丰富和实际的示例代码,帮助读者全面掌握如何理解和配置容器网络。
|
消息中间件 缓存 前端开发
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
3907 1
Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)
|
存储 监控 Linux
性能监控之Telegraf+InfluxDB+Grafana linux服务器实时监控
【6月更文挑战11天】标题性能监控之 Java Metrics 度量包性能监控之Telegraf+InfluxDB+Grafana linux服务器实时监控
913 2
|
设计模式 架构师 Java
一文详谈领域驱动设计实践
本文作者结合在团队的实践过程,分享了自己对领域驱动设计的一些思考。
1079 9