热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3亿Docker容器部署的挑战及应对方案

原文链接:http:www.csdn.netarticle2014-11-032822455IronWorker是一个面向开发者的任务队列服务,如今其已经部署了3亿多个Docker容器,本文

原文链接:http://www.csdn.net/article/2014-11-03/2822455

IronWorker是一个面向开发者的任务队列服务,如今其已经部署了3亿多个Docker容器,本文中分享了IronWorker在使用基于Docker的基础架构时,遇到的挑战、解决方法,以及其中的收获。

编者按:IronWorker是一个面向开发者的任务队列服务,开发人员可以在不设置和管理任何基础设施的基础上,调度执行大规模的任务。几个月前,Iron开始试用Docker,如今其内部已经部署了3亿多个Docker容器,本文中分享了IronWorker在使用基于Docker的基础架构时,遇到的挑战、解决方法,以及其中的收获。

以下为原文:


IronWorker是一个任务队列服务,他让开发人员在不用设置和管理任何基础设施的基础上,调度执行大规模的任务。我们3年多前推出这项服务时,使用了包含所有的语言和代码包的LXC容器运行任务。Docker使我们能够轻松地升级和管理一组容器,为客户提供更多的语言环境和安装包。

我们刚开始使用的是v0.7.4版本的Dokcer,使用过程中遇到一些困难(不能正常的关闭是一个大的问题,但是后来已经被解决了),我们已经成功地克服了所有的困难,并且发现Docker不仅仅满足了我们的需求,更是超出了我们的预期。因此我们在我们的基础架构中推广使用Docker。基于我们的经验来看,这样做是有意义的。


优势

下面列出几点我们意识到的Docker的优势:

更新维护镜像非常容易

Doker 使用类似git的非常强大的方法来管理Image,使得它能很方便地管理大量的、不断变化的环境,他的Image分层系统不仅节省空间而且使我们拥有更细区分度的images。

现在,我们能够跟上快速更新的语言的节奏,我们能够提供专门的例如一个新的专门为媒体处理而设计的ffmpeg stack。我们现在有多达15个不同的堆栈并且正在迅速扩大。

资源分配

基于Lxc的容器是操作系统级别的虚拟化方法,所有的容器共享系统内核,但是每个容器可以被约束使用指定的资源,比如CPU,内存和I/O.Docker提供REST API、环境版本控制、获取/提交镜像、轻松获取统计数据等功能。Docker支持使用CoW文件系统来更安全的隔离数据。这意味着,任务中对文件的所有改变都分开存储,并可以用一个命令清除。 LXC是不能跟踪这种变化。

Dockerfiles使得集成简单

我们的团队遍布世界各地。只要发布一个简单的Dockerfile就可以下班,当你休息时,可以保证其他工作的人能够生成和你的一样的镜像。克服了不同地方的人有不同的作息时间的困难。干净的镜像使得它部署和测试更快。我们的迭代周期更快,团队里每个人更加开心。

不断壮大的社区

Docker在非常快得更新,甚至比chrome更快。更重要的是,参与增加新功能和修复bug的社区数量在大量增加。 无论是为为镜像贡献还是为Docker做贡献,甚至是为Docker的周边工具做贡献,有一大批聪明的人正在为其努力,因此我们也不能置身事外。我们发现Docker的社区非常活跃有意义,我们很高兴能够成为其中一员。

Docker + CoreOS

我们也处在探索阶段,但我们发现Docker和CoreOS的结合对于我们来说似乎是更好地选择。Docker提供了稳定的镜像管理和容器。CoreOS提供了一个精简的云操作系统、机器级别分布式编排和虚拟状态管理。这个组合关注问题的不同方面,是一个更合理的基础设施栈。

挑战

每一个服务器端的技术需要微调和定制,尤其是大规模运行时,,Docker也不例外。(例如,我们跑不到5000万的任务,一个月50万小时计算,并且不断更新我们的镜像)。下面是我们使用大量Docker容器数时遇到的一些挑战:

向后兼容性不够

该领域的快速创新虽然是一个优势,但是也存在缺点。其中之一是向后兼容性差。在多数情况下,我们遇到的问题主要是是命令行语法、API的改变,从产品角度来说这不是一个严重的问题。

但在某些情况下,它影响了操作性能。例如,在任何启动容器后引发的Docker错误,我们要解析STDERR并根据错误类型进行响应(例如重试)。非常不幸的是,错误的输出格式随着版本不同变化,不得不在不断变化的结果中调试,使我们非常疲惫。


Docker的错误率

这个问题相对来说还比较好解决,但是意味着每次的更新要经过多次验证,并且你需要一直开发直到这个更新的版本被发布到了系统大部分环境中。我们几个月前使用v0.7.4,现在我们的系统更新到v1.2.0.在这个领域我们已经有了一个很大的进步。

有限的工具和库

虽然Docker 有一个四个月前发布的稳定版本,围绕它的一些工具仍然不稳定。采用Docker生态圈中的大部分工具意味着需要投入更多的精力。为了使用最新的功能、修复bug,你团队中需要有人熬夜加班对这些功能,频繁的进行一些修改.也就是说,我们很高兴有一些Docker 周边的工具在开发,而且很期待能够有一个工具在其中脱颖而出。我们对etcd,fleet, kubernetes比较看好。

战胜困难

接下来根据我们的经验,更深入的讲我们讲我们遇到的问题和我们的解决方法。问题列表主要来自我们Ironworker的首席开发兼工程运营总监Roman Kononov和一直在调试和规范化我们Docker操作的Sam Ward。


Debug时的一个异常

说明一下,当我们遇到和Docker相关或者其它系统相关的问题,我们可以自动的重新执行任务,对用户没有任何影响(重试是平台的内置功能)。

删除操作时间长

起初删除容器时间长,需要太多的磁盘I/O操作。这导致我们的系统速度明显变慢,形成了瓶颈。我们不得不增加可用的内核数目,而这个数量远远超出我们所需的。


快速删除Docker容器的解决方案

通过研究使用devicemapper(一个Docker的文件系统驱动),我们发现设置一个选项有作用`--storage-optdm.blkdiscard=false`,这个选项告诉Docker 删除容器时跳过花费时间长的磁盘操作,大大加速了容器的关闭过程。当修改好删除脚本后,这个问题就没了。


卷无法卸载

由于Docker没有可靠地卸载卷,容器不能正确地停止。这导致容器永远在运行,即使已经完成了任务。解决办法就是显示地调用用户自己写得一些列脚本来卸载卷,删除文件夹。幸运的时,这个问题是之前我们使用Docker v0.7.6版本时遇到的,当Docker v0.9.0解决这个问题后我们就删除了那些冗长的脚本。

内存限制开关

Docker其中的一个发布的版本中突然新增了内存限制选项,删除了LXC中的选项。其结果是一些工作进程到达内存界限,然后了整体不响应。这弄得我们措手不及,因为即使使用了它不支持的设置,Docker也没有出错。解决方法很简单,即在Docker内部设置内存限制,但是这种变化让我们措手不及

未来计划

正如你所看到的,我们对Docker投入非常的多,我们在接下得每天会继续投入。除了用它来隔离用户在IronWorker中运行的代码,我们也准备在其他的一些领域使用它。 

这些领域包括:

IronWorker 后台

除了使用Docker作为任务的容器,我们也在使用它来管理每个服务器上运行的用来管理和启动任务的进称。每一进程着的主要任务是从队列中拿一个任务,把它放到合适的Docker容器中,运行,监测,运行完后删除环境。有趣的是同一台机器上我们有容器化的代码来管理其它容器。把我们所有的基础设施环境放到Docker的容器中让我们在CoreOS上的运行相当容易。

IronWorker, IronMQ,以及 IronCache APIs

我们和其他的ops团队一样,没有人喜欢部署。能够把我们的所有的服务打包Docker容器中,然后简单、确定地部署,我们非常地激动。不用再配置服务器。我们需要的就只是能够运行Dokcer容器的服务器。我们正在替换我们的服务器搭建,使用Docker容器在服务器上为我们发布的产品搭建环境。变得的灵活、简单,有更可靠的协议栈。

生成和加载程序

我们也在用Docker容器在IronWorker中生成和加载程序。一个显著的进步是为用户改进了,大规模、特定任务负载和工作流的创建、上传、运行任务的过程。还有一个好处是用户可以在本地测试程序,而测试环境和我们的生产服务一致。

企业内部部署版

使用Docker作为主要分发方法,IronMQ企业内部部署版简化了我们的分发工作,并且提供了一个简单通用的在几乎任何云环境中都能部署的方法。就像我们在共有云上运行的服务,客户需要的就是可以运行Docker容器的服务器,同时他们可以相对容易的获得在测试或生产环境中运行的多台服务器的云服务。

原文链接:Docker in Production — What We’ve Learned Launching Over 300 Million Containers(编译/王晓冉 审校/周小璐)

如需要了解更多Docker相关的资讯或是技术文档可访问Docker技术社区;如有更多的疑问请在Dcoker技术论坛提出,我们会邀请专家回答。购票等问题可咨询QQ群:303806405。



Container技术日报公众账号已开启,欢迎关注!

6
1
推荐阅读相关主题:云操作系统基础架构开发人员文件系统版本控制操作系统
子江20小时前 牛,希望明年这个时候目前的应用开发部署方式有大的转变,切换到docker环境,从此轻松应对高并发高可靠 :) 回复


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
    11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 模块化区块链生态系统的优势概述及其应用案例
    本文介绍了相较于单体区块链,模块化区块链生态系统的优势,并以Celestia、Dymension和Fuel等模块化区块链项目为例,探讨了它们解决可扩展性和部署问题的方案。模块化区块链架构提高了区块链的可扩展性和吞吐量,并提供了跨链互操作性和主权可扩展性。开发人员可以根据需要选择执行环境,并获得奖学金支持。该文对模块化区块链的应用案例进行了介绍,展示了其在区块链领域的潜力和前景。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • x86 linux的进程调度,x86体系结构下Linux2.6.26的进程调度和切换
    进程调度相关数据结构task_structtask_struct是进程在内核中对应的数据结构,它标识了进程的状态等各项信息。其中有一项thread_struct结构的 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
author-avatar
qiuqiu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有