微服务框架与服务网格

news/2024/7/7 21:10:01

背景

互联网系统的演进,正在经历这样一个路线:单体-SOA-分布式-微服务

在docker-k8s掀起的云原生浪潮下,使得微服务更加的蓬勃发展。那么要管理一个由众多微服务架构起来的系统,将是一个复杂而严肃的话题。

也是首先催生了如spring cloud、dubbo、grpc等众多微服务框架,以及在云原生背景下诞生的service mesh服务网格。

那么对于这两种形式的服务治理,到底应该怎么去选择他们呢?
有的人会认为服务网格必将取代微服务框架;有的则认为两者必然共存。下面我们就来看看两者的区别

微服务框架

微服务框架伴随着微服务的诞生发展至今,涌现出了众多优秀的框架:spring cloud、dubbo、etcd、consul、grpc等等。这些框架都旨在提供业务服务的公共基础设施能力,比如:

  • 服务发现

  • 服务注册

  • 服务路由

  • 负载均衡

  • 配置管理

  • 限流、降级

  • 监控

  • 日志

  • 等其他公共能力

从而让服务进程只需要关注业务逻辑即可。

服务网格

在微服务框架的使用过程中,人们发现如下一些难以避免的问题:

  • 过于绑定特定技术栈 当面对异构系统时,需要花费大量精力来进行代码的改造,不同异构系统可能面临不同的改造。

  • 代码侵入度过高 开发者往往需要花费大量的精力来考虑如何与框架或 SDK 结合,并在业务中更好的深度融合,对于大部分开发者而言都是一个高曲线的学习过程。

  • 多语言支持受限 微服务提倡不同组件可以使用最适合它的语言开发,但是传统微服务框架,如 Spring Cloud 则是 Java 的天下,多语言的支持难度很大。这也就导致在面对异构系统对接时的无奈,或选择退而求其次的方案了。

  • 老旧系统维护难 面对老旧系统,很难做到统一维护、治理、监控等,在过度时期往往需要多个团队分而管之,维护难度加大。

基于此,于是诞生了service mesh的概念:

服务网格(Service Mesh),作为服务间通信的基础设施层。是轻量级高性能网络代理,提供安全的、快速的、可靠地服务间通讯,与实际应用部署一起,但对应用透明。应用作为服务的发起方,只需要用最简单的方式将请求发送给本地的服务网格代理,然后网格代理会进行后续的操作,如服务发现,负载均衡,最后将请求转发给目标服务。

观点

Service Mesh 将流量代理能力下沉,整体调用链路较传统 RPC 框架方式复杂。极端情况下一旦 Service Mesh 数据面 Sidecar 无法正常工作,会直接影响业务流量。这种场景一旦扩散到全局,会升级为系统级风险。原生组件提供了高可用保障,但 缺乏极端情况整体故障兜底能力

服务框架与 Service Mesh 本身都是为解决业务微服务架构演进问题而生的,并不存在谁更好或者更先进的问题。相反,在微服务领域的未来,服务框架和 Service Mesh 会处在长期共存、互补的状态

Spring Cloud、Dubbo 以及 gRPC 都是成熟的服务框架,定位和发展方式虽有不同,但依然可以作为业务服务框架的长期选型,即使在 Service Mesh 架构下也同样需要易用的框架、通用的协议将服务流量引入 Sidecar,只不过更多 服务级 的流量治理能力从服务框架下沉到 Sidecar,而服务框架的 代码级 的治理能力依旧可以保留,形成 服务框架细粒度治理 +Service Mesh 流量治理能力的互补。这种共存状态下的微服务架构需要有足够兼容、稳定的方案进行支撑。


http://lihuaxi.xjx100.cn/news/1216736.html

相关文章

【android】反编译工具以及使用方式分步骤描述

以下是对常见 Android 反编译工具的使用方式分步骤描述: Apktool 的使用方式: 步骤一:下载并安装 Apktool,可以从官方网站(https://ibotpeaches.github.io/Apktool/)下载最新版本的 Apktool。 步骤二&am…

【Python】Python系列教程-- Python3 OS 文件/目录方法(二十七)

文章目录 前言语法错误异常异常处理try/excepttry/except...elsetry-finally 语句 抛出异常用户自定义异常定义清理行为预定义的清理行为 前言 往期回顾: Python系列教程–Python3介绍(一)Python系列教程–Python3 环境搭建(二&…

【AUTOSAR】Bootloader说明(四)---- 升级主函数

刷新主函数uds_refresh_main() 当执行完初始化后,DSP进入刷新主函数。 主函数是一个无穷循环函数,完成诊断消息的接收、处理,诊断状态的刷新等。 函数原型 void bblk_normal_isr(void) 函数作用 完成看门狗服务,清楚定时器中…

【JavaSE】Java(五十六):核心要点总结

文章目录 1. byte 类型 127 1等于多少2. java容器有哪些3. Collection 和Collections 有什么区别4. list 和 set 的区别5. HashMap 和 Hashtable 有什么区别 1. byte 类型 127 1等于多少 当byte类型的值超出它的范围时,它会发生溢出并且变为负数。在Java中&#x…

员工午餐时间玩手机被通报?哪里来的勇气

刚看到一个话题,知名房产某达员工午餐时间玩手机被通报。 瑟瑟发抖,员工休息时间玩手机也要被通报?哪里来的勇气。 据悉,该公司的一些员工因为在午餐时间玩手机而被警告。 这起事件不禁让人思考:在工作与生活之间&…

【SQL】Oracle数据库实现远程访问

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

征稿|IJCAI‘23大模型论坛,DeepMind EleutherAI Oxford主题报告

第一届LLMIJCAI’23 Symposium征稿中,优秀投稿论文推荐《AI Open》(EI检索)和 《JCST》(CCF-B)发表。 大规模语言模型(LLMs),如ChatGPT和GPT-4,以其在自然语言理解和生成方面的卓越能力&#xf…

基于SSM的图书馆借阅管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着社会的发展和信息…