Kraken 是 Uber 开源的点对点(P2P)Docker 容器仓库。Kraken 旨在为大规模系统提供 Docker 镜像服务,解决跨区域支持、性能瓶颈和混合云环境所面临的挑战。
Kraken 大致基于BitTorrent 协议,与 Docker registry API 兼容,并提供可配置的存储后端,诸如S3和HDFS等。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 实现兼容。
介绍内容来自 InfoQ
P2P 网络 比特币网络使用简单的方法来执行对等节点的发现和节点间的通信。以下章节适用于全节点和SPV客户端,不同的是SPV通过布鲁姆过滤器(Bloom filters )执行块的发现。 对等节点发现 比特币的核心部分维护一个在启动时可以连接的对等节点列表。当一个完整的节点第一次启动时,它必须被自举(bootstrapped)到网络。这个过程如今在比特币的核心部分通过一个短名单上的DNS种子自动执
我正在为nodejs应用程序上的典型开发人员规划工作流。我想你们大多数人都会: git clone[appcode](具有卷映射到本地路径的Dockerfile) 然后我编辑一些代码,最好使用像WebStorm或文本编辑器Sublime等IDE。然后终端Ctrl C终止当前进程 以上所有内容看起来都很标准吗? 我的主要问题是,是否有人使用IDE或节点检查对容器进行调试? 我尝试过暴露端口等..连接
我在这个repo中用2个图像制作了3个docker容器,使用MongoDB公共图像制作了1个。我使用 < code>docker-compose.yaml是: 但是MongoDB无法与节点服务器连接,并给出了以下错误: < code>backend/db.js的代码: 添加mongouri作为环境变量后的终端输出: 新错误:
4.7. 容器扩展点 Spring框架的IoC容器被设计为可扩展的。通常我们并不需要子类化各个BeanFactory或ApplicationContext实现类。而通过plugin各种集成接口实现来进行扩展。下面几节专门描述这些不同的集成接口。 4.7.1. 用BeanPostProcessor定制bean 我们关注的第一个扩展点是BeanPostProcessor接口。它定义了几个回调方法,实现
问题内容: 在永久启动Docker容器中启动节点时,如果我手动启动时出现问题,而是在构建和启动容器时退出Dockerfile中的同一命令,则退出了。该命令在bash中有效: 我试图将命令放入Dockerfile中,但容器未启动 问题答案: Google网上论坛讨论 在后台运行。要在前台运行,请尝试。 这永远从前台开始,这正是Docker需要的。请记住,只有在CMD中定义的过程启动并运行时,容器才是
要获取节点版本-我希望运行以下内容: 我正在和docker一起运行以下程序: 我明白了: 我的问题是:如何从docker容器中获取节点的版本?