专栏首页罗西的思考[梁山好汉说IT] 用实例来深入理解容器概念

[梁山好汉说IT] 用实例来深入理解容器概念

[梁山好汉说IT] 用实例来深入理解容器概念

0x00 摘要

如何对没有软件开发经验的人解释容器?

集装箱真的能够完美解释容器嘛?

除了集装箱还有其他常见实体能够解释容器嘛?

我找到了一个能够 和集装箱搭配起来 解释容器的例子:军队,或者更准确的是说北宋军队制度。

摘要对比如下:

项目

容器

宋军

总体需求

应用的扩展问题/迁移性问题/批量快速部署

召之即来/来之能战/战之能胜/胜了就老实点别造反

基本功能

完成进程基本业务功能

统兵权

封装

编程/打包成容器镜像

握兵权+装备

资源控制

C groups

调兵权

环境隔离

Name space

军队番号

扩展迁移

无状态/容易迁移

更换法(将不识兵 兵不认将)

标准化

各种容器标准

基础建制/武经总要

0x00 背景

前几天,运营的兄弟问我:什么是容器。我用集装箱例子讲了下结果他似懂非懂。于是这给我带来了几个新问题:

  • 如何对没有软件开发经验的人解释容器?
  • 集装箱真的能够完美解释容器嘛?
  • 除了集装箱还有其他常见实体能够解释容器嘛?

经过一番思考,我找到了一个能够 和集装箱搭配起来解释容器 的例子:军队,或者更准确的是说北宋军队制度。下面就让我试着阐述下。

0x01 IT相关概念

1. 容器的本质

1.1 从广泛的角度看

容器(或者类似概念)的本质:是用来对某些实体(物理或者虚拟实体,比如进程)进行有效控制的一系列手段/思路/标准/方法论。控制范围包括但是不限于容易扩展/容易迁移/资源限制/信息限制/风险把控等。

1.2 从IT从业者角度来看

容器本质:容器是一个进程,进程与进程之间互相隔离造就了容器与容器互不影响得特性。在启动一个容器(即创建一个进程时),

  • 通过Namespace技术实现容器的环境隔离。
  • 通过Cgroups来实现容器的资源控制。
  • 通过rootfs来完成文件系统隔离,通过只打包必要信息实现了轻量级。

2. 容器特点/技术(IT行业)

2.1 需求

云计算解决了基础设施计算,网络,存储这几个方面的弹性问题,但是遗留了几个问题:

  • 应用的扩展问题
  • 迁移性问题
  • 批量快速部署问题

2.2 借鉴

容器借鉴了运输业的集装箱概念。集装箱的特点:

  1. 封装
  2. 标准

容器的思想就是要变成软件交付的集装箱。

  • 更好的迁移,省去了中间来回搬货卸货,
  • 进行隔离,不同物品之间分隔开互相不影响。

即容器就是封装应用和应用的运行环境(应用运行所需要的依赖关系),也就是将任何应用以及其依赖打包成一个轻量级可移植自包含的容器。

2.3 特点/技术

因为封装,所以采用了两大技术,

  • Namespace,在不同Namespace中的应用可以有独立的网络资源、用户空间、进程号等;
  • Cgroups,可以把cpu、内存等资源进行隔离让容器使用,可以实现对容器资源的限制,限制容器能够使用的cpu和内存资源,避免单个容器出错,耗尽所有系统资源。

因为轻量级,所以打包时候,弃用了一些冗余信息。比如弃用OS/应用运行产生的本地数据。这样也顺便产生了容器另外一个特点:无状态。

0x02 容器思想在北宋社会的应用---北宋的军队制度。

因为赵匡胤作为编剧/配角/男主等亲身参与了两次军队夺权(郭威夺后汉,陈桥兵变),他深深知道"兴亡以兵",所以北宋皇帝对于军队的需求就是 "召之即来/来之能战/战之能胜/胜了就老实点别捣乱造反"。从而赵官家们对于军队进行了最大化的控制。实现了"环境隔离/资源控制/无状态/标准化"等等和容器对应的特性。

下面让我们对比印证看看。

1. 需求

  • 容器:应用的扩展问题/迁移性问题/批量快速部署问题。
  • 宋军:召之即来/来之能战/战之能胜/胜了就老实点别捣乱造反。

"召之即来/来之能战"就是"扩展/迁移性",即遇到战斗先上一个建制(1千人),不行再上几个建制..... 这就做到了水平扩展。 "战之能胜"是一个正常的业务需求,对应的就是"进程的业务功能"。 "胜了就老实呆着别捣乱造反" 这个算是系统需求,对应的就是"进程完成工作之后继续安静等待下一次业务请求"。

2. 被控制的实体

  • 容器控制的实体是进程。
  • 北宋军队制度控制的实体是宋军。

进程能够完成被期望的业务,但如果控制不好容易对系统造成伤害,比如把系统搞挂了。 军队的工作是战斗,但如果控制不好就会 "武而优则仕","兵强马壮得天下",也会给系统(北宋朝廷)造成伤害。

3. 容器完成控制所采取的手段/思路/标准/方法论

容器:为了实现封装采用了环境隔离/资源控制。比如

  • 通过Namespace技术实现容器的环境隔离
  • 通过Cgroups来实现容器的资源控制
  • 通过rootfs来完成文件系统隔离,通过只包必要信息实现了轻量级。

4. 北宋完成控制所采取的手段/思路/标准/方法论

4.1 分兵权为握兵权、调兵权和统兵权 ----> "环境隔离/资源控制"

握兵权属于军队的长官,即三衙平时负责军队的训练; 枢密院掌调兵权,国家要用兵时,能够调动部队是枢密院,如果没有枢密院的虎符,军队的长官是调不动一兵一卒的。 领兵出征的将帅是临时委派的,即统兵权非长任。

  • 握兵权可以理解为 "编程/打包成容器镜像",也完成了部分"环境隔离"。
  • 调兵权可以理解为 "通过Cgroups来实现容器的资源控制"。
  • 统兵权可以理解为 "运行进程完成业务功能"。

给将帅多少兵就是给你多少资源,由枢密院严格控制。这些从水浒传就能看出。

对于关胜,就是枢密院调拨其他地区兵源.

"太师见说大喜,与宣赞道:“此乃围魏救赵之计,正合吾心。”随即唤枢密院官,调拨山东、河北精锐军兵一万五千,教郝思文为先锋,宣赞为合后,关胜为领兵指挥使,步军太尉段常接应粮草。

对于呼延灼,国防部长高太尉倒是允许调用本部军马,但是人家通过物资一样可以控制你。所以呼延灼只能再提出物资需求.

"呼延灼禀道:“此三路马步军兵,都是训练精熟之士,人强马壮,不必殿帅忧虑。但恐衣甲未全,只怕误了日期,取罪不便,乞恩相宽限。”高太尉道:“既是如此说时,你三人可就京师甲仗库内,不拘数目,任意选拣衣甲盔刀,关领前去。务要军马整齐,好与对敌。出师之日,我自差官来点视。”呼延灼领了钧旨,带人往甲仗库关支。呼延灼选讫铁甲三千副,熟皮马甲五千副,铜铁头盔三千顶,长枪二千根,滚刀一千把,弓箭不计其数,火炮铁炮五百余架,都装载上车。临辞之日,高太尉又拨与战马三千匹"。

4.2 Namespace

这个在北宋没有找到严格对应的概念。但是历朝历代中军队中都是有番号的,比如"太平军/天平军/控鹤军/银枪效节都/厅子都",这个番号大致可以算成是Namespace。

Namespace在现代IT是用来保证安全的概念,但是在宋朝这个番号也是有风险的,即"太平军"可以有,"岳家军"就不能有......

4.3 实行"更换法",经常调换军队长官 ----> "无状态/容易迁移"

用"更换法"完成了军队"无状态/容易迁移" 这个特点。话说"无状态"就是"将不识兵 兵不认将"

为了防止军队形成”亲党胶固“,赵匡胤还来了两招更狠的。

  • 首先,经常更换军队的主官,每几年一换这样这些将军们就不可能在军队中有太多的亲信,"兵无常帅,帅无常师"。
  • 其次,则是经常性的更换军队的驻地,这样做有两个好处,士兵们经常换地方,就会形成习惯,不会恋家。第二个好处则是可以一定程度上训练士兵,特别是没有战事的时候,换一次驻地就相当于一次战争模拟,可以让士兵均劳逸、知艰难、认战斗、习山川。

4.4 标准化 ----> 易于管理

为了更好控制,也为了统兵将帅方便进行战斗部署,宋军也进行了标准化。包括基础建制上的和业务素质上的。

  • 基础建制上:"马步军,诸指挥各有指挥使、副指挥使,每都有军使(500骑)、副兵马使(250骑)、都头(200兵500人)、副都头、厢军头(100骑)、十将、将虞候(步)、承局(骑)、押官(充军者),置都监监押以领之,岁时简练焉"。
  • 业务素质上: 织编纂出中国第一部新型兵书《武经总要》。该书包括军事理论与军事技术两大部分。

0x03 结论

北宋赵官家们面对军队的处境和我们当前面对大批量计算/应用的处境很类似。他们用各种套路和手段完成了对军队的控制。

具体北宋军制的效果如何?

  • "容易扩展/容易迁移性/容易批量快速部署/无状态/标准化..." 这些特点在现代工业体系/计算机理论下是可以做到的,因为数值化/机械化的东西是可以精细控制。
  • "召之即来/来之能战/战之能胜/胜了就老实点别捣乱造反/风险控制..." 这些特点对于北宋是高难度挑战,因为军队是由一个个人构成的,除非能够思想控制能够下到最基层建制,否则无法做到。赵官家们对军队的控制做到了外在的"形",但是没有内在的"神"。

看来赵官家们有艺术家才能,也有现代工程师的素质,可惜早生了许多年。

0x04 参考

https://www.zhihu.com/question/24725639

http://www.sohu.com/a/235829001_100008688

http://www.sohu.com/a/226022265_100057812

https://blog.csdn.net/gui951753/article/details/81504318

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [业界方案] 智能运维AIOps-学习笔记

    目的是对于所学习的技术,大致知道其应用领域,技术特点和未来方向,看看目前工作中是否可以用到,或者以后选型时能够做到心里有数,顺便也可以梳理清楚自己的知识体系。

    罗西的思考
  • [源码解析]Oozie来龙去脉之内部执行

    Oozie由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是用于Hadoop平台的开源的工作流调度引擎,用来管理Hadoop作业,进行。本文...

    罗西的思考
  • [白话解析] 深入浅出边缘计算

    边缘计算是大家经常听说的概念,但是因为没有具体接触到实际应用所以很多朋友还是比较迷惑。本文将通过具体应用场景来帮助大家理解这个概念。具体场景是什么呢?从我们的名...

    罗西的思考
  • 克服容器采用的4个常见误区

    容器是当今企业数字化转型的重点,但是尽管很多公司的高管清晰地认识到容器能够带来的巨大的好处,但是一些常见的误区阻碍了企业容器的采用。 我们已经看到,容器在Net...

    SDNLAB
  • 容器技术及其应用白皮书(下)-- 容器应用

    shaonbean
  • 容器与DevOps 被称为天作之合的7个原因

    作为自动化应用程序部署的一种方式, 容器的流行程度在不同行业的企业环境中不断上升。根据行业研究调查显示, 虽然云原生正在拥抱容器技术,但只有约10%的企业在生产...

    静一
  • 容器进化史

    和虚拟机一样,容器技术也是一种资源隔离的虚拟化技术。我们追溯它的历史,会发现它的技术雏形早已有之。 容器简史 容器概念始于 1979 年提出的 UNIX chr...

    CloudDeveloper
  • 支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)

    宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理、应用商店、Nginx配置、存储管理、CI/CD、权限管理等,支持...

    宜信技术学院
  • 想要使用容器技术 这5类遗留工具就应该被淘汰

    充分利用容器并不只是安装Dockers和激活容器应用程序那么简单。你需要改进的同样还有监控方法、安全性能等。 这么做的理由是,容器并不只是对你过去工作中使用到的...

    静一
  • 容器采用时最常见的N个挑战该如何克服?

    虽然容器技术势头不减,但仍然没有在企业中被广泛采用。虽然许多DevOps团队正在尝试使用容器并将此技术慢慢引入生产环境中来,但大多数组织机构仍然不知道从哪里开始...

    静一

扫码关注云+社区

领取腾讯云代金券