service mesh学习

news2024/11/24 12:45:41

背景

单体服务的痛点导致单体服务被拆分为多个微服
每个微服必须要解决负载均衡、服务发现、熔断等功能
为了让上层开发更加快速和无需关注通用能力,在网络栈和应用业务层之间抽出一个透明网络代理层。

Service Mesh

轻量级网络代理,负责微服之间的通信(HTTP、TCP、gRPC),包含控制面(控制服务如何通信)和数据面(可靠交付应用请求),是一个位于网络栈和业务层之间的独立基础设施层。
它虽然和业务应用部署在一起,但对业务透明,业务层无需感知。

功能

负载均衡

所有请求对Mesh层可见,提供负载均衡算法实现流量分发,降低整体时延

服务发现

基于DNS/KV存储的服务发现,提供简单、统一、平台无关的服务发现(新部署一个服务/下掉一个服务)

熔断

某个实例发生服务中断时,快速监测并从负载均衡池中移除异常实例;避免后续请求无效地继续请求该实例。

动态路由

目的:服务的高可用、高稳定、高SLA
目标:解决部署时导致的服务中断和稳定性下降问题
解决问题:将服务从a版本切到b版本;将流量从线上隔离环境切到线上环境等
Mesh层通过动态路由机制+蓝/绿部署或者canary金丝雀部署,实现目标。

安全通信

Mesh层实现诸如TLS的加解密和服务访问控制

多语言

多协议

指标和分布式追踪

单个服务的运行指标、整个服务的运行指标

重试和最后期限

业务代码无需关注重试,无需将重试逻辑写入业务层,由Mesh层负责有限次的重试(最后期限对应一次请求的最长生命周期)

性能

可见性

运行时指标、分布式跟踪

可管理性

服务发现、负载均衡、运行时动态路由

健壮性

超时重试、请求最后期限、熔断

安全性

服务访问控制、TLS加密

相关产品

Linkerd

高性能网络代理程序,使用scala语言,运行于JVM
每秒可处理万级请求,易于水平扩展

代理

twitter的Finagle库

熔断

基于连接的熔断器
基于请求的熔断器

服务发现

基于文件的服务发现
基于consul的服务发现
基于zookeeper的服务发现
基于kubernetes的服务发现

部署模式

sidecar
per-host

协议

http/1.x http/2.x gRPC

负载均衡

轮询
最小负载等

附录

什么是sidecar

传统形态下,SDK代表着一个特定语言的库、工具包等,由应用程序和微服务框架(比如dubbo)共处同一个进程,在发布升级中共享生命周期,同时发布,同时升级。
在这里插入图片描述
sidecar方案下没有引入新的功能,调用的拓扑也没有改变,只是改变了原有功能的位置,以独立的应用来存在。
在这里插入图片描述
Sidecar是一种设计模式,概念上指将应用的一部分功能从应用本身剥离出来作为单独进程的实现方式。该种模式支持以无侵入的方式向应用添加多种功能,同时也实现了多个应用的公共部分实现与每个应用的自有部分实现解耦的目的,因此目前广泛应用于微服务领域。
Sidecar模式对于构建高度高度可伸缩、可扩展、安全且可便于监控的微服务架构系统至关重要。Sidecar模式降低了与微服务架构相关的复杂性,并提供了负载平衡、服务注册、服务发现、服务调用、流量管理、应用认证、遥测、故障注入等微服务都需要的基础功能特性。
在这里插入图片描述
Sidecar是独立部署的进程,降低了应用程序代码和底层代码的耦合度,帮助异构服务通过sidecar快速接入微服务体系。
异构服务本身不和注册中心有直接联系,所以异构服务的调用也需要走sidecar,通过sidecar进行服务发现调用,sidecar收到异构服务的请求后通过服务发现和负载均衡选中目标服务实例,转发请求至目标服务。

在这里插入图片描述
在ServiceMesh架构中,给每一个微服务实例部署一个SidecarProxy。该SidecarProxy负责接管对应服务的入流量和出流量,并将微服务架构中的服务订阅、服务发现、熔断、限流、降级、分布式跟踪等功能从服务中抽离到该Proxy中。
Sidecar以一个独立的进程启动,可以每台宿主机共用同一个Sidecar进程,也可以每个应用独占一个Sidecar进程。所有的服务治理功能,都由Sidecar接管,应用的对外访问仅需要访问Sidecar即可。当该Sidecar在微服务中大量部署时,这些Sidecar节点自然就形成了一个服务网格。

微服务框架的痛点和改进

对于基础架构框架开发者来说存在痛点:面向开发者的模式:新加了功能需要使用框架的应用开发人员配合升级版本,比如要升级maven中的依赖版本号,重新打包发布应用程序,时间上受制于相应的业务应用。业务开发人员相对来说只考虑自身业务稳定等因素,对基础框架的升级具有天然的抗拒心理。

使用SideCar模式带来的改进:这个模式的精髓在于实现了数据面(业务逻辑)和控制面的解耦。两个优点:
1、面向运维:解耦了调用业务方和微服务,让它们具备不同发布/升级生命周期
2、SideCar作为一个代理,可以完成更多功能,比如跨语言、限流、负载均衡、灰度、熔断等都可以放到SideCar代理

缺点:
1、从调用方到服务方增加了两次调用,有性能上的损失。(针对这个做优化,物理机上所有应用跟SideCar之间虽然是跨进程,处于不同的JVM应用中,但它们处于同一台物理机,故它们之间的调用可以走内核态方式,整体性能的损失可以在1%以内,平均延迟1.5毫秒左右),理论上多一跳的平均性能损耗在1.5毫秒左右;
2、调用复杂度增加,问题排查难度加大

总结:
对于大规模部署微服务,内部服务异构程度高的场景,使用ServiceMesh方案是一个不错的选择。ServiceMesh实现了业务逻辑和控制的解耦,但是也带来了额外的开销,由于网络中多了一次调用,增加了性能的损耗和访问的延迟。同时,由于每个服务(一般每一台物理机)都需要部署Sidecar,这也会使本来就具有一定复杂度的分布式系统变得更加复杂。尤其是在实施初期,对ServiceMesh的管理和运维会是一个比较棘手的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/549524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5 实现蜂巢(六边形)导航,支持用户交互和动态添加,纯css实现无需布局计算

最近公司的项目出了版新的UI设计图,所以准备进行样式改版 而其中就有个导航要改成蜂巢(六边形)导航,当我看到时其实也挺迷糊的。 说一下我一开始的想法哈: 我一开始是打算使用背景颜色线性渐变 或者 用4个子元素覆盖4角 来实现 六边形的视觉…

二、数据字典开发

文章目录 二、数据字典开发1、搭建service-cmn模块1.1 搭建service-cmn模块1.2 修改配置1.3 启动类 2、数据字典列表2.1 数据字典列表接口2.1.1 model模块添加数据字典实体2.1.2 添加数据字典mapper2.1.4 添加数据字典controller 2.2 数据字典列表前端2.2.1 添加路由2.2.2 定义…

centos 8 安装nacos2.0.3

去官网下载软件包 下载地址:https://github.com/alibaba/nacos/releases 上传到服务器指定位置,并解压 修改nacos存储为数据库 vi /xxx/nacos/conf/application.properties ## 在最后添加以下内容 spring.datasource.platformmysql db.num1 db.url.0j…

chatgpt赋能Python-pythonend

Pythonend – 一站式 Python SEO 工具 Pythonend 是一款基于 Python 的 SEO 工具,它为企业和个人提供了一站式的 SEO 解决方案。无论您是想要提高网站排名、监测关键词排名、分析竞争对手或进行网站优化,Pythonend 都可以帮助您解决这些问题。 Pythone…

【Linux】——进程信号

目录 信号入门 生活的角度 技术应用的角度 信号列表 信号处理常见方式概览 信号产生 通过终端按键产生信号 核心转储 调用系统函数向进程发信号 由软件条件产生信号 SIGPIPE信号 SIGALRM信号 硬件异常产生信号 阻塞信号 信号其他相关常见概念 内核中…

软件测试:测试用例

一、通用测试用例八要素  1、用例编号;   2、测试项目;   3、测试标题;   4、重要级别;   5、预置条件;   6、测试输入;   7、操作步骤;   8、预期输出 二、具体分析通用测试用…

红帽6.5进入单用户重置root密码

前言 ​一、重启Linux系统 二、按 “e” 键进入该界面 三、上下键选中第二个kernel选项,继续按 “e” 键进行编辑。 五、根据提示按下按键“b”,进入单用户模式引导 六、进入到单用户模式,修改密码 七、重启系统 八、进行登录 前言 大…

图片转excel表格,人工处理与OCR方案的优劣对比

随着信息化进程的发展,我们常常需要将图片文件中的表格信息转换成Excel表格文件,并进行后续数据处理和分析。对于这一需求,常用的解决方案有人工录入和OCR识别两种方式。本文将对这两种方案进行比较,评估其优劣。 一、人工做表并…

二、MongoDB入门

文章目录 一、MongoDB入门1、常用操作1.1 INSERT1.2 Query1.3 Update1.4 Remove1.5 aggregate1.5.1 插入数据1.5.2 统计sum1.5.3 常见的聚合表达式 1.6 索引 一、MongoDB入门 1、常用操作 1.1 INSERT > db.User.save({name:zhangsan,age:21,sex:true}) > db.User.find…

linux(inode)学习

目录: 1.认识磁盘结构 2.没有被打开的文件在磁盘里是怎么保存的 ------------------------------------------------------------------------------------------------------------------------------ 如果一个文件没有被打开,这个文件在哪里呢&#…

卡方检验.医学统计实例详解

卡方检验是一种常用的假设检验方法,通常用于分析两个或多个分类变量之间的关系。在医学研究中,卡方检验被广泛应用于分析两种或多种治疗方法的疗效,或者分析某种疾病的发病率与某些危险因素之间的关系。下面我们来看一个卡方检验在医学实例中…

虚幻商城模型转MetaHuman

一、导入虚幻商城的模型到UE 1.去虚幻商城下载一个人物模型,这里以SchoolGirl为例 2.导入UE,并找到模型,这里是SkeletalMesh 二、启动MetaHuman插件 1.通过Edit->Plugins启用MetaHuman和MetaHumanSDK插件,这里MetaHuman插件是用于创建MetaHuman的,MetaHumanSDK插件…

基于高效率IP路由查找的内容

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 实现最基本的前缀树查找,调研并实现某种IP前缀查找方案,- 基于forwarding-table.txt数据集(Network, Prefix Length, Port) - 本实验只考虑静态数据集,不考虑表的添加或更新- 以前缀树查找结果为基准,检…

代码随想录算法训练营day46 | 139.单词拆分 ,多重背包,背包问题总结篇!

代码随想录算法训练营day46 | 139.单词拆分 ,多重背包,背包问题总结篇! 139.单词拆分解法一:动态规划(不好想)解法二:回溯记忆化 多重背包解法一:转化为01背包 背包问题总结递推公式…

软考中级数据库系统工程师-第6-7章 数据库技术基础关系数据库

1.数据库系统基本概念 1)数据库系统(DBS)是一个采用了数据库技术,有组织地、动态地存储大量相关联数据,方便多用户访问的计算机系统。广义上来讲,DBS是由数据库、硬件、软件和人员组成。 2)数据库(DB):数…

centos 8 安装 jdk8

去官网下载RPM软件包 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 上传到服务器指定路径,进行安装 rpm -ivh jdk-8u371-linux-x64.rpm 配置JAVA_HOME环境变量 查找jdk安装路径 java -verbose修改系统环境变量文件 vi /e…

软件工程还是网络安全专业好

这个问题需要根据个人的兴趣和职业规划来选择。 从兴趣方面来看,如果你对计算机系统的设计和开发更感兴趣,那么选择软件工程专业可能更适合你。如果你对计算机系统的安全性更感兴趣,那么选择网络安全专业可能更适合你。 从职业规划方面来看…

Kyligence 连续入选 Gartner 揭秘服务自助式分析的语义层报告

近日,全球权威的技术研究与咨询公司 Gartner 发布了《揭秘服务自助式分析的语义层》(Demystifying Semantic Layers for Self-Service Analytics) 研究报告。Kyligence 是国内唯一连续入选此报告的厂商,此前曾入选 Gartner 指标平台创新洞察报告、数据管…

Gitlab----Gitlab-runner简介

【原文链接】Gitlab----Gitlab-runner简介 gitlab-runner是用于执行GitlabCI/CD任务的工具,通俗点来说它就是用来执行gitlab上的CI/CD任务的机器,当然这里的机器是广义上的,它可以是物理机、虚拟机、Docker甚至是Kubernetes。 GitLab Runne…