南明区住房和城乡建设局网站上,洛米原创wordpress,wordpress制作公司主页,南昌免费做网站一、项目背景及意义
在当今的微服务架构中#xff0c;应用程序通常被拆分成多个独立的服务#xff0c;这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性#xff0c;但也带来了新的挑战#xff0c;比如#xff1a;
服务间通信的复杂性#…一、项目背景及意义
在当今的微服务架构中应用程序通常被拆分成多个独立的服务这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性但也带来了新的挑战比如
服务间通信的复杂性不同服务之间需要进行可靠的通信处理失败重试、负载均衡等问题。故障的容错处理系统的复杂性给与运维及故障处理带来更大的挑战如何快速处理故障解决线上问题这是考验一个企业基础设施建设的重要关卡。
最初开发者使用SDK来解决这些问题通过在代码中集成各种库和工具来实现服务治理。然而随着微服务架构的规模不断扩大这种方法逐渐显现出局限性
代码侵入性需要在每个服务的代码中集成和配置各种库增加了代码的复杂性和维护成本。一致性问题不同服务可能使用不同版本的库导致治理逻辑不一致SDK的升级难度凸显。
为了解决这些问题服务网格Service Mesh应运而生。服务网格通过在服务间引入一个代理层通常称为Sidecar将服务治理的逻辑从应用代码中分离出来实现了更好的治理和管理。然而服务网格的引入也带来了额外的复杂性和性能开销。
在这样的背景下我们通过Java字节码增强技术在服务治理领域提供了一种创新的解决方案。它结合了SDK和服务网格的优点提供了无侵入性的治理逻辑注入、灵活的扩展性和高效的性能优化。这种方法不仅简化了微服务架构中的服务治理还提升了系统的可观测性和安全性对于现代微服务环境具有重要意义。
二、当前的微服务架构
这个阶段引入更多的微服务治理和管理工具使用专业的微服务框架或中间件通过专门定制的微服务通讯协议让应用取得更高的吞吐性能。如API网关、注册中心、分布式追踪等。DevOps和持续集成/持续部署CI/CD流程成熟。代表产物如Spring CloudDubbo等。此时典型的微服务场景还都是具体的微服务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