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 介绍 的相关文章

  • 关于几个坐标系的关系NED ENU ROS

    几个坐标系转来转去 xff0c 时间一长又搞混了 px4使用的坐标系为NED xff08 北东地 xff09 坐标系或者FRD xff08 前右下 xff09 坐标系 然而mavros xff08 melodic版本 xff09 中常使用的
  • 使用Optitrack给px4提供定位

    Motive设置 打开View gt Data Streaming xff0c 确认OptiTrack Streaming Engine和VRPN Streaming Engine勾选Broadcast Frame Data 创建刚体 xf
  • 相关分析与回归分析

    相关与回归分析就是了解变量之间相关关系的统计方法 一 相关分析 具有相关关系的变量之间 xff0c 如果不区分原因和结果 xff0c 我们称之为相关分析 相关分析是看两个因素之间的相关性 xff0c 不需要确定哪个是自变量 xff0c 哪个
  • D435i运行vins-fusion性能提升

    1 mavros imu data mavros imu data raw选用区别 2 vins estimator odometry 话题转发给 mavros vision pose pose 3 关闭D435i的自动曝光 xff0c 设
  • 关于cartographer建立正确关系树的理解

    正确的TF关系map odom base link laser base link是固定在机器人本体上的坐标系 xff0c 通常选择飞控 其中map odom 的链接是由cartographer中lua文件配置完成的 map frame s
  • noetic ---lunar_devel melodic--indigo_devel

    对应关系
  • tf监听两个坐标系关系

    tf监听器 tf span class token operator span TransformListener listener span class token punctuation span span class token co
  • IDEA 2019 Tomcat日志中文乱码问题解决

    操作系统版本 Windows 10 1809 IDEA版本 2019 1 1 Tomcat版本 8 5 38 解决方法 修改conf logging properties配置文件 将其中的UTF 8改为GBK 1catalina org a
  • docker无法从docker hub下载镜像

    root 64 localhost docker docker info Containers 1 Running 1 Paused 0 Stopped 0 Images 2 Server Version 17 09 0 ce Storag
  • 下载yum源报错,无法解析mirrors.aliyun.com

    最近使用centOS安装Oracle xff0c 下载文件提示正在解析主机 mirrors aliyun com mirrors aliyun com 失败 xff1a 未知的名称或服务 解决这个问题简单 xff0c 需要在网络访问中改配置
  • 团队效率工具: 代码格式化之Clang-format

    介绍 平时团队进行合作的时候需要注意代码的格式 xff0c 虽然很难统一每个人的编码风格 xff0c 但是通过工具能够很好的管理代码格式 这里介绍下clang format xff0c 它是基于clang的一个命令行工具 xff0c 能够自
  • 关于头文件保护和变量重复定义的一点理解

    之前一直都有一个困惑 xff1a 既然头文件一般都有避免重复编译的预编译条件保护 xff0c 那为什么在头文件中定义全局变量就会出现重复定义的错误呢 xff1f 这个困惑持续了很久 xff0c 一直到最近才算大概理解 现记录于此 xff0c
  • YOLOv4剪枝【附代码】

    本项目只是负责把框架搭建起来 xff0c 没有进行重训练的微调或者去研究应该剪哪里比较好 xff0c 需要自己去研究 YOLOv4代码参考 xff1a Pytorch 搭建自己的YoloV4目标检测平台 xff08 Bubbliiiing
  • 爬虫 | Selenium库

    一 基础 1 定义 自动化测试工具 xff0c 支持多种浏览器 爬虫中主要用来解决JavaScript渲染的问题便捷地获取网站中动态加载的数据便捷实现模拟登录 2 使用流程 环境安装 xff1a pip install selenium下载
  • java李白打酒蓝桥杯

    题目 xff1a 李白打酒 话说大诗人李白 xff0c 一生好饮 幸好他从不开车 gt gt 一天 xff0c 他提着酒壶 xff0c 从家里出来 xff0c 酒壶中有酒2斗 他边走边唱 xff1a gt gt 无事街上走 xff0c 提壶
  • java求abc的全排列

    给定一个 没有重复 数字的序列 xff0c 返回其所有可能的全排列 示例 输入 abc 输出 xff1a abc acb bac bca cab cba 这里可以使用深度优先遍历 xff0c 遍历完a遍历b xff0c 最后遍历c java
  • java最大公共子序列

    题目 xff1a 求两个字符串的最大公共子序列 这里子序列和子串需要区分一下 xff0c 子序列不需要字符串里元素紧挨着 xff0c 但子串要求前后元素紧挨 xff0c 这里求子序列可以用递归法来做 代码如下 xff1a span clas

随机推荐

  • java矩阵乘法

    试题 基础练习 矩阵乘法 资源限制 时间限制 xff1a 1 0s 内存限制 xff1a 512 0MB 问题描述 给定一个N阶矩阵A xff0c 输出A的M次幂 xff08 M是非负整数 xff09 例如 xff1a 矩阵A为 1 2 3
  • java实现蓝桥杯单词分析

    单词分析 686 题目描述 小蓝正在学习一门神奇的语言 xff0c 这门语言中的单词都是由小写英文字母组 成 xff0c 有些单词很长 xff0c 远远超过正常英文单词的长度 小蓝学了很长时间也记不住一些单词 xff0c 他准备不再完全记忆
  • Java实现N皇后问题

    八皇后问题 xff08 英文 xff1a Eight queens xff09 xff0c 是由国际西洋棋棋手马克斯 贝瑟尔于1848年提出的问题 xff0c 是回溯算法的典型案例 问题表述为 xff1a 在8 8格的国际象棋上摆放8个皇后
  • C++求解整数划分问题(递归)

    整数划分问题是算法中的一个经典命题之一 xff0c 有关这个问题的讲述在讲解到递归时基本都将涉及 所谓整数划分 xff0c 是指把一个正整数n写成如下形式 xff1a n 61 m1 43 m2 43 43 mi xff08 其中mi为正整
  • java两个字符串的删除操作(动态规划)

    两个字符串的删除操作 给定两个单词 word1 和 word2 xff0c 找到使得 word1 和 word2 相同所需的最小步数 xff0c 每步可以删除任意一个字符串中的一个字符 xff08 力扣 xff09 示例 输入 sea ea
  • C/C++无向图的遍历(bfs和dfs)

    描述 简单介绍一下图 xff0c 图就是由一些小圆点 xff08 称为顶点 xff09 和连接这些小圆点的直线 xff08 称为边 xff09 组成的 例如下图的由五个顶点 xff08 编号1 2 3 4 5 xff09 和五条边 xff0
  • 树状数组c++/java版

    span class token keyword class span span class token class name Bit span span class token punctuation span span class to
  • 深度学习基础入门

    一 神经网络基础 线性函数 xff1a 从输入到输出的映射 损失函数 61 数据损失 43 正则化惩罚项 我们总是希望模型不要太复杂 xff0c 过拟合的模型是没用的 反向传播 加法门单元 xff1a 均等分配MAX门单元 xff1a 给最
  • 正则表达式匹配链接

    http tools jb51 net regex create reg
  • java选手算法竞赛模板

    span class token keyword import span span class token namespace java span class token punctuation span io span class tok
  • Mybatis框架文件模板

    jdbc properties mysql jdbc driver 61 com mysql jdbc Driver jdbc url 61 jdbc mysql 127 0 0 1 3306 mybatis characterEncodi
  • Mybatis单表 | 多表 | 动态sql 查询

    一 xff1a 单表增删改查xml 注 xff1a update不建议这么写sql 文章后有动态sql的写法 xff0c 用到了trim代替了set xff0c 注意ifnull的情况 单表的sql映射 xff0c 没什么好说的 二 xff
  • java版本的c++STL函数之next_permutation()

    相信很多java选手在打比赛的时候会出现手写全排列的时候实现不了字典序最小的下一个排列 xff0c 这里提供一个简简单单的板子 xff0c 欢迎使用 首先创建一个Permutaion的泛型类 span class token keyword
  • springboot定时任务处理(cron表达式)

    自动生成链接 https www bejson com othertools cron
  • List集合和int[]数组实现互转操作

    1 List转int list转int 时需要注意的是 xff0c list里存的是引用数据类型 xff0c 如果是Integer需要拆箱操作 xff0c 即mapToInt i gt i xff0c 不然的话直接toArray 的话jdk
  • docker 容器新建

    先查看ubuntu 镜像版本 xff1a a sudo docker search ubuntu 结果 xff1a wxsc 64 ubuntu usr include x86 64 linux gnu bits sudo docker s
  • APM/PX4将遥控器5通道之后的通道映射到舵机输出

    本文转自模友之吧 xff0c 感谢作者加加菲 xff0c 如有不当之处 xff0c 请联系删帖 xff08 环境 xff1a 飞控pixhawk 标准版 xff0c AC3 2 1固件 xff0c 社区版地面站 xff0c sbus接收机
  • 华为的鸿蒙系统引发嵌入式业界震动?

    笔者跟很多业内人士一样一直以为华为就是搞一个类似安卓的在高性能可移动设备上跑的操作系统 xff0c 没曾想华为甩出下面这张图 又是希望从RTOS到大型操作系统大小通吃 谷歌一开始没想做物联网的 xff0c 首先甩出的是大型操作系统 xff0
  • 王佩丰 Excel 基础24讲 | 学习笔记(全)

    第一讲 xff1a 认识Excel 1 简介 excel能做什么 xff1f 数据存储 数据处理 数据分析 数据呈现 excel界面 补充 xff1a Excel数据分析步骤 提出问题 xff1a 明确自己需要通过数据分析解决什么问题 理解
  • Envoy 中文指南系列:Envoy 介绍

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