Envoy 中文指南系列:Envoy 介绍

2023-05-16


原文链接:https://fuckcloudnative.io/envoy-handbook/docs/overview/overview/

前言

Envoy 是专为大型现代 SOA(面向服务架构)架构设计的 L7 代理和通信总线,体积小,性能高。它的诞生源于以下理念:

对应用程序而言,网络应该是透明的。当网络和应用程序出现故障时,应该能够很容易确定问题的根源。

核心功能

实际上,实现上述的目标是非常困难的。为了做到这一点,Envoy 提供了以下高级功能:

  • 非侵入的架构 : Envoy 是一个独立进程,设计为伴随每个应用程序服务运行。所有的 Envoy 形成一个透明的通信网格,每个应用程序发送消息到本地主机或从本地主机接收消息,不需要知道网络拓扑,对服务的实现语言也完全无感知,这种模式也被称为 Sidecar

  • C++ 语言实现,拥有强大的定制化能力和优异的性能。

  • L3/L4/L7 架构 : 传统的网络代理,要么在 HTTP 层工作,要么在 TCP 层工作。在 HTTP 层的话,你将会从传输线路上读取整个 HTTP 请求的数据,对它做解析,查看 HTTP 头部和 URL,并决定接下来要做什么。随后,你将从后端读取整个响应的数据,并将其发送给客户端。但这种做法的缺点就是非常复杂和缓慢,更好的选择是下沉到 TCP 层操作:只读取和写入字节,并使用 IP 地址,TCP 端口号等来决定如何处理事务,但无法根据不同的 URL 代理到不同的后端。Envoy 支持同时在 3/4 层和 7 层操作,以此应对这两种方法各自都有其实际限制的现实。

  • 顶级 HTTP/2 支持 : 它将 HTTP/2 视为一等公民,并且可以在 HTTP/2HTTP/1.1 之间相互转换(双向),建议使用 HTTP/2

  • 服务发现和动态配置 : 与 Nginx 等代理的热加载不同,Envoy 可以通过 API 来实现其控制平面,控制平面可以集中服务发现,并通过 API 接口动态更新数据平面的配置,不需要重启数据平面的代理。不仅如此,控制平面还可以通过 API 将配置进行分层,然后逐层更新,例如:上游集群中的虚拟主机、HTTP 路由、监听的套接字等。

  • gRPC 支持 : gRPC[1] 是一个来自 GoogleRPC 框架,它使用 HTTP/2 作为底层多路复用传输协议。Envoy 完美支持 HTTP/2,也可以很方便地支持 gRPC

  • 特殊协议支持 : Envoy 支持对特殊协议在 L7 进行嗅探和统计,包括:MongoDB[2]、DynamoDB[3] 等。

  • 可观测性 : Envoy 的主要目标是使网络透明,可以生成许多流量方面的统计数据,这是其它代理软件很难取代的地方,内置 stats 模块,可以集成诸如 prometheus/statsd 等监控方案。还可以集成分布式追踪系统,对请求进行追踪。

设计目标

Envoy 官方的设计目标是这么说的:

Envoy 并不是很慢(我们已经花了相当长的时间来优化关键路径)。基于模块化编码,易于测试,而不是性能最优。我们的观点是,在其他语言或者运行效率低很多的系统中,部署和使用 Envoy 能够带来很好的运行效率。

虽然 Envoy 没有把追求极致的性能作为首要目标,但并不表示 Envoy 是没有追求的,只是扩展性优先,性能稍微靠边。Envoy 和 Nginx 一样,也采用了 多线程 + 非阻塞 + 异步IO(Libevent) 的架构,性能仍然很强悍。

参考资料

  • Envoy 是什么?[4]

  • Lyft Envoy入门教程[5]

脚注

[1]

gRPC: http://www.grpc.io/

[2]

MongoDB: https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/mongo_proxy_filter#

[3]

DynamoDB: https://www.servicemesher.com/envoy/intro/arch_overview/dynamo.html#arch-overview-dynamo

[4]

Envoy 是什么?: https://www.servicemesher.com/envoy/intro/what_is_envoy.html

[5]

Lyft Envoy入门教程: http://dockone.io/article/8212


你可能还喜欢

点击下方图片即可阅读

伪官宣:Envoy 中文指南新鲜出炉

云原生是一种信仰 ????

码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Envoy 中文指南系列:Envoy 介绍 的相关文章

  • 利用反射 Mirror 快速的获取/打印枚举值

    在 Swift 中 xff0c 枚举是一等类型 xff0c 可以给其添加计算属性 xff0c 实例方法 xff0c 构造函数 xff0c 遵循协议 xff0c 另外 xff0c 还可以定义枚举来存储任意类型的关联值 这些特性可以让枚举适用于
  • linux 应用层编程之内核链表list的使用

    linux内核提供了一个经典通用的双向循环链表list的实现 xff0c 任何模块都可以借助该接口实现自己的内部循环链表 因为是通用的 xff0c 可以直接移植到用户态中使用 xff0c 下面介绍相关的接口与一个简单操作例子 xff0c 包
  • EFR32修改开发板VCOM串口波特率的方法

    Silabs官方开发板上的Jlink CDC串口 xff08 VCOM xff09 默认的波特率是115200 xff0c 在普通的终端软件 xff08 如 串口调试助手 xff09 里设置别的波特率是不起作用的 要让它支持其他的波特率 x
  • 用 Latex 生成英文论文中的 算法步骤/伪代码 并插入 word 中

    准备工作 xff1a 1 先安装 CTEX https mirrors tuna tsinghua edu cn ctex legacy 2 9 2 下载 algorithm2e 包 xff08 里面有详细的使用说明文档 xff09 htt
  • Docker 大势已去,Podman 万岁

    前言 郑重声明 xff1a 本文不是 Podman 的入门篇 xff0c 入门请阅读这篇文章 xff1a 再见 Docker xff0c 是时候拥抱下一代容器工具了 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一
  • 生产者消费者问题--练习题目

    10 os考研题目 改题目中p0 xff0c p1两个进程可以互斥的进入临界区 xff0c 会出现饥饿现象 xff08 答案给的是D xff0c 但是自我认为可以出现饥饿现象 xff09 互斥的访问 xff1a p0 Flag 0 61 T
  • PromQL的简单使用

    PromQL的简单使用 一 背景二 PromQL的数据类型三 字面量1 字符串字面量2 浮点数字面量 四 时间序列选择器1 即时向量选择器1 组成部分2 指标名称和匹配器的组合3 匹配器 2 区间向量选择器1 时间格式 3 偏移量修改器 五
  • 一步一步在平衡车上实现卡尔曼滤波

    这是一个翻译版本 xff0c 其中的一些公式 xff0c 符号太多 xff0c 我就不一个一个去上传 xff0c 大家可以参考下面网址去对照着看 A practical approach to Kalman filter and how t
  • 浮点数的二进制表示(IEEE 754标准)

    浮点数是我们在程序里常用的数据类型 xff0c 它在内存中到底是怎么样的形式存在 xff0c 是我了解之前是觉得好神奇 xff0c 以此记录 xff0c 作为学习笔记 现代计算机中 xff0c 一般都以IEEE 754标准存储浮点数 xff
  • vscode如何打开settings.json

    解决方案步骤 xff1a 打开vscode编辑器 xff0c 本文演示的vscode是英文版 点击左下角齿轮状的图标 在弹出的菜单中选择 Settings Settings点击后 xff0c 会出现一个设置窗口 在Settings窗口中点击
  • Failed to execute ‘createObjectURL‘ on ‘URL‘ Overload resolution failed

    vue使用二进制流下载文件 xff0c 使用 link href 61 window URL createObjectURL blob 报错 xff1a Failed to execute createObjectURL on URL Ov
  • openwrt安装docker并启动

    在软件包中下载docker和dockerd 也可以自行下载ipk文件安装 安装成功后启动xshell连上openwrt 执行 etc init d dockerd 启动docker的daemon服务 若要dockerd自启动则执行 ln s
  • Mysql环境变量配置

    一 mysql的环境变量配置步骤 1 1 在桌面选择 计算机 的图标 xff0c 右键 gt 属性 gt 点击 高级系统设置 gt 点击 环境变量 2 2 新建MYSQL HOME变量 xff0c 并将值设置为C Program Files
  • MySQL安装配置教程(超级详细)

    一 下载MySQL Mysql官网下载地址 xff1a MySQL Download MySQL Installer Archived Versions 1 选择要安装的版本 xff0c 本篇文章选择的是5 7 31版本 xff0c 点击D
  • mysql字符切割的四种方式

    1 从左开始截取字符串 left xff08 str length xff09 说明 xff1a left xff08 被截取字段 xff0c 截取长度 xff09 select left 39 如果暴力不是为了杀戮 xff0c 那将变得毫
  • Podman 使用指南

    原文链接 xff1a Podman 使用指南 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一个单独的项目叫 libpod Podman 的使用体验和 Docker 类似 xff0c 不同的是 Podman 没有
  • ClickHouse查询语句详解

    ClickHouse查询语句兼容大部分SQL语法 xff0c 并且进行了更加丰富的扩展 xff0c 查询语句模板如下 xff1a WITH expr list subquery SELECT DISTINCT ON column1 colu

随机推荐

  • Mysql和Redis如何保证数据一致性

    文章目录 前言一 先更新数据库 xff0c 再更新redis二 先更新redis xff0c 在更新数据库三 先更新数据库 xff0c 再删除redis四 先删除redis xff0c 再更新数据库总结 前言 如何保证数据库和缓存双写一致
  • SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)

    文章目录 前言 一 概念 二 例子 总结 前言 最近在做SQL相关的练习 发现以前那么自信的SQL放久了不碰也变得棘手起来 特别是这一块表之间的内外连接 所以这篇是关于这个内外连接的整理 一 概念 首先还是介绍一下这三个的定义 1 Left
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高
  • 明白了一句话:“加速度信号对高频敏感,位移信号对低频敏感”

    以前听别人说这些 xff0c 然后记住了 但是一直不大理解 最近在调试IEPE传感器 xff0c 正好要算位移 速度 加速度 对于相同的速度 xff0c 频率越高 xff0c 加速度值就越大 因为从公式就能看出来 xff0c 对于固定频率的
  • ubuntu 16.04使用IntelRealSense D435i调用realsense ROS包时,报symbol lookup error和undefined symbol错误的解决办法

    在ubuntu 16 04使用IntelRealSense D435i调用realsense ROS包时 xff0c 运行 roscore roslaunch realsense2 camera rs rgbd launch 出现错误 xf
  • Android浪潮

    Google的Android手机就要席卷世界了 xff01 IT技术的发展常常太出人意料 xff0c 我也想不太清楚Google的Android平台究竟吸引人在哪里 xff0c 但我相信Android会很快改变手机平台的格局 新的形势会出人
  • 卡尔曼滤波相关介绍及优缺点

    1 卡尔曼滤波算法为什么会叫滤波算法 xff1f 以一维卡尔曼滤波为例 xff0c 如果我们单纯的相信测量的信号 xff0c 那么这个信号是包含噪声的 xff0c 是很毛糙的 xff0c 但是当我们运行卡尔曼滤波算法去做估计 xff0c 我
  • STM32单片机(五)-寄存器地址理解和控制LED闪烁

    芯片 xff1a stm32f103zet6 1 存储单元一般应具有存储数据和读写数据的功能 一般以8位二进制作为一个存储单元 也就是一个字节 每个单元有一个地址 是一个整数编码 可以表示为二进制整数 2 stm32是32位单片机 xff0
  • 跨平台构建 Docker 镜像新姿势,x86、arm 一把梭

    点击 34 阅读原文 34 可以获得更好的阅读体验 在工作和生活中 xff0c 我们可能经常需要将某个程序跑在不同的 CPU 架构上 xff0c 比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上 特别是 Docker 席卷全球之后
  • 正点原子STM32F4笔记

    使用寄存器操作 xff0c 不错的博客 xff1a https blog csdn net w471176877 article category 1230060 https blog csdn net w471176877 article
  • JAVA中this用法小结

    我知道很多朋友都和我一样 xff1a 在 JAVA 程序中似乎经常见到 this xff0c 自己也偶尔用到它 xff0c 但是到底 this 该怎么用 xff0c 却心中无数 xff01 很多人一提起它 xff0c 就说 当前对象 xff
  • Linux Platform总线+SPI总线分析

    2015 07 1 11 20 本文以MPC8308 powerpc架构 xff0c HX软件包为依据 xff0c 详细内容可参考源码 CPU e300c3MPC8308 400MHz BOARD Freescale MPC8308ERDB
  • ubuntu下SD卡分区与挂载

    本来只是想借SD卡来做一个OK6410的升级 但笔记本上只装了ubuntu xff0c 一开始是可以识别sd卡的 xff0c 但按照网上的教程不小心将 dev sdb1删除了 导致ubuntu不能识别sd卡了 记录一下解决过程 1 sd的设
  • 信号量与互斥锁的一些理解

    一直对信号量和互斥锁只有一个模糊的认识 xff0c 今天特别学习了 xff0c 总结一下 一 从作用上来讲 互斥锁是用在多线程多任务互斥的 信号量用于线程的同步 二 从原理上讲 线程互斥锁 pthread mutex t 的实现原理 xff
  • springboot2.x +kafka使用和源码分析九(KafkaListenerEndpointRegistry暂停启动容器)

    我们在运行中如果需要暂停启动容器时可以通过此类KafkaListenerEndpointRegistry来处理 KafkaListenerEndpointRegistry源码 只解释了核心代码 public class KafkaListe
  • H3C 交换机配置命令

    H3C 交换机配置命令 三层和二层交换机配置命令 dis this 查看下属命令 save 保存 reboot 重启 初始化命令和提示选项 reset saved configuration 初始 清除所有配置信息后 提示是否初始化 xff
  • 【粒子群算法整定PID参数】MATLAB2016b(02一些细节问题)

    此帖主要针对01帖的细节方面 很抱歉更新的晚了 xff0c 现在我对01帖发布到现在 xff0c 用粒子群算法整定PID参数时存在的细节问题进行讲解 xff0c 以便于帮助大家学会此方法 xff0c 降低整定参数的难度 问题一 xff1a
  • 通过input框上传图像并预览

    HTML 如下 xff1a lt input type 61 34 file 34 name 61 34 upImg 34 gt lt input type 61 34 text 34 gt lt div id 61 34 showImag
  • STM32Cube STM32L053配置GPIO达到最低功耗详解含测量实际电流值

    外部有上拉电阻 xff0c 设置输入模式 xff0c 此模式最省电 设置输入模式 GPIO InitStruct Mode 61 GPIO MODE INPUT GPIO InitStruct Pull 61 GPIO NOPULL 外部有
  • Envoy 中文指南系列:Envoy 介绍

    原文链接 xff1a https fuckcloudnative io envoy handbook docs overview overview 前言 Envoy 是专为大型现代 SOA xff08 面向服务架构 xff09 架构设计的