Docker注册表的主要目的是存储和分发Docker镜像。这看起来似乎是一项相对微不足道的任务,但对于Uber这样的大规模计算集群,它很容易成为扩展瓶颈。在多区域和混合云系统的计算环境中,图像分发变得更加具有挑战性。
为了解决传统Docker注册表栈的性能问题,Uber的集群管理团队开发了开源点对点(P2P) Docker注册表Kraken。Docker容器是Uber基础设施(我们甚至建立了自己的开源Docker图像生成器,Makisu但是随着我们计算集群的数量和大小的增长,一个简单的带有分片和缓存的Docker注册表设置已经不能满足高效分发Docker映像所需的吞吐量了。
Kraken专注于可伸缩性和可用性,设计用于Docker映像管理、复制和混合云环境中的分发。有了可插入的后端支持,Kraken还可以作为分布层插入到现有的Docker注册表设置中。
体系结构
在开发Kraken的过程中,我们探索了多种设计选择,最终形成P2P架构。Kraken使用针对数据中心网络环境量身定制的P2P协议,并在企业级改进微服务生命周期管理。
Kraken支持可插拔存储选项,它不管理数据blob,而是插入可靠的blob存储选项,如S3、HDFS或其他注册表。存储接口很简单,很容易添加新的选项。
独特的数据分发解决方案建立在现有的、成熟的技术之上。此外,Kraken是自愈的,易于维护,并支持集群之间的无损和基于规则的异步复制。
巨大的性能提升
Kraken于2018年初首次部署在优步,自那以后,我们在遗留Docker注册表堆栈中遇到的性能问题已经得到了解决。
我们最繁忙的克拉肯集群在生产中分销每天超过100万个斑点,每日100,000分发行量为1GB或更大。此外,在峰值生产时,克拉肯将在30秒内分配20,000 100MB至1GB的斑点。
Kraken的高可伸缩性使其能够支持每个集群至少8000台主机,并且在集群中以超过主机最大下载速度限制的50%的速度分发Docker映像。事实上,使用Kraken,集群和图像大小对下载速度没有显著影响。
开源巨妖
自内部发布以来,Kraken一直被用于在优步管理和分发Docker的所有图像。
通过向更广泛的开源社区提供该工具,我们希望能够激发有关工程和设计最佳实践的讨论,以便用Docker构建适应性强、可靠的基础设施。
如果您对构建可伸缩的集群管理应用程序感兴趣,可以考虑申请一个角色在我们的团队!






