介绍 Sidekick - 一款高性能负载均衡器

几乎所有现代云原生应用程序都使用 HTTPS 作为它们的主要传输机制,即使在网络内部也是如此。每个服务都是一个由动态提供的 HTTPS 端点集合,并能够按需扩展。传统的负载均衡器是为在互联网上提供 Web 应用服务而构建的,它们使用老式的 DNS 轮询技术进行负载均衡和故障转移。对于任何现代需求来说,基于 DNS 的解决方案都无法修复。
虽然一些软件定义的负载均衡器,比如 NGINX、HAProxy 和 Envoy Proxy 功能齐全,可以处理复杂的 Web 应用程序需求,但它们不是为高性能、数据密集型工作负载而设计的。
现代数据处理环境在每次运行时都会在计算节点和存储节点之间移动 TB 级的数据。负载均衡器的一个基本需求是,在不影响性能的情况下分发流量。在存储和计算节点之间引入负载均衡器层作为单独的设备,往往会导致性能下降。传统的负载均衡器设备的总带宽有限,并且会引入额外的网络跃点。这种架构上的局限性对于在通用服务器上运行的软件定义的负载均衡器来说也是存在的。
在现代数据处理环境中,这会成为一个问题,因为通常会有数百到数千个节点同时访问存储服务器。

由于没有负载均衡器是为了满足这些高性能数据处理需求而设计的,因此我们自己构建了一个。它被称为 Sidekick,它让人想起每个超级英雄 (MinIO) 都有一个可靠的伙伴的时代。
Sidekick 通过采用 sidecar 的方法来解决网络瓶颈问题。它作为一个微小的 sidecar 进程与每个客户端应用程序一起运行。这样,应用程序可以直接与服务器通信,而无需额外的物理跃点。由于每个客户端都以无共享模型运行自己的 sidekick,因此您可以将负载均衡器扩展到任意数量的客户端。

在 Kubernetes 这样的云原生环境中,Sidekick 作为 sidecar 容器运行。无需修改您的应用程序二进制文件或容器镜像,就可以轻松地将 Sidekick 添加到现有应用程序中。
示例:在 MinIO 集群中分发 Splunk Indexer 的 SmartStore 访问。
让我们看一个具体的应用程序示例:Splunk。
在本例中,我们将使用 MinIO 作为高性能、与 AWS S3 兼容的对象存储,作为 Spunk 的 SmartStore 端点。请参考 利用 MinIO 进行 Splunk SmartStore S3 存储 白皮书以深入了解。
Splunk 在一组分布式节点上运行多个 indexer 以分散工作负载。Sidekick 位于 Indexer 和 MinIO 集群之间,提供适当的负载均衡和故障转移功能。由于 Sidekick 基于无共享架构,因此每个 Sidekick 都独立部署在 Splunk indexer 旁边。因此,Splunk 现在与本地 Sidekick 进程通信,Sidekick 成为 MinIO 的接口。这些 indexer 通过 HTTP RESTful AWS S3 API 与对象存储服务器通信。
配置 Splunk SmartStore 使用 Sidekick
[volume:s3]
storageType = remote
path = s3://smartstore/remote_volume
remote.s3.access_key = minio
remote.s3.secret_key = minio123
remote.s3.supports_versioning = false
remote.s3.endpoint = http://localhost:8080
Sidekick 获取 MinIO 服务器地址集群(本例中为 16 个)和健康检查端口,并将它们组合成一个单一的本地端点。负载使用随机轮询调度程序在所有服务器之间均匀分配。
$ sidekick --health-path=/minio/health/ready https://minio{1...16}:9000
Sidekick 使用 就绪服务 API 不断监控 MinIO 服务器的可用性。对于遗留应用程序,它将回退到端口可达性以进行就绪性检查。此就绪性 API 是 Kubernetes 环境中的 标准需求。如果任何 MinIO 服务器出现故障,Sidekick 会自动将 S3 请求重新路由到其他服务器,直到故障服务器恢复联机。应用程序免费获得 断路器设计模式 的好处。
Sidekick 的优势
那么,与其他负载均衡器相比,使用 Sidekick 的核心优势是什么呢?
层级减少 - 消除了中间层和额外的硬件需求。这带来了更高的性能和可扩展性。
即时故障转移 - 尽早检测到故障并将应用程序流量引导到其他服务器,避免昂贵的应用程序超时和复杂的错误处理需求。
性能 - Sidekick 专为高性能数据传输而构建,可以处理大型环境。它经过测试,可以与 100GbE 网络和 NVMe 级存储 无缝扩展。
极简主义 - 采取极简主义的方法是其性能优势的关键。其他负载均衡器已经发展成为臃肿的软件,其中复杂性是以可管理性和性能为代价的。
Sidekick 的劣势
它设计为仅作为 sidecar 运行,并具有最小的功能集。如果您有复杂的需求,还有更好的替代方案。
同样重要的是,我们预计不会改变这种极简主义、面向性能的方法。Sidekick 的设计是为了完成几件事,并做得非常出色。
路线图
Sidekick 团队目前正在努力添加共享缓存存储功能。此功能将使应用程序能够透明地使用 NVMe 或 Optane SSD 上的 MinIO 作为缓存层。这将在许多 边缘计算用例 中得到应用。
如何开始
Sidekick 在 GNU AGPL v3 下获得许可,并且可以在 Github 上获取。我们鼓励您试用一下。如果您已经部署了 MinIO,您将立即了解其极简主义的相似性。如果没有,请抓住机会启动 整个对象存储套件。我们拥有出色的 文档 和传奇的社区 Slack 频道来帮助您顺利完成。