当前位置: 首页 > news >正文

Proxyless Service Mesh:下一代微服务架构体系

一、项目背景及意义

在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如:

  • 服务间通信的复杂性:不同服务之间需要进行可靠的通信,处理失败重试、负载均衡等问题。
  • 故障的容错处理:系统的复杂性给与运维及故障处理带来更大的挑战,如何快速处理故障解决线上问题,这是考验一个企业基础设施建设的重要关卡。

最初,开发者使用SDK来解决这些问题,通过在代码中集成各种库和工具来实现服务治理。然而,随着微服务架构的规模不断扩大,这种方法逐渐显现出局限性:

  • 代码侵入性:需要在每个服务的代码中集成和配置各种库,增加了代码的复杂性和维护成本。
  • 一致性问题:不同服务可能使用不同版本的库,导致治理逻辑不一致,SDK的升级难度凸显。

为了解决这些问题,服务网格(Service Mesh)应运而生。服务网格通过在服务间引入一个代理层(通常称为Sidecar),将服务治理的逻辑从应用代码中分离出来,实现了更好的治理和管理。然而,服务网格的引入也带来了额外的复杂性和性能开销。

在这样的背景下,我们通过Java字节码增强技术,在服务治理领域提供了一种创新的解决方案。它结合了SDK和服务网格的优点,提供了无侵入性的治理逻辑注入、灵活的扩展性和高效的性能优化。这种方法不仅简化了微服务架构中的服务治理,还提升了系统的可观测性和安全性,对于现代微服务环境具有重要意义。

二、当前的微服务架构

这个阶段引入更多的微服务治理和管理工具,使用专业的微服务框架或中间件,通过专门定制的微服务通讯协议,让应用取得更高的吞吐性能。如API网关、注册中心、分布式追踪等。DevOps和持续集成/持续部署(CI/CD)流程成熟。代表产物如Spring Cloud,Dubbo等。此时典型的微服务场景还都是具体的微服务SDK提供的治理能力。通讯流程为:SDK负责向注册中心注册当前服务信息,当需要进行服务消费时,同样向注册中心请求服务提供者信息,然后直连服务提供者IP及端口并发送请求。如下图所示:

优点: 高度可扩展、弹性和灵活性,支持高频率的发布和更新。

缺点: 系统复杂性和运维成本较高,需要成熟的技术栈和团队能力。微服务治理能力依赖SDK,升级更新成本高,需要绑定业务应用更新。

三、传统的Proxy Service Mesh

随着云原生容器化时代的到来,服务网格是一种专门用于管理微服务之间通信的基础设施层。它通常包含一组轻量级的网络代理(通常称为 sidecar),这些代理与每个服务实例一起部署,这利用了K8s中Pod的基础能力。服务网格负责处理服务间的通信、流量管理、安全性、监控和弹性等功能。这种微服务治理方式也可以称之为Proxy模式,其中SideCar即作为服务之间的Proxy。如下图所示:

优点: 主要优点是解耦业务逻辑与服务治理的能力,通过集中控制平面(control plane)简化了运维管理。

缺点: 增加了资源消耗,更高的运维挑战。

四、新一代微服务架构体系 Proxyless Service Mesh

Proxyless模式(无代理模式)是为了优化性能和减少资源消耗而引入的。传统的微服务网格通常使用边车代理(Sidecar Proxy)来处理服务之间的通信、安全、流量管理等功能。

五、业界现状

1、基于sdk方案

目前主流的RPC框架,比如grpc、dubbo、brpc等都支持相应的proxy less service mesh方案。

2、基于javaAgent方案

京东云 joylive agent

华为云 sermant

六、最终选型

我们选择通过Java Agent模式实现Proxyless模式是一种将服务网格的功能(如服务发现、负载均衡、流量管理和安全性)直接集成到Java应用程序中的方法。这种方式可以利用Java Agent在运行时对应用程序进行字节码操作,从而无缝地将服务网格功能注入到应用程序中,而无需显式修改应用代码。Java Agent模式实现Proxyless的优点如下:

性能优化

  • 减少网络延迟:传统的边车代理模式会引入额外的网络跳数,因为每个请求都需要通过边车代理进行处理。通过Java Agent直接将服务网格功能注入到应用程序中,可以减少这些额外的网络开销,从而降低延迟。
  • 降低资源消耗:不再需要运行额外的边车代理,从而减少了CPU、内存和网络资源的占用。这对需要高效利用资源的应用非常重要。

简化运维

  • 统一管理:通过Java Agent实现Proxyless模式,所有服务网格相关的配置和管理可以集中在控制平面进行,而无需在每个服务实例中单独配置边车代理。这简化了运维工作,特别是在大型分布式系统中。
  • 减少环境复杂性:通过消除边车代理的配置和部署,环境的复杂性降低,减少了可能出现的配置错误或版本不兼容问题。
  • 数据局面升级:Java Agent作为服务治理数据面,天然与应用程序解耦,这点是相对于SDK的最大优点。当数据面面临版本升级迭代时,可以统一管控而不依赖于用户应用的重新打包构建。

灵活性

  • 无需修改源代码与现有生态系统兼容:Java Agent可以在运行时对应用程序进行字节码操作,直接在字节码层面插入服务网格相关的逻辑,而无需开发者修改应用程序的源代码。这使得现有应用能够轻松集成Proxyless模式。
  • 动态加载和卸载:Java Agent可以在应用程序启动时或运行时动态加载和卸载。这意味着服务网格功能可以灵活地添加或移除,适应不同的运行时需求。

适用性广

  • 支持遗留系统:对于无法修改源代码的遗留系统,Java Agent是一种理想的方式,能够将现代化的服务网格功能集成到老旧系统中,提升其功能和性能。

通过Java Agent实现Proxyless模式,能够在保持现有系统稳定性的同时,享受服务网格带来的强大功能,是一种高效且灵活的解决方案。

参考:https://zhuanlan.zhihu.com/p/717013880

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册
  • 音视频直播应用场景探讨之RTMP推流还是GB28181接入?
  • javase复习day22泛型、set、数据结构
  • USBCANFD卡在新能源BMS上位机的应用
  • Android CustomDialog圆角背景不生效的问题
  • String字符串
  • uniapp(H5)设置反向代理,设置成功后页面报错
  • AI教你学Python 第4天:函数和模块
  • MySQL下载安装
  • 可信多视图分类(TCM ETCM)算法实现数字序列的分类---基因致病的诊断
  • JAVA学习-练习试用Java实现“子集 II”
  • 代码随想录训练营 Day58打卡 图论part08 拓扑排序 dijkstra朴素版 + 堆优化版
  • 机器学习和深度学习的常见概念总结(多原创图)
  • 设计模式(Design Patterns)
  • Unity程序基础框架
  • [译]CSS 居中(Center)方法大合集
  • 10个确保微服务与容器安全的最佳实践
  • Angular数据绑定机制
  • css布局,左右固定中间自适应实现
  • css选择器
  • ES10 特性的完整指南
  • ESLint简单操作
  • gulp 教程
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python学习笔记 字符串拼接
  • tensorflow学习笔记3——MNIST应用篇
  • Vim 折腾记
  • Vue全家桶实现一个Web App
  • 从setTimeout-setInterval看JS线程
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端知识点整理(待续)
  • 微信小程序开发问题汇总
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4)STL算法之比较
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (python)数据结构---字典
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (ZT)薛涌:谈贫说富
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (四)进入MySQL 【事务】
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)程序员技术练级攻略
  • (转)重识new
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET : 在VS2008中计算代码度量值