[梁山好汉说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

[梁山好汉说IT] 容器概念在北宋社会的应用的更多相关文章

  1. [梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树

    [梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树 0x00 摘要 记录对概念的理解,用梁山好汉做例子来检验是否理解正确. 0x01 IT概念 1. 事物的信息和信息熵 1.1 事物的 ...

  2. [梁山好汉说IT] 梁山好汉和秒杀系统

    [梁山好汉说IT] 梁山好汉和秒杀系统 0x00 摘要 今天看了一篇好文章,里面一些思路颇值得借鉴.先摘录总结精华.然后看看梁山好汉如何处理秒杀系统(系统隔离/系统搭建/风控过滤/削峰/信号广播... ...

  3. [梁山好汉说IT] 区块链在梁山的应用

    [梁山好汉说IT] 区块链在梁山的应用 0x00 摘要 区块链属于一种去中心分布式数据存储系统,有其擅长的应用场景,也有其缺点. 下面用梁山为例来阐释下区块链部分概念&应用. 0x01 梁山好 ...

  4. [梁山好汉说IT] 梁山好汉和抢劫银行

    [梁山好汉说IT] 梁山好汉和抢劫银行 0x00 摘要 今天看了一篇文章<史上最有学问的银行劫匪,教你如何把握人生重大机会>.先摘录精华如下,然后看看梁山好汉在类似情况下如何处理 (东京汴 ...

  5. [梁山好汉说IT] 如何理解脑裂问题

    [梁山好汉说IT] 如何理解脑裂问题 这个系列是通过梁山好汉的例子来阐述一些IT概念. 1. 问题描述 Split-brain, 就是在集群环境中,因为异常情况发生后,产生两个子集群.每个子集群都选出 ...

  6. [梁山好汉说IT] 如何理解一致性Hash

    [梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为 ...

  7. [梁山好汉说IT] 边缘计算在梁山的应用

    [梁山好汉说IT] 边缘计算在梁山的应用 0x00 摘要 梁山泊下四个酒店就是边缘计算在梁山的应用,以朱贵南山酒店为例能看出其"计算实时/省流量/具备智能"等各种优点. 0x01 ...

  8. Docker容器概念讲解

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源. Docker是通过内核虚 ...

  9. docker镜像与容器概念

    本文用图文并茂的方式介绍了容器.镜像的区别和Docker每个命令后面的技术细节,能够很好的帮助读者深入理解Docker. 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(containe ...

随机推荐

  1. 【转载】Combination Sum

    Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique combin ...

  2. C++讲课总结 标签: c++总结 2015-02-28 14:48 671人阅读 评论(25) 收藏

    昨天老师算是给串了一本C++ 的课本,根据自己的理解,赶紧记录一下,也好作为自己学习时候的根据. C++编程简介:每本讲语言的书,第一章总是简介,内容无非是发展历史,语言特色等东西,专业的东西不多,都 ...

  3. Gym - 101480K_K - Kernel Knights (DFS)

    题意:有两队骑士各n人,每位骑士会挑战对方队伍的某一个位骑士. (可能相同) 要求找以一个区间s: 集合S中的骑士不会互相挑战. 每个集合外的骑士必定会被集合S内的某个骑士挑战. 题解:讲真被题目绕懵 ...

  4. 03搭建docker私有仓库

    搭建docker私仓,可以使用docker官方提供的registry镜像.该镜像目前有2.0,2.3和2.3.1版本.它只与1.6.0以上版本的docker兼容.搭建私仓的步骤如下: 一:无代理.无认 ...

  5. ural 1519 Formula 1(插头dp)

    1519. Formula 1 @ Timus Online Judge 干了一天啊!!!插头DP入门. 代码如下: #include <cstdio> #include <cstr ...

  6. HDFS 通信接口

  7. JS高级第1天

    阶段目标 主要学习 JS 的面向对象编程思想. 对象 概念 在编程领域,任何 事 和 物都可以概括成对象. 对象概念练习 用编程思想抽象出你心仪对象的属性和方法. 对象由属性和方法组成,属性和方法都可 ...

  8. Core Data 数据出现Fault

    I am mapping Json Data from Server using Restkit and I am Displaying those data by fetching from db. ...

  9. pytorch 优化器调参

    torch.optim 如何使用optimizer 构建 为每个参数单独设置选项 进行单次优化 optimizer.step() optimizer.step(closure) 算法 如何调整学习率 ...

  10. oracle用UNION替换OR (适用于索引列)

    通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你 ...