39

Uber开源P2P容器仓库Kraken,每秒分布TB级数据

 5 years ago
source link: http://dockone.io/article/8650?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Docker容器仓库的主要职能是存储和分布Docker镜像。这是个看似容易的任务,但是当计算集群达到Uber的规模后,容器仓库很容易成为系统的瓶颈。尤其在混合云多活架构下,镜像分布变得更加复杂。

为了解决私有容器仓库的性能问题,Uber开发了P2P的镜像仓库——Kraken(海怪)。

容器技术一直以来是Uber架构的基础(Uber为此还开发了自己的镜像生成工具Makisu——卷帘),但是随着计算集群的增长,简单在私有容器仓库的基础上做数据分片和增加cache无法提供Uber所需的流量。

Kraken在2016年应运而生。这个项目着重于可扩展性和可用性,并且适用于再混合云架构中的镜像管理,复制和分布。Kraken还支持后台扩展,可以以其他容器仓库为后台,单纯的作为发布层来部署。

架构

Uber的工程师经过了几轮设计,最终选定P2P的架构。Kraken使用的P2P协议基于BitTorrent,但是加以了改进,使其更适合在数据中心内部署的企业级应用。

Kraken本身不负责数据的存储,而是支持多种存储后台,比如AWS S3,HDFS,甚至是其他的应用仓库。存储后台的界面设计非常通用,开发者可以轻松的加入新的实现。

Kraken的各个部分都可以自我修复,任意单一机器的问题都不会对系统整体造成影响。假如有多个异地集群,Kraken还支持基于镜像名的异地无损复制。

性能

Kraken在2018年初被部署入生产环境。自那以后,曾经的镜像仓库性能问题不复存在。

最忙碌的一个Kraken集群每天分布超过一百万个镜像层,其中有十万个以上大小超过1GB。在高峰时期,Kraken可以在30秒内分布2万个大小在100MB和1GB之间的镜像层。

Kraken的可扩展性使其可以轻松支持超过8000台机器的计算集群,而且可以以最大下载速度50%以上的速度向集群中每台机器分布镜像。事实上在Uber收集到的数据中,集群和镜像的大小对下载速度没有明显的影响。

对比

对于第一次听说Kraken的开发者而言,难免会问到Kraken和阿里巴巴Dragonfly(蜻蜓)项目的区别。Dragonfly的架构中,由超级节点决定每一块4MB数据块的流向。虽然超级节点理论上可以做出最优的选择,但是整个集群的流量会被一台或几台机器的处理能力所限制。随着集群或镜像大小的增加,性能会呈线性下降。

Kraken的架构中,中心部件Tracker只负责搭建起一个随机正则图的网络拓扑结构,但是具体的数据传输的协商是由每台机器上的peer进程负责,所以Kraken的性能不会太受集群和镜像大小的影响。此外,Kraken是一个高可用性的系统,并且支持异地无损复制,适合使用于混合云环境。

开源

自从内部使用以来,Kraken已被用来管理Uber的所有镜像。

Uber希望可以通过开源这个项目,来引发更多Docker相关领域的讨论。

假如您对Kraken的实现细节有兴趣,请访问Kraken的 GitHub页面

原文链接: # Introducing Kraken, an Open Source Peer-to-Peer Docker Registry (作者:Yiran Wang)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK