阅读更多

0顶
0踩

行业应用
本文讨论了单个容器所无法解决的问题和局限性,并介绍了容器编排的必要性和复杂性及常用工具的比较,提到了诸如Kubernetes、Mesos等容器管理工具。

就像之前已被证实的那样,要在一个机器上创建成千上万个容器还是相对容易的。但如何去部署这么多的容器呢?如何管理且追踪它们?如何管理、如何来处理故障恢复?这些事情看似容易,但解决起来困难重重。让我们来解析一下究竟难在何处。

用一个简单的命令,就可以设立Docker环境,来跑一个Docker直到你将停其掉为止。但如果你需要在两台机器上跑Docker容器呢?如果50台呢?或者如果1万台呢?现在,你可能会问为何要这么做。这里有一些好的理由:

1.为了服务更多的用户,你可能会遇到你Nginx网络服务器纵向扩容的瓶颈,也就是说,在一个云供应商那儿使用一个更大的实例类型或者在你的披萨盒子里塞下更多的内存。如果你已经碰到那堵墙,你就会需要这么一个选项,可以横向的扩容,典型性的就是采用代理服务器/冗余控制来作为服务稳定的切入口。

2.另一个方面是容错。如果你可爱的Redis容器停止存在了,该怎么办?有可能是底下的机器死了?你会想要做故障转移。在容器工作的情景下,这意味着你的编排器得在另一个健康的机器中重新启动你需要运行的容器。

所以,这都取决于你的目标动机——容量、容错或者两者皆有——如果你有10个或者1千个机器,那挑战就存在着:如何在这些不同的机器间有效率且有效果地进行容器扩容。
然而,在我们跨入这些挑战之前,让我们来理清一些术语。来自微软和谷歌关于集群的研究表明了如下的工作量的区分:

1.有一些长期在跑的服务,那应该一直在跑。那些通常是做交互、对延迟敏感的例如面向终端用户的网络应用这样的任务;或者是底层的服务,类似于Cassandra、ArangoDB、HDFS或者 Quobyte。

2.然后,就有一些批量任务,延续时间从几秒到很多小时。他们通常对表现波动没有那么敏感,然而可能存在例如像独立管理等完成时间上的总体服务水平协议(SLA)。
除了以上这些工作任务的类别区分,还想要支持工作优先度划分:比如对业务尤为关键的、对顶层收入产生直接影响的生产性工作,以及非生产性工作比如质量测试、测试和研发这类。

从一个到两个

把术语理清之后,让我们直接来面对在超过一台服务器上跑容器需要克服的挑战。

最为基本的问题是:在一台服务器上能装下多少容器?我们发现,在裸机上不同负载的测试表明每个机器容纳250个容器是可能的,这是Docker Daemon的潜在极限。对一个平均跑20个Docker镜像的简单的微服务构架的应用而言,产生大约10倍的容量(scale factor)。显而易见,当你在一个机器上跑超过一个应用,这将会非常容易的降低到2倍。另外,资源消耗会产生一个自然的极限:比如,假设一个单独的容器可能消耗内存的为100MB,对于一个32GB的内存(除去操作系统需要的2GB),那就留给我们3万MB或者相当于300个容器。这比我们之前讨论的极限要高的多。因此,即便在中等的负荷下,扩容显得不可避免。

一旦当你跑了两台机器来服务你的容器,你需要关注以下事项:

1.任何一个容器的健康情况是怎样的?它是否还在运行、在服务,而且如果是这样的话,它的核心健康数据(监控)是怎样的?

2.我到哪里能找到特定的那个容器?也就是说,在容器的逻辑ID和具体的(路由)IP之间能有一个匹配:端口匹配必须建立和保持,这也被称为服务发现。

3.应用版本和更新。不管何时当应用的一个新版本被部署时,Docker镜像需要被传递到服务器上(即镜像的实时性和信任)。

上述罗列的这些功能要求是在编排系统核心任务之外的,也就是如何来编排容器(或者,换句话说,来决定在哪台机器上来跑容器)。尽管这个描述,是一个真实情况的简略版,但它能帮助我们理解在多台机器上跑容器的基本挑战。对于两台机器来说,任何包括Docker Swarm、Kubernetes和Mesos的解决方案都适合;有了后两个,尽管是可取的,但似乎也大材小用。直到你的应用被使用的非常厉害,而且当你添加到第三台、第二十台或者第487台机器为止。那么,然后呢?

从两个到多个

今年早些时候,谷歌发布了他们主要的生产集群管理的细节,Borg。

谷歌在10万台机器的区间内,他们中位数集群尺寸大约在1万台机器,也有一些更大的。谷歌称,一个单独的BorgMaster(其专有的分配集群的首脑)在一个cell(谷歌对于集群的术语)内能管理成千上万台机器。一个忙碌的BorgMaster使用10至14个CPU内核以及高至50GB的内存。另外,几个cell有任务到达率在每分钟1万个任务以上。尽管不是每个人都是谷歌或者Twitter,在这个事情上,对于企业级别的需要应对成千上万用户或者一个流行的移动端应用即需要面对百万数量级潜在的多进程用户而言的复杂应用,还是非常容易会到达成百上千个机器的范畴。

在一个分布式系统内,去追踪成千上万件事情(进程、连接等)以及它们的状态是一件很难的事情。真相的来源是什么呢?你是从中心的位置每隔一段时间去检查一下吗?你去跑代理来推送状态到上游吗?这些都是一些已经被讨论了一阵的相关问题,比如从1990年代晚期以C10K问题的形式。

另外,跑成千上万个容器(我们已经从上面描述知道了这需要成百上千的服务器)会给你一个分布式的系统,存在许多复杂的失败模式:从超时引起的问题,到网络划分的问题,到CPU垃圾清理的问题或者是内存耗尽问题。最后的但不仅仅限于此的问题是,为了有效利用服务器,容器需要被以最有效的方式bin-packed;有一件特别难的事,尤其当要考虑到做两种类型的任务(长时期跑的和批量的)和任务优先级划分。你当然不想因为一个以周为单位的Spark批量任务以为它需要你集群中的一大块儿,然后把你企业的应用给耗尽从而丧失每小时10万美金的利润。

总结一下,在集群层面上以最优方式来安排容器意味着要这么做:

• 如果发生故障,你的服务要能继续跑。
• 你的最大化利用要很严格、很动态。

另外,故障处理,意味着确保发生故障后能重新安排,要潜在地把其他工作事先清空也是很难且动态的。我说“很难”和“动态”的意思是,这些需要很多计划安排,而且我们在讨论的是一个迅速且一直在变化的环境,这本身是计算机相对于人类而言擅长之初的完美例子。

现在,既然我们已经探索过了存在问题的空间,让我们再来看一下解决办法的空间。

Mesos满足了以上列表的要求,很成熟,而且得益于它的两层安排体系,也使得它极度灵活。和“一种尺寸适应所有情况”的单一安排体系不同的是,Mesos把实际工作分配决定委派给所谓专门的框架安排体系,而它自己则通过应用“专用资源公平算法”(Domain Resource Fairness algorithm,简称DRF算法)来关注资源抽象和管理。DRF算法本质上让不同的工作得以公平地分享不同类型的资源(CPU、RAM等等)。

或许,对这个讨论更为重要的是,Mesos可以线性扩容。早在2010年,在Mesos原始的技术报告中(精确的说,在6.5部分),在AWS上的一个有99个EC2实例的集群进行了一个实验,每个集群都有八个CPU内核和6GB的内存。在集群上跑有5万个slave daemons,结果是一个线性的向上的增加(总在1秒以内),说明在主从daemon之间存在线性扩容的关系。

线性扩容是Mesos一个非常关键的特征,用来跑容器化的工作负载,不管是在某一个云环境中还是在一个混合的云设置中(比如:混合了在终端的云或者不同云提供商之间的云)。迄今为止,Mesos在这方面是唯一一个被证明有追踪记录的开源的社区项目(Twitter、Airbnb、Apple和50多个公司),我们未来也看看它会朝何处发展。

从谷歌10多年前在跑容器扩容方面学到的经验(不管是Kubernetes中的pod概念还是基于谷歌Omega的优化方案),都已经引入了Mesos核心。从另外一方面来说,人们可以得益于使用Data Center Operating System,是Apache Mesos的商业版本,和Kubernetes和Swarm包一起使用。

原文链接:What Makes Containers At Scale So Difficult
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • EXT中 快捷键

    EXT中也有支持快捷键,比如回车,ESC等,你可以通过按钮绑定,也可以直接运用在某个组件上,比如Ext.window你可以触发ESC键关闭,这些键都存在对象Ext.EventObject中,对应的键如下: BACKSPACE : Number ...

  • EXT中也有支持快捷键

    EXT中也有支持快捷键,比如回车,ESC等,你可以通过按钮绑定,也可以直接运用在某个组件上,比如Ext.window你可以触发ESC键关闭,这些键都存在对象Ext.EventObject中,对应的键如下: BACKSPACE : Number   ...

  • extjs中的一些快捷键的使用

    [color=blue]EXT中也有支持快捷键,比如回车,ESC等,你可以通过按钮绑定,也可以直接运用在某个组件上,比如Ext.window你可以触发ESC键关闭,这些键都存在对象Ext.EventObject中,对应的键如下: BACKSPACE : ...

  • EXTJS 快捷键

    EXT中也有支持快捷键,比如回车,ESC等,你可以通过按钮绑定,也可以直接运用在某个组件上,比如Ext.window你可以触发ESC键关闭,这些键都存在对象Ext.EventObject中,对应的键如下: BACKSPACE : Number CONTROL :...

  • Ext键盘处理

    为什么80%的码农都做不了架构师?>>> ...

  • Vim小技巧及快捷键大全【持续更新】

    2021年08月20日15:27:18 : 更新vim分屏快捷键以及NERDTree快捷键; 2021年09月18日09:53:28: 更新插件快捷键; 通用技巧 普通模式快捷键/操作符(直接使用, 无需使用:) # :h operator 来查阅完整的列表 >G ...

  • Ext事件机制学习

    Ext事件机制ext事件 分 元素事件 和 组件事件两个部分。元素事件是在浏览器事件的基础上宽展而来,组件事件采用观察模式实现。

  • Eclipse--下载/设置/使用/快捷键

    快捷键 配色 自动补全 添加文件或库到工程 查看rt.jar源码 其他 下载 下载地址:https://www.eclipse.org/downloads/packages/ Eclipse IDE for Enterprise Java Developers=> Windows 64bit=> Select ...

  • android开发中遇到的问题汇总

    android开发中遇到的问题汇总(五),android汇总 127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框 http://dwtedx.com/itshare_297.html 128. Android TextView drawableLeft 在代码中实现 方法1 Drawable ...

  • vscode 插件 codegeex 自动代码生成器

    提示模式(实验功能): 选择需要作为输入的代码,按Alt/Option+t触发提示模式,会显示预定义模板列表,选择其中一个模板,即可将代码插入到模板中进行生成。 这个模式高度自定义,可以在设置中 Prompt Templates...

  • EXTJS中form添加按钮触发事件

    EXT中也有支持快捷键,比如回车,ESC等,你可以通过按钮绑定,也可以直接运用在某个组件上,比如Ext.window你可以触发ESC键关闭,这些键都存在对象Ext.EventObject中,对应的键如下:BACKSPACE : Number CONTROL : ...

  • 统信系统UOS桌面版V20 用户手册

    关闭时,全部不能同步。 2.4 显示设置 设置显示器的分辨率、亮度、屏幕方向以及缩放倍数,让您的电脑显示到达最佳状态。 2.4.1 单屏设置 更改分辨率 1.在控制中心首页,点击 。 2.点击 分辨率,进入分辨率设置界面。...

  • Web-拾贝

    在 IE 中,getElementsByName()、document.all[name] 均不能用來取得 div 元素(是否還有其它不能取的元素還不知道)。 來源: webjx.com 整理 (責任編輯:webjx)  1. document.form.item 问题 (1)现有问题: 现有...

  • linux基础知识大纲

    只是基本的操作系统管理功能,不能直接当操作系统使用,还必须有 Shell 和各类系统软件和应用软件 了解 Linux 操作系统的特点,优缺点以及 Linux 操作系统的发行版本 Linux 特点 : 免费,良好的移植性( c 语言写成...

  • ie和火狐对于extjs监听按键的兼容性问题

    :在Maxthon浏览器中,onkeydown和onkeyup有连续响应两次键盘事件的BUG,onkeydown不能正常地对F1~F12的功能键进行正常的截获(onkeyup没有发现该问题),具体原因不明。不知道以后是否会进行订正。 键盘事件包括...

  • ExtJS 4 官方指南翻译:键盘导航 Keyboard Navigation

    原文:http://docs.sencha.com/ext-js/4-0/#!/guide/keyboard_nav 翻译:frank/sp42 转载请保留本页信息...二、某些用户用不了鼠标,这是可用性方面的问题(accessibility)。 Navigating with your keyboard is of

  • 记录的Android开发过程中遇到的问题。

    180508 更新 网上下载demo 本地studio版本和demo版本不一致处理方式 修改两处 1 项目的build.gradle 里面classpath2修改项目目录下 gradle-->wrapper-->gradle-wrapper.properties文件的...

  • android开发过程中遇到的问题

    记录android开发过程中遇到的问题。 1.在一个xml中能否使用同一个include多次 http://www.apkbus.com/android-104152-1-1.html android中include标签的使用 ... android bu

  • javascript 键盘事件总结

    在form中, submit的快捷键是 enter,reset的快捷键是 esc。不过在IE6,safari4,ff3.5,opera10,chrome中,按Enter,不但激发form的submit事件,同时也会激发提交按钮的onclick,激发顺序为提交按钮的 onclick → ...

  • python入门-30.寻找列表中只出现一次的数字-寻找单身狗.py

    python入门-30.寻找列表中只出现一次的数字——寻找单身狗.py

Global site tag (gtag.js) - Google Analytics