入门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_managerhttp_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。类似 k8sService, nginxupstream

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 }}]

 
 

最新文章

  1. 企业站SEO记录
  2. 1128ORDER BY的原理
  3. SQL SERVER 2008
  4. 给VM中的RHEL6.5配置本地源
  5. SpringBoot常用配置简介
  6. velocity序列动画
  7. webstorm安装express报错
  8. Linux端图形处理工具ImageMagick在Centos上的安装
  9. mysql id从n 开始
  10. linux Centos 服务器之间NFS文件共享挂载
  11. SQL2008 2机镜像
  12. SDN期末验收
  13. Jmeter(十八)_Ubuntu部署jmeter与ant
  14. ubuntu中查看各种设备和资源的命令汇总
  15. altium designer中如何添加logo
  16. 第十一章 自己实现一致性hash算法
  17. 【BZOJ3262】陌上花开 cdq分治
  18. TabBar变透明
  19. Servlet实现前后端交互的原理及过程解析
  20. 【springmvc+mybatis项目实战】杰信商贸-4.maven依赖+PO对+映射文件

热门文章

  1. [LeetCode] 507. Perfect Number 完美数字
  2. hadoop进阶---hadoop性能优化(一)---hdfs空间不足的管理优化
  3. 2017ACM/ICPC广西邀请赛 1005 CS Course
  4. Jmeter3.1 使用及新增报告功能
  5. pip修改成国内镜像源
  6. LeetCode 162. 寻找峰值(Find Peak Element) 29
  7. ForEach Controller学习
  8. pom.xml文件导入了坐标,也没有报错,为什么还是没有相关的jar包的?
  9. day43——多表查询、Navicat工具的使用、pymysql模块
  10. AS3中 is,as,typeof的区别