看看赤裸的envoy是什么样子的?
2024-10-20 20:46:20
入门istio,envoy现在看来必不可少,花点时间了解一下吧。
Envoy 是什么
我们援引一段官网的描述:
Envoy is an L7 proxy and communication bus designed for large modern service oriented architectures. The project was born out of the belief that: "The network should be transparent to applications. When network and application problems do occur it should be easy to determine the source of the problem."
Envoy 的核心功能/卖点
- 非侵入的架构:
Envoy
是和应用服务并行运行的,透明地代理应用服务发出/接收的流量。应用服务只需要和Envoy
通信,无需知道其他微服务应用在哪里。 - 基于 Modern C++11实现,性能优异。
- L3/L4 过滤器架构:
Envoy
的核心是一个 L3/L4 代理,然后通过插件式的过滤器(network filters
)链条来执行 TCP/UDP 的相关任务,例如 TCP 转发,TLS 认证等工作。 - HTTP L7 过滤器架构:HTTP在现代应用体系里是地位非常特殊的应用层协议,所以
Envoy
内置了一个非常核心的过滤器:http_connection_manager
。http_connection_manager
本身是如此特殊和复杂,支持丰富的配置,以及本身也是过滤器架构,可以通过一系列 http 过滤器(http filters
)来实现 http协议层面的任务,例如:http路由,重定向,CORS支持等等。 - HTTP/2 作为第一公民:
Envoy
支持 HTTP/1.1 和 HTTP/2,推荐使用 HTTP/2。 - gRPC 支持:因为对 HTTP/2 的良好支持,
Envoy
可以方便的支持 gRPC,特别是在负载和代理上。 - 服务发现: 支持包括 DNS, EDS 在内的多种服务发现方案。
- 健康检查:内置健康检查子系统。
- 高级的负载均衡方案:除了一般的负载均衡,Envoy 还支持基于 rate limit 服务的多种高级负载均衡方案,包括: automatic retries, circuit breaking, global rate limiting
- Tracing:方便集成 Open Tracing 系统,追踪请求
- 统计与监控:内置 stats 模块,方便集成诸如 prometheus/statsd 等监控方案
- 动态配置:通过“动态配置API”实现配置的动态调整,而无需重启
Envoy
服务的。
核心术语解释
Host
这里的 Host,可以理解为由 IP, Port 唯一确定的服务实例
Downstream
发送请求给 Envoy 的 Host 是 Downstream(下游),例如gRPC的 client
Upstream
接收 Enovy 发出的请求的 Host 是Upstream(上游),例如 gRPC的 server
Listener
Envoy 监听的一个地址,例如 ip:port, unix socket 等等
Cluster
一组功能一致的上游 Host,称为一个cluster。类似 k8s
的 Service
, nginx
的 upstream
Http Route Table
HTTP 的路由规则,例如请求的域名,Path符合什么规则,转发给哪个 Cluster。
这次用的只有静态的配置文件:
admin: access_log_path: /tmp/admin_access.log address: socket_address: { address: 0.0.0.0, port_value: 9901 } static_resources: listeners: - name: listener_0 address: socket_address: { address: 0.0.0.0, port_value: 7777 } filter_chains: - filters: - name: envoy.http_connection_manager config: stat_prefix: ingress_http route_config: name: local_route virtual_hosts: - name: local_service domains: ["*"] routes: - match: { prefix: "/" } route: { cluster: some_service } http_filters: - name: envoy.router clusters: - name: some_service connect_timeout: 0.25s type: STATIC lb_policy: ROUND_ROBIN hosts: [{ socket_address: { address: 127.0.0.1, port_value: 8000 }}]
最新文章
- 企业站SEO记录
- 1128ORDER BY的原理
- SQL SERVER 2008
- 给VM中的RHEL6.5配置本地源
- SpringBoot常用配置简介
- velocity序列动画
- webstorm安装express报错
- Linux端图形处理工具ImageMagick在Centos上的安装
- mysql id从n 开始
- linux Centos 服务器之间NFS文件共享挂载
- SQL2008 2机镜像
- SDN期末验收
- Jmeter(十八)_Ubuntu部署jmeter与ant
- ubuntu中查看各种设备和资源的命令汇总
- altium designer中如何添加logo
- 第十一章 自己实现一致性hash算法
- 【BZOJ3262】陌上花开 cdq分治
- TabBar变透明
- Servlet实现前后端交互的原理及过程解析
- 【springmvc+mybatis项目实战】杰信商贸-4.maven依赖+PO对+映射文件
热门文章
- [LeetCode] 507. Perfect Number 完美数字
- hadoop进阶---hadoop性能优化(一)---hdfs空间不足的管理优化
- 2017ACM/ICPC广西邀请赛 1005 CS Course
- Jmeter3.1 使用及新增报告功能
- pip修改成国内镜像源
- LeetCode 162. 寻找峰值(Find Peak Element) 29
- ForEach Controller学习
- pom.xml文件导入了坐标,也没有报错,为什么还是没有相关的jar包的?
- day43——多表查询、Navicat工具的使用、pymysql模块
- AS3中 is,as,typeof的区别