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

微服务的流量管理-服务网格

对于单体应用来说,一般只有流入和流出两种流量。而微服务架构引入了跨进程的网络通信,流量发生在服务之间。由许多服务组成了复杂的网络拓扑结构,每次请求都会产生流量。

这些流量如果没有妥善的管理,整个应用的行为和状态将会不可控。

请添加图片描述
流量的类型,如上图所示,一般有两种:南北流量和东西流量
所谓南北流量,就是从客户端到服务端的流量。对于传统的数据中心而言,它是从外部进入,或离开数据中心的流量;对于微服务而言,它是从应用外部进入应用内部,或从应用内部流出到应用外部的流量。

所谓东西流量,就是微服务内部的服务到服务之间的流量。对于传统数据中心而言,它代表数据中心内不同服务器之间的流量,或不同数据中心之间的流量;对于微服务而言,它代表微服务应用中服务与服务之间的流量。

在微服务架构中,东西流量远远大于南北流量,用户一个请求,可以需要由多个不同服务协作完成,即一个南北流量可以会产生多个东西流量。因此微服务中对东西流量的管理是重点。

**服务网格(service mesh)**的云方案就是为管理东西流量而产生的。服务网格是一个处理服务与服务之间通信的基础设施,负责在云原生应用的复杂的服务拓扑结构下进行可靠的请求传输。它是一组和应用服务部署在一起的轻量级的网络代理,对应用透明。

服务网格作为微服务架构中负责网络通信的基础设施,它能够处理网络通信中绝大多数的问题,服务网格通过在每个业务服务前增加一个服务代理,再让这个服务代理劫持流量并转发到业务服务来实现流量管理。因为服务代理能够劫持流量,所以它能够根据需要对流量进行各种处理,如根据请求头将请求分发到不同的服务版本。总结来说,服务网格有四大功能:

  1. 流量管理:这是它的核心,基础是它能够劫持流量。应用:动态路由,通过配置路由规则来动态确定要请求的服务,请求需要被路由到生产环境还是预发布环境,测试版本还是运行版本,仅针对登录用户还是全体用户等等,都可能通过配置路由规则来实现。
  2. 策略:为应用添加一些请求控制策略,如黑名单,白名单,限流等
  3. 安全:因为服务代理能够劫持流量,所以它可以对流量进行一系列的认证和授权操作,如为流量添加双向TLS等
  4. 可观察:请求中一定会包含很多有用的信息,这些信息可以通过服务网格进行收集并上报到对应的后台处理,然后就可以以各种可视化方式被展示出来,以便后台开发者全面监控和观察应用的运行状态。

服务网络对服务应用是透明的,所有流量管理都由服务代理来完成,服务应用代码一般不需要做修改,服务代理是一个单独的进程(通常以容器的方式部署在业务服务旁和服务应用的容器共享同一个网络环境。)服务代理会自动劫持流量并转发请求。

相关文章:

  • 说说React jsx转换成真实DOM的过程?
  • C++ vector基本操作
  • es6 语法 解构 拼接 扩展运算 数组降为 symbol 迭代器 生成器 定时器 map 映射 对象字面量 私有属性 构造函数继承
  • 【【FPGA的 MicroBlaze 的 介绍与使用 】】
  • MacBook续命,XCode硬盘占用问题
  • “分割“安卓用户,对标iOS,鸿蒙崛起~
  • HTTP常见响应码
  • 医院不良事件报告系统源码带鱼骨图分析
  • flutter开发实战-readmore长文本展开和收缩控件
  • Vector Quantized Diffusion Model for Text-to-Image Synthesis
  • Java数组面试题
  • zabbix配置snmp trap--使用snmptrapd和Bash接收器--图文教程
  • 鸿蒙4.0开发笔记之ArkTS语法基础的UI描述、基础组件的使用与如何查看组件是否有参数(八)
  • 「Swift」类淘宝商品瀑布流展示
  • 【Java系列】函数式接口编程
  • [译] 怎样写一个基础的编译器
  • Java-详解HashMap
  • js正则,这点儿就够用了
  • k个最大的数及变种小结
  • Redash本地开发环境搭建
  • use Google search engine
  • vue-cli在webpack的配置文件探究
  • 基于webpack 的 vue 多页架构
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 目录与文件属性:编写ls
  • Semaphore
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • # C++之functional库用法整理
  • #etcd#安装时出错
  • #预处理和函数的对比以及条件编译
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $(selector).each()和$.each()的区别
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (全注解开发)学习Spring-MVC的第三天
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)Linux+Windows下安装ffmpeg
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)关于多人操作数据的处理策略
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net 8.0 新的变化
  • .NET 中创建支持集合初始化器的类型
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .Net7 环境安装配置
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @软考考生,这份软考高分攻略你须知道
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [ACTF2020 新生赛]Include
  • [Angular] 笔记 18:Angular Router
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C#]winform制作仪表盘好用的表盘控件和使用方法