介绍Sidekick-高性能负载均衡器
几乎所有现代的云原生应用程序都使用HTTPs作为其主要传输机制,即使在网络内部也是如此。每个服务都是大规模动态配置的HTTP端点的集合。为在Internet上为Web应用程序服务而构建的传统负载均衡器在这里处于不利地位,因为它们使用旧式DNS循环技术来实现负载均衡和故障转移。基于DNS的解决方案无法满足任何现代要求。
尽管某些软件定义的负载平衡器(如NGINX,HAProxy和Envoy Proxy)具有全功能并可以处理复杂的Web应用程序需求,但它们并不是为高性能,数据密集型工作负载而设计的。
现代数据处理环境每次运行都会在计算节点和存储节点之间移动TB级的数据。负载均衡器的基本要求之一是在不影响性能的情况下分配流量。在存储节点和计算节点之间作为单独的设备引入负载平衡器层通常最终会损害性能。传统的负载平衡器设备的聚合带宽有限,并会引入额外的网络跃点。对于在商用服务器上运行的软件定义的负载均衡器,此体系结构限制也适用。
这在现代数据处理环境中成为一个问题,在该环境中,同时在存储服务器上碰撞的节点数通常为100至1000。
由于没有旨在满足这些高性能数据处理需求的负载均衡器,因此我们自己构建了一个。它被称为Sidekick,回溯到每个超级英雄(MinIO)都有值得信赖的伙伴的时代。
Sidekick通过采用Sidecar方法解决了网络瓶颈。它与每个客户端应用程序一起作为微小的补充进程运行。这样,应用程序可以直接与服务器通信,而无需额外的物理跃点。由于每个客户端都以无共享模式运行自己的助手,因此您可以将负载均衡器扩展到任意数量的客户端。
在像Kubernetes这样的云原生环境中,Sidekick作为Sidecar容器运行。将Sidekick添加到现有应用程序中很容易,而无需对应用程序二进制文件或容器映像进行任何修改。
示例:在MinIO群集中分配Splunk Indexers SmartStore访问。
让我们看一个特定的应用示例:Splunk。
在这种情况下,我们将MinIO用作高性能,AWS S3兼容对象存储,作为Spunk的SmartStore终端节点。请参阅为Splunk SmartStore S3 Storage利用MinIO白皮书,以进行深入了解。
Splunk在一组分布式节点上运行多个索引器,以分散工作负载。Sidekick位于Indexers和MinIO群集之间,以提供适当的负载平衡和故障转移功能。由于Sidekick基于无共享架构,因此每个Sidekick都沿着Splunk索引器的侧面独立部署。结果,Splunk现在与本地的Sidekick进程进行对话,并且Sidekick成为MinIO的接口。这些索引器通过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 --health-path=/minio/health/ready https://minio{1...16}:9000
Sidekick使用就绪服务API不断监视MinIO服务器的可用性。对于旧版应用程序,它将退回到端口可访问性以进行就绪检查。这种就绪API是Kubernetes领域的标准要求。如果任何MinIO服务器发生故障,Sidekick将自动将S3请求重新路由到其他服务器,直到发生故障的服务器重新联机。应用程序免费获得了断路器设计模式的好处。
Sidekick的优点
那么,与其他负载均衡器相比,使用Sidekick的核心优势是什么?
减少层- 消除了中间层和额外的硬件要求。这提供了卓越的性能和可伸缩性。
即时故障转移- 尽早发现故障并将应用程序流量定向到其他服务器,从而避免了昂贵的应用程序超时和复杂的错误处理要求。
性能 -Sidekick专为高性能数据传输而设计,可处理大型环境。经过测试,可以与100GbE网络和NVMe类存储 无缝扩展。
极简主义- 采取极简主义方法是其性能优势的关键。其他负载平衡器已经演变为过时的软件,其复杂性是以可管理性和性能为代价的。
Sidekick的缺点
它被设计为只能以最少的功能作为边车运行。如果您有复杂的要求,则有更好的选择。
同样重要的是,我们不期望改变这种极简的,面向性能的方法。Sidekick旨在做一些事情,并且做得特别好。
路线图
Sidekick团队目前正在努力添加共享的缓存存储功能。此功能将使应用程序可以透明地在NVMe或Optane SSD上使用MinIO充当缓存层。这将在许多边缘计算用例中具有应用程序。
如何开始
Sidekick已获得GNU AGPL v3的许可,可在Github上使用。我们鼓励您试用一下。如果您已经部署了MinIO,您将立即掌握其最小的相似性。如果没有,请趁机启动整个对象存储套件。我们拥有精湛的文档和传奇的社区Slack频道,可为您提供帮助。