docker-registry的定制和性能分析
docker-index
- Web UI
- Meta-data 元数据存储(附注、星级、公共库清单)
- 访问认证
- token管理
- 存储镜像、以及镜像层的家族谱系
- 没有用户账户数据
- 不知道用户的账户和安全性
- 把安全和认证委托给docker-hub来做,用token来保证传递安全
- 不需要重新发明轮子,支持多种存储后端
- 没有本地数据库
- 因为镜像最终是以tar.gz的方式静态存储在服务端
- 适用于对象存储而不是块存储
- registry存储驱动
- 官方支持的驱动有文件、亚马逊AWS S3、ceph-s3、Google gcs、OpenStack swift,glance
docker-registry
后端存储
一次docker pull发生的交互

- Client向Index请求,知道从哪里下载samlba/busybox
- Index回复:
- samalba/busybox在RegistryA
- samalba/busybox的checksum,所有层的token
- Client向Registry A请求,samalba/busybox的所有层。Registry A负责存储samalba/busybox,以及它所依赖的层
- Regsitry A向Index发起请求,验证用户/token的合法性
- Index返回这次请求是否合法
- Client从registry下载所有的层
- registry从后端存储中获取实际的文件数据,返给Client
搭建私有镜像库的方案

上面的index,registry,后端存储3者都是可选的。registry分0.9的python版实现和2.0版的go实现。
认证和权限
如果镜像库不直接提供给用户使用,仅仅是私有PaaS的一部分,可以不用index组件,直接上registry就行。index的开源实现包括docker-registry-web,docker-registry-frontend。支持较好的是马道长的wharf。
后端存储
我们环境使用的是网易的内部的对象存储NOS,类似于S3。其他的方案没用过,如果要自己搭,可能靠谱的是ceph-s3。如果在公网环境或者已经购买了公有云服务,可以考虑自己实现一个registry-对象存储的驱动。
集群和分布式
registry本身是无状态的,可以水平扩展,然后在前面做ngix的负载均衡。
性能分析
v1协议 vs v2协议
|
客户端 |
push总时间 |
pull总时间 |
|
registry-0.9 |
388.1 |
80.9 |
|
registry-2.0 |
368.4 |
76.1 |
做了性能对比测试,同样为docker1.6,v2协议比v1协议快5-6%左右,基本可以忽略不计。
单次pull和push的性能分析
层|docker push|curl put :-----|:----- layer1|34s|4.3s layer2|325s|44.6s
层|docker pull|curl get :-----|:----- layer1|42s|20.8s layer2|2s|1.4s
经过对比测试,单次docker pull和push的最大耗时在客户端,也可以观察到每次做docker pull和push的时候系统CPU占用率都在100%。也就是说50%以上的时间花在本地做的压缩、计算md5等操作。
并发分析
并发测试的结果是在一个2核2G内存的registry-0.9服务器,直接用文件存储,大约能负载50个docker client的并发。如果换用对象存储的后端,估计10个docker client的并发就是极限了。在这方面registry-2.0的并发能力更强,但对内存消耗更大。
Q&A
问:2.0的性能也没什么变化啊,优势在哪里? **答:**客户端优化有限,在超过100个节点同时pull一个镜像时,2.0服务端资源占用少。
问:服务端的并发瓶颈在哪里? **答:**服务端的代码还没做过更多的分析,从经验判断主要还是IO,python的内存占用比较多。
问:考虑过多机房image存储CDN没? **答:**这个还真没考虑过,目前我们的镜像服务是个内部PaaS平台用的,只要保证集群所在机房能快速访问就行。
问:那还不如每机房加缓存? **答:**是的,也可以考虑registry的mirror机制,用了mirror后可以一个点push,其他点pull。
问:你们的调度器是自己开发的吗? **答:**我们底层用的是Kubernetes,调度器做一定的修改,主要是为了保证多个可用域。
问:内部的PaaS有没有做资源限制、网络隔离? **答:**有,目前我们的Docker是跑在kvm上。
问:昨天网易好多服务断片了,据说是网络攻击,那这些服务有跑在Docker上吗? **答:**呵呵,断片是因为BGP的核心交换机问题,我也很好奇是什么引起的,目前还没有组织和个人声称对此事负责。
问:有没有考虑过nova-docker? **答:**社区不是很活跃,我们没有采用这个方案,但对于中小公司来说这是最快的方案。
问:为啥不考虑自己实现调度器? **答:**忙不过来,我们也想做啊,这个放在后面实现。
问:我们准备在某公有云上跑Docker集群。 **答:**先这么用呗,我觉得Docker的优势就是底层平台无关,今后换了底层迁移也没有那么困难。
如果尚在犹豫,为什么不先行动起来?华为云容器,企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。
https://www.huaweicloud.com/product/cce.html
docker-registry的定制和性能分析的更多相关文章
- 记一次docker问题定位(perf,iostat等性能分析)
背景 最近参与的项目是基于 OpenStack 提供容器管理能力,丰富公司 IaaS 平台的能力.日常主要工作就是在开源的 novadocker 项目(开源社区已停止开发)基础上进行增强,与公司的其他 ...
- Docker入门教程(四)Docker Registry
Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...
- 部署私有Docker Registry
安装部署一个私有的Docker Registry是引入.学习和使用Docker这门技术的必经之路之一.尤其是当Docker被所在组织接受,更多人.项目和产品开始接触和使用Docker时,存储和分发自制 ...
- Java 性能分析工具 , 第 1 部分: 操作系统工具
引言 性能分析的前提是将应用程序内部的运行状况以及应用运行环境的状况以一种可视化的方式更加直接的展现出来,如何来达到这种可视化的展示呢?我们需要配合使用操作系统中集成的程序监控工具和 Java 中内置 ...
- linux命令(4):top 命令(性能分析工具)
linux 的top命令详解 简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个 ...
- Python丨Python 性能分析大全
虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...
- 一文掌握 Linux 性能分析之网络篇(续)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 一文掌握 Linux 性能分析之网络篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 【原创】一文掌握 Linux 性能分析之 I/O 篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 一文掌握 Li ...
随机推荐
- IdentityServer4入门一
这几天学习IdentityServer4,感觉内容有点乱,也可能自己水平有限吧.但为了巩固学习的内容,也打算自己理一下思路. 首先IdentityServer解决什么问题? 下图是我们的一个程序的组织 ...
- 【Linux】安装 node.js
1.在 linux 上安装 node.js 有几种方式,这里 教的是最简单的一种,因为其他都比较坑. 2.先去 node.js 官网 获取到已经编译好的安装包的地址, 3.使用 wget 去下载上面获 ...
- python 简单了解一下 描述器
1.描述器是什么? 在Python中描述器也被称为描述符, 1)描述器实际上是任何新式类(新式类是继承自 type 或者 object 的类),这种类至少实现了3个特殊的方法__get__, __se ...
- centos6.5安装mysql(转载,亲测可用)
如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--Cen ...
- MyEclipse环境的项目改为在Eclipse中运行爬坑记【我】
新检出一个web项目,同事都是运行在MyEclipse中的,我用Eclipse启动, 1.首先是许多jar包报错: 处理方法为 remove掉,然后 选 WEB-INF 下的所有 jar 重新添加 ...
- Pocsuite3--编写破壳CVE-2014-6271_Shellshock的POC
前言 编写破壳CVE-2014-6271_Shellshock的POC,把公开出来的路径封装起来,作为Pocsuite3的验证POC 情况1:网站无法访问,返回失败 情况2:网站可以访问,无漏洞 情况 ...
- XSSer:自动化XSS漏洞检测及利用工具
转载自FreeBuf.COM XSS是一种非常常见的漏洞类型,它的影响非常的广泛并且很容易的就能被检测到. 攻击者可以在未经验证的情况下,将不受信任的JavaScript片段插入到你的应用程序中,然后 ...
- 【转载】恢复误删文件--DOS命令应用实例(一)
<电脑爱好者>报转载第一辑第二篇之恢复误删文件--DOS命令应用实例(一) 恢复误删文件--DOS命令应用实例(一) 上期我们讲述了 ...
- 在vue的element图片的上传及回调
首先声明,本人用的是element组件写的图片的上传及回调,若非element本方法暂不支持. 下面开始正式讲图片的上传及回调.(本篇拒绝一切花里胡哨,都是干活,言辞粗糙,望请见谅) 1,elemen ...
- hdoj3534(树形dp,求树的直径的条数)
题目链接:https://vjudge.net/problem/HDU-3534 题意:给出一棵树,求树上最长距离(直径),以及这样的距离的条数. 思路:如果只求直径,用两次dfs即可.但是现在要求最 ...