写点什么

优步发布开源服务 Kraken:一款 P2P Docker 容器仓库

作者:K Jonas

  • 2019-04-09
  • 本文字数:1284 字

    阅读完需:约 4 分钟

优步发布开源服务Kraken:一款P2P Docker容器仓库

优步于 3 月 5 日发布了 Kraken,这是一个开源的点对点(P2P)Docker 容器仓库。Kraken 旨在为大规模系统提供 Docker 镜像服务,解决跨区域支持、性能瓶颈和混合云环境所面临的挑战。


Kraken 大致基于BitTorrent协议,与 Docker registry API 兼容,并提供可配置的存储后端,诸如S3HDFS等。Kraken 最初于 2018 年初在优步内部开始部署,随后向开源社区公开。


在容器中运行的Docker镜像是由镜像层组成的,这些层包含了相对之前的层所发生的变更,并与镜像文件和可执行文件的二进制大对象(blob)相关联。Docker容器仓库是服务端应用,用于存储和分发镜像层和镜像 blob。Docker 在Docker Hub 提供了免费的容器仓库,另外还提供了商业版本的容器仓库。除 Docker 外,还诞生了很多其它容器仓库以满足各种特殊需求,例如私有托管或将 IPFS 实现为存储后端


优步在一个混合云环境中运行自己的大规模分布式集群。 尽管优步努力通过镜像缓存和数据库分片来提高性能,但 Docker 仓库还是无法满足其环境下不断增长的需求,最终优步团队选择构建了自己的解决方案


Kraken 在优步部署以来,每天能支持超过 100 万个 blob。 在优步的生产高峰时期,Kraken 可以在 30 秒内分发多达 2 万个 blob,每个 blob 的大小从 100MB 到 1GB 不等。 根据Kraken文档介绍,Kraken 能够在每个主机上以高于下载速度上限达 50%的速度分发 Docker 镜像。此外,集群大小和镜像大小都对下载速度没有显著影响。Kraken未来的改进将集中在提升大镜像性能、安全性改进和支持 Docker 标记转换等方面。


Kraken 的优秀架构是优步得以实现可扩展且高度可用的容器仓库的关键所在。该设计的基础是一个定制的 P2P 网络,其中包含数量有限的主机,这些主机将内容分发(seed)到代理网络上。网络中的代理形成具有高连通性和小直径的伪随机规则图,这是提升系统下载速度的重要环节。代理接受来自源的内容,源则在后端存储镜像 blob,并与网络中的端点连接,返回 docker 所请求的镜像。



优步 Kraken 架构(图片来自 Kraken README)


Kraken 最初是使用 BitTorrent 构建的,但 Kraken 与 BT 网络面临的挑战差异导致 Kraken 团队开始构建自己的 P2P 驱动。但该团队也在积极审查 Kraken 协议,以便使其再次与 BitTorrent 实现兼容。


阿里巴巴的原生云计算基金会(CNCF)下属的Dragonfly项目也是一个开源的 P2P 镜像和文件分发系统,可以解决原生云应用中面临的分发问题。Kraken 的文档中注明了两者之间的主要差异:


Dragonfly 集群有一个或几个“超级节点”,用于协调集群中每个 4MB 大小的数据块的传输。虽然超级节点能够做出最佳决策,但整个集群的吞吐量会受到一台或数台主机的处理能力限制,并且随着 blob 大小或集群大小的增加,整体性能会线性下降。

Kraken 的追踪器仅帮助协调连接图,并将实际数据传输的协商留给单独的端点处理,因此 Kraken 可以更好地扩展到大型 blob。最重要的是,Kraken 是 HA 并支持跨集群复制,这两点都是可靠的混合云设置所必需的。


有关 Kraken 的更多信息可以访问GitHub页面,也可以加入优步的Slack频道


查看英文原文Uber Releases Kraken: An Open Source P2P Docker Registry


2019-04-09 08:005208

评论

发布
暂无评论
发现更多内容

数据结构与算法知识点总结

烟雨濛濛

图片处理不用愁,给你十个小帮手

阿宝哥

Java 开源 大前端 工具 图片

浅析 VO、DTO、DO、PO 的概念、区别和用处!

Java小咖秀

学习 设计模式 模型 经验分享

Tomcat8.5源码构建

知春秋

tomcat tomcat构建 tomcat源码解读 tomcat剖析

Python类中的__new__和__init__的区别

BigYoung

Python __init__ __new__

Node.js与二进制数据流

自然醒

Java node.js 大前端 二进制

一些思考

张健

Linux 进程必知必会

苹果看辽宁体育

Linux 操作系统

Rust是如何保障内存安全的

博文视点Broadview

读书笔记 rust

信创舆情一线--《关键信息基础设施安全保护条例》纳入2020年立法计划

统小信uos

信息安全

性能碾压 POI !利用模板语法快速生成 Excel 报表

葡萄城技术团队

表格控件 GCExcel 服务器端开发

30 张图带你分分钟看懂进程和线程基础知识全家桶

爱嘤嘤嘤斯坦

Java 线程 进程 进程线程区别

重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」

小傅哥

设计模式 小傅哥 重构 代码优化 访问者模式

推荐一款Python开源库,技术人必备的造数据神器!

狂师

Python 开源 自动化 开发工具 开发数据

Redis进阶篇三——主从复制

多选参数

redis redis高可用 redis6.0.0 Redis项目

Python中的@staticmethod和@classmethod的区别

BigYoung

Python classmethod staticmethod

带你解析MySQL binlog

Simon

MySQL Binlog

关于计划的思考

zhongzhq

不是完成你学习的 KPI ,而是要形成指导你行动的 OKR

非著名程序员

学习 程序员 提升认知 知识管理

SpringBoot入门:00 - 初始化项目

封不羁

Spring Boot java 14

JVM中栈的frames详解

程序那些事

JVM 堆栈 性能调优 JIT GC

​区块链技术的重要性

CECBC

猿灯塔:spring Boot Starter开发及源码刨析(二)

猿灯塔

Java 猿灯塔 源码刨析

一文看懂 OAuth2

Geek_z9ygea

Java 大前端 Web oauth2.0

还在划水?这个SQL你能写出来吗?

书旅

php MySQL SQL语法 sql查询

Java集合总结,从源码到并发一路狂飙

给你买橘子

Java 编程 算法 集合

工厂方法模式

Leetao

Python 设计模式 工厂方法模式

字节跳动面试经验分享,已拿 Offer!

伍陆柒

Java 面试 大厂

mac vmware centos7 设置静态IP

愤毛阿青

network vmware Centos 7

漫画 | 架构设计中的那些事

码农神说

架构设计 架构师 漫画编程

开发者必备——IDEA配置清单

Noneplus

配置 IDEA

优步发布开源服务Kraken:一款P2P Docker容器仓库_开源_InfoQ精选文章