服务网格:什么是Envoy(特使)

Envoy是专为大型现代服务导向架构设计的L7代理和通讯总线。该项目源于以下信念:

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

在实践中,实现上述目标是非常困难的。Envoy试图通过提供以下高级功能来做到这一点:

进程外架构:Envoy是一个独立的进程,旨在与每个应用程序服务器并行运行。所有的Envoy形成一个透明的通信网格,每个应用程序发送和接收来自本地主机的消息,并且不知道网络的拓扑结构。与传统的库方法服务于服务通信相比,进程外架构有两个实质性的好处:

  • Envoy可以使用任何应用程序语言。单一的Envoy部署可以在Java,C ++,Go,PHP,Python等之间形成一个网格。面向服务的体系结构使用多个应用程序框架和语言已经越来越普遍。Envoy透明地弥合了这一差距。 正如任何一个与大型面向服务架构合作的人都知道,部署库升级可能会非常痛苦。Envoy可以透明地在整个基础设施上快速部署和升级。
  • 现代C ++ 11代码库:Envoy是用C ++ 11编写的。选择原生代码是因为我们相信像Envoy这样的架构组件应该尽可能地避开它。现代应用程序开发人员已经处理由于在共享云环境中的部署而导致的尾部延迟,以及使用诸如PHP,Python,Ruby,Scala等高效但不是特别好的语言。本地代码通常提供优秀的延迟属性不会增加对已经混乱的情况的额外混淆。与用C编写的其他本地代码代理解决方案不同,C ++ 11提供了出色的开发人员生产力和性能。

L3 / L4过滤器架构:Envoy的核心是L3 / L4网络代理。可插入的过滤链机制允许编写过滤器来执行不同的TCP代理任务并插入到主服务器中。已经编写过滤器来支持各种任务,如原始TCP代理,HTTP代理,TLS客户端证书认证等。

HTTP L7过滤器体系结构:HTTP是现代应用程序体系结构的关键组件,Envoy支持额外的HTTP L7过滤器层。 HTTP过滤器可以插入HTTP连接管理子系统,执行不同的任务,如缓冲,速率限制,路由/转发,嗅探Amazon的DynamoDB等。

优先HTTP / 2支持:在HTTP模式下运行时,Envoy支持HTTP / 1.1和HTTP / 2。 Envoy可以在两个方向上作为透明的HTTP / 1.1到HTTP / 2代理运行。这意味着可以桥接HTTP / 1.1和HTTP / 2客户端和目标服务器的任意组合。建议的服务配置服务使用所有Envoy之间的HTTP / 2来创建持久连接的网格,请求和响应可以被多路复用。协议正在逐步淘汰,Envoy不支持SPDY。

HTTP L7路由:在HTTP模式下运行时,Envoy支持一个路由子系统,该路由子系统能够根据路径,权限,内容类型,运行时值等路由和重定向请求。当使用Envoy作为前端/边缘时,此功能非常有用代理服务器,但在构建服务网格服务时也会使用它。

gRPC支持:gRPC是一个来自Google的RPC框架,它使用HTTP / 2作为基础复用传输。 Envoy支持所有需要用作gRPC请求和响应的路由和负载平衡基板的HTTP / 2功能。这两个系统是非常互补的。

MongoDB L7支持:MongoDB是在现代Web应用程序中使用的流行数据库。 Envoy支持L7嗅探,统计生产和日志记录MongoDB连接。

DynamoDB L7支持:DynamoDB是Amazon托管的键/值NOSQL数据存储。 Envoy支持L7嗅探和DynamoDB连接的统计生产。

服务发现:服务发现是面向服务体系结构的关键组件。 Envoy支持多种服务发现方法,包括通过服务发现服务进行异步DNS解析和基于REST的查找。

健康检查:建议创建Envoy网格的建议方法是将服务发现视为最终一致的过程。 Envoy包括一个健康检查子系统,可以选择执行上游服务集群的主动健康检查。然后,Envoy使用服务发现和健康检查信息的联合来确定健康的负载平衡目标。特使还支持通过异常检测子系统进行被动健康检查。

高级负载均衡:分布式系统中不同组件之间的负载平衡是一个复杂的问题。因为Envoy是一个独立的代理而不是一个库,所以它能够在一个地方实现高级的负载平衡技术,让他们可以被任何应用程序访问。目前Envoy支持自动重试,断路,通过外部速率限制服务的全球速率限制,请求遮蔽和异常值检测。未来的支持计划要求赛车。

前端/边缘代理支持:尽管Envoy主要被设计为服务通信系统的服务,但在边缘使用相同的软件(可观察性,管理,相同的服务发现和负载平衡算法等)也是有好处的。 Envoy包含足够的功能,使其可用作大多数现代Web应用程序用例的边缘代理。这包括TLS终止,HTTP / 1.1和HTTP / 2支持,以及HTTP L7路由。

最佳的可观察性:如上所述,Envoy的主要目标是使网络透明。但是,在网络层面和应用层面都会出现问题。Envoy包括强大的统计支持所有子系统。 statsd(和兼容的提供者)是当前支持的统计信息接收器,尽管插入不同的信息并不困难。统计数据也可以通过管理端口查看。Envoy还支持通过第三方供应商进行分布式追踪。

动态配置:Envoy可以选择使用一组分层的动态配置API。如果需要,实现者可以使用这些API来构建复杂的集中管理的部署。

设计目标

关于代码本身的设计目标的一个简短说明:尽管Envoy并不是很慢(我们已经花费了相当多的时间来优化某些快速路径),但代码已经被编写成模块化并且易于测试,而不是针对最大可能的绝对性能。我们认为,这是一个更有效的时间使用的时间,因为典型的部署将与语言和运行时间一起慢许多倍,并且有更多的内存使用。

原文发布于微信公众号 - 智能计算时代(intelligentinterconn)

原文发表时间:2018-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Debian社区

Linux 上如何禁用 USB 存储设备

为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。 为了消除这种可能性,机构会限制和监测访问互联网,同时禁用...

2721
来自专栏深度学习那些事儿

理解matplotlib、pylab与pyplot之间的关系

这些模块其实功能都相同,程序运行的时候都在运行相同的code,不同的是导入模块的方式不同。

2544
来自专栏Java架构

干货:大型互联网公司分布式缓存的优秀实践和线上案例在此我在推荐一个学习架构框架的学习体系:

3366
来自专栏软件测试经验与教训

如何规划性能测试拓扑

3526
来自专栏云计算与大数据

研发:git flow 研发工作流程

git flow命令仓库:https://github.com/heidsoft/gitflow

1743
来自专栏Java技术栈

浅谈大型网站之负载均衡架构

概念 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务...

3626
来自专栏黑白安全

M7lrvCms_Beta3.0破解版 一款自动化渗透神器

    1:exp更新到145个CMS系统(具体太多了没法一一举例,特别说明:免费版去除了getshell功能!!!不要问我为什么,这种简单的问题想想也知道!!...

5114
来自专栏IT技术精选文摘

什么是内存数据库以及它如何有效保存数据

你可能听说过内存数据库。如果没有,您可以从这里(https://en.wikipedia.org/wiki/In-memory_database)快速查看他们的...

2875
来自专栏WeTest质量开放平台团队的专栏

HTTP/2之服务器推送(Server Push)最佳实践

商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。

4680
来自专栏about云

构建高并发高可用的电商平台架构实践1

问题导读: 1.如何构建高并发电商平台架构 2.哈希、B树、倒排、bitmap的作用是什么? 3.作为软件工程师,该如何实现读写? 4.如何实现负载均衡、反向代...

46810

扫码关注云+社区

领取腾讯云代金券