梁山好漢說IT 用例項來深入理解容器概念

2021-10-06 03:03:28 字數 2837 閱讀 2943

如何對沒有軟體開發經驗的人解釋容器?

貨櫃真的能夠完美解釋容器嘛?

除了貨櫃還有其他常見實體能夠解釋容器嘛?

我找到了乙個能夠和貨櫃搭配起來解釋容器的例子:軍隊,或者更準確的是說北宋軍隊制度。

摘要對比如下:

專案容器

宋軍總體需求

應用的擴充套件問題/遷移性問題/批量快速部署

召之即來/來之能戰/戰之能勝/勝了就老實點別造反

基本功能

完成程序基本業務功能

統兵權封裝

程式設計/打包成容器映象

握兵權+裝備

資源控制

c groups

調兵權環境隔離

name space

軍隊番號

擴充套件遷移

無狀態/容易遷移

更換法(將不識兵 兵不認將)

標準化各種容器標準

基礎建制/武經總要

前幾天,運營的兄弟問我:什麼是容器。我用貨櫃例子講了下結果他似懂非懂。於是這給我帶來了幾個新問題:

經過一番思考,我找到了乙個能夠和貨櫃搭配起來解釋容器的例子:軍隊,或者更準確的是說北宋軍隊制度。下面就讓我試著闡述下。

1.1 從廣泛的角度看

容器(或者類似概念)的本質:是用來對某些實體(物理或者虛擬實體,比如程序)進行有效控制的一系列手段/思路/標準/方**。控制範圍包括但是不限於容易擴充套件/容易遷移/資源限制/資訊限制/風險把控等。

1.2 從it從業者角度來看

容器本質:容器是乙個程序,程序與程序之間互相隔離造就了容器與容器互不影響得特性。在啟動乙個容器(即建立乙個程序時),

2.1 需求

雲計算解決了基礎設施計算,網路,儲存這幾個方面的彈性問題,但是遺留了幾個問題:

2.2 借鑑

封裝標準

容器的思想就是要變成軟體交付的貨櫃。

即容器就是封裝應用和應用的執行環境(應用執行所需要的依賴關係),也就是將任何應用以及其依賴打包成乙個輕量級可移植自包含的容器。

2.3 特點/技術

因為封裝,所以採用了兩大技術,

因為輕量級,所以打包時候,棄用了一些冗餘資訊。比如棄用os/應用執行產生的本地資料。這樣也順便產生了容器另外乙個特點:無狀態。

因為趙匡胤作為編劇/配角/男主等親身參與了兩次軍隊奪權(郭威奪後漢,陳橋兵變),他深深知道"興亡以兵",所以北宋皇帝對於軍隊的需求就是 「召之即來/來之能戰/戰之能勝/勝了就老實點別搗亂造反」。從而趙官家們對於軍隊進行了最大化的控制。實現了"環境隔離/資源控制/無狀態/標準化"等等和容器對應的特性。

下面讓我們對比印證看看。

「召之即來/來之能戰"就是"擴充套件/遷移性」,即遇到戰鬥先上乙個建制(1千人),不行再上幾個建制… 這就做到了水平擴充套件。 「戰之能勝"是乙個正常的業務需求,對應的就是"程序的業務功能」。 「勝了就老實呆著別搗亂造反」 這個算是系統需求,對應的就是"程序完成工作之後繼續安靜等待下一次業務請求"。

程序能夠完成被期望的業務,但如果控制不好容易對系統造成傷害,比如把系統搞掛了。 軍隊的工作是戰鬥,但如果控制不好就會 「武而優則仕」,「兵強馬壯得天下」,也會給系統(北宋朝廷)造成傷害。

容器:為了實現封裝採用了環境隔離/資源控制。比如

4.1 分兵權為握兵權、調兵權和統兵權 ----> 「環境隔離/資源控制」

握兵權屬於軍隊的長官,即三衙平時負責軍隊的訓練; 樞密院掌調兵權,國家要用兵時,能夠調動部隊是樞密院,如果沒有樞密院的虎符,軍隊的長官是調不動一兵一卒的。 領兵出征的將帥是臨時委派的,即統兵權非長任。

給將帥多少兵就是給你多少資源,由樞密院嚴格控制。這些從水滸傳就能看出。

對於關勝,就是樞密院調撥其他地區兵源.

"太師見說大喜,與宣讚道:「此乃圍魏救趙之計,正合吾心。」隨即喚樞密院官,調撥山東、河北精銳軍兵一萬五千,教郝思文為先鋒,宣讚為合後,關勝為領兵指揮使,步軍太尉段常接應糧草。

對於呼延灼,國防部長高太尉倒是允許呼叫本部軍馬,但是人家通過物資一樣可以控制你。所以呼延灼只能再提出物資需求.

「呼延灼稟道:「此三路馬步軍兵,都是訓練精熟之士,人強馬壯,不必殿帥憂慮。但恐衣甲未全,只怕誤了日期,取罪不便,乞恩相寬限。」高太尉道:「既是如此說時,你三人可就京師甲仗庫內,不拘數目,任意選揀衣甲盔刀,關領前去。務要軍馬整齊,好與對敵。出師之日,我自差官來點視。」呼延灼領了鈞旨,帶人往甲仗庫關支。呼延灼選訖鐵甲三千副,熟皮馬甲五千副,銅鐵頭盔三千頂,長槍二千根,滾刀一千把,弓箭不計其數,火炮鐵炮五百餘架,都裝載上車。臨辭之日,高太尉又撥與戰馬三千匹」。

4.2 namespace

這個在北宋沒有找到嚴格對應的概念。但是歷朝歷代中軍隊中都是有番號的,比如"太平軍/天平軍/控鶴軍/銀槍效節都/廳子都",這個番號大致可以算成是namespace。

namespace在現代it是用來保證安全的概念,但是在宋朝這個番號也是有風險的,即"太平軍"可以有,"岳家軍"就不能有…

4.3 實行"更換法",經常調換軍隊長官 ----> 「無狀態/容易遷移」

用"更換法"完成了軍隊"無狀態/容易遷移" 這個特點。話說"無狀態"就是"將不識兵 兵不認將"。

為了防止軍隊形成」親黨膠固「,趙匡胤還來了兩招更狠的。

4.4 標準化 ----> 易於管理

為了更好控制,也為了統兵將帥方便進行戰鬥部署,宋軍也進行了標準化。包括基礎建制上的和業務素質上的。

北宋趙官家們面對軍隊的處境和我們當前面對大批量計算/應用的處境很類似。他們用各種套路和手段完成了對軍隊的控制。

具體北宋軍制的效果如何?

看來趙官家們有藝術家才能,也有現代工程師的素質,可惜早生了許多年。

★關於生活和技術的思考★

深入理解csrf(flask例項)

看了好多csrf的介紹,大概意思是 在a 登入了,儲存了cookie,在此期間訪問了b b站裡面使用可以跨域的標籤比如src,來直接呼叫a站重要介面 例如轉賬 直接完成轉賬 之前一直不理解,為什麼訪問 b的時候 會帶著a的登入資訊 cookie 後來想通了,flask實驗如下 危險 b flask模...

深入理解用mysql fetch

同mysql result 一樣,mysql fetch row 也可以用來獲取查詢結果集,其區別在於函式的返回值不是乙個字串,而是乙個陣列。函式定義如下。複製 如下 array mysql fetch row int result 引數說www.cppcns.com明如下。result 由函式my...

從例項中深入理解fork

原共有17個fork例項,此日誌從中挑選部分例項進行學習,由簡入難 include include include include include include intmain int argc,char ar return0 總覽void fork1 else printf bye from p...