Tengine 的一个用例,Tengine 是 nginx 的一个即插即用替代品和分支

dmsimard

我一直很喜欢 nginx,一见钟情。

我倾向于首先将 nginx 用作 Web 内容和应用程序的反向代理服务器。这意味着 nginx 将您的请求发送到后端服务器,并转发它们的 响应。

我使用的一些后端服务器示例

现在,很酷的是,这些后端服务器擅长它们所做的事情:提供用特定 语言编写的代码和应用程序。

将出色的轻量级代理和出色的后端服务器结合起来,您将获得出色的性能。
这与 Apache 形成对比,Apache 采用模块化方法:它试图自己完成所有事情——万金油,样样精通,样样不精。

nginx 正在稳步 增加其市场份额,对抗 Apache 等竞争对手,这并不复杂 。

我告诉过你 nginx 还可以做 SSL 终止 并用作 负载均衡器 吗?

Tengine

够了 nginx,让我们谈谈 Tengine

你听说过 淘宝 吗?说实话,直到最近我才听说过。
原来他们在 Alexa 的顶级网站中排名第 8,紧随 Twitter 之后。
当中国占 世界人口的近 20% 时,即使在市场上渗透一小部分,实际上也是巨大的 。

Tengine 是淘宝团队创建的 nginx 分支。Tengine 中有很多功能尚未(存在于 nginx 中),并且有些功能是上游维护者表示他们不会 实现的。

一些亮点 包括

  • 继承了 Nginx-1.4.7 的所有功能,即它与 Nginx 100% 兼容。
  • 支持动态模块加载 (DSO)。无需重新编译 Tengine。
  • 将未缓冲的上传直接发送到后端 服务器
  • 更多负载均衡方法,如一致性哈希和会话 持久性
  • 输入主体过滤器支持,用于 Web 应用程序 防火墙
  • 日志增强:Syslog(本地或远程)、管道日志和日志 采样

用例:对象 存储

长话短说,对象存储是一种在线存储数据并借助 API 轻松访问数据的方法。使用此技术的产品的示例包括 DropboxGoogle DriveMicrosoft OneDriveAmazon S3

Owncloud 也是一个不错的开源和自助托管的对象 存储前端替代方案。

Openstack Swift 和 Ceph 对象 网关

Openstack SwiftCeph 对象网关 (RADOS Gateway) 是目前最流行的开源对象存储解决方案之 二。

它们都类似,您将文件上传到代理服务器——Swift 代理服务器或 Ceph RADOS 网关服务器。这些代理服务器负责将文件发送回存储服务器,以确保数据的可用性和冗余 。

它看起来有点像 这样

+-----------+ +--> | 存储 | | +-----------+ |
+-----+ 文件 +-------+ | +-----------+ | 您 | +----> | 代理 | +-----> | 存储 | +-----+ +-------+ | +-----------+ |
| +-----------+ +--> | 存储 | +-----------+

现在,在高度可用和分布式环境中,您可能有数十或数百个存储和代理服务器。有很多选择,您可能有像 haproxypound 或 nginx 用于负载 均衡。

在您的代理服务器前面使用负载均衡器,您的设置现在看起来像 这样

+-------+ +-----------+ +--> | 代理 | +--+--> | 存储 | | +-------+ | +-----------+ | |
+-----+ 文件 +---------------+ | +-------+ | +-----------+ | 您 | +----> | 负载均衡器 | +-----> | 代理 | +-----> | 存储 | +-----+ +---------------+ | +-------+ | +-----------+ | |
| +-------+ | +-----------+ +--> | 代理 | +--+--> | 存储 | +-------+ +-----------+

我注意到在使用 nginx 作为面向大量和频繁上传的服务器的负载均衡器时出现了一个问题。nginx 缓冲请求的主体,这在 nginx 邮件列表中引起了很多讨论。

这实际上意味着文件被上传两次。您将文件上传到 nginx,nginx 充当反向代理/负载均衡器,nginx 会等到文件上传完成后才会将其发送到可用的后端服务器之一。缓冲将在内存或实际文件中发生,具体取决于 配置

Tengine 最近在 Ceph 邮件列表中被提出,作为解决问题的方案之一,所以我决定尝试一下,看看它的 无缓冲请求对性能有什么影响 。

一个非科学的 测试

我将一个 1GB 文件上传到带有 nginx 1.6.0 的对象存储集群。然后我将其替换为 Tengine 1.5.2 并再次尝试。交换 Web 服务器就像卸载 Nginx 并从 我构建的包中安装 Tengine 一样简单。配置完全兼容,我只需要添加配置来禁用请求 缓冲。

布局如下 所示

+----+ 1GB 文件 +---------------+ +-------+ +-----------+ | 我 | +---------> | 负载均衡器 | +---> | 代理 | +---> | 存储 | +----+ +---------------+ +-------+ +-----------+ 1Gbps 1Gbps

使用 nginx,上传需要 1 分钟 13 秒。
使用 Tengine,上传需要 41 秒。

这相差超过 30 秒 !

结论

禁用缓冲所带来的差异让我感到震惊。
Tengine 确实是 Nginx 的即插即用替代品,就像 MariaDB 5.5 是 MySQL 的替代品一样。

这个博客现在运行 Tengine,也许淘宝的团队也有一个光明的未来 ?

它可能只是开始在中国以外的地方掀起波澜。让我们拭目以待 。