從集裝箱歷史看 DevOps 的發展程式

ThoughtWorks發表於2017-08-07

什麼樣的技術會帶來生產力的極大提升?技術含量是否與生產力提升成正比關係?

帶著問題,我們先看一個例子:在工業革命時期,瓦特用於“改良”蒸汽機的技術,就是極大提升效率的技術。

這裡有一個誤解,有人認為瓦特發明了蒸汽機。其實不然,瓦特只是改良了紐卡門蒸汽機,通過橡膠增加密閉性同時優化機械結構,使得原本只能用於提水的笨重機器,變得能被廣泛應用,為第一次工業革命的興起奠定了重要基礎。

從上面的例子可以看出技術含量的高低與帶來生產力的大小並沒有直接關係。

傳奇的集裝箱

我們來看另外一個有趣的故事,希望你能從中得到啟發。那就是改變運輸業、對製造業有著深遠影響的一項革命性技術——集裝箱(英文container,你沒看錯,它的名字和現在火的一塌糊塗的“容器技術”同名 )。

說到集裝箱不能不提馬爾科姆·麥克萊恩(1915—2001),20世紀四十年代美國一家運輸公司的老闆,由於改造(改造不是發明)了集裝箱、提高了集裝箱的便利性,推動了整個運輸行業的巨大變革,而被尊稱為“集裝箱運輸之父”。

那麼問題來了:改造蒸汽機也許有些技術含量,但是技術含量連罐頭都不如(抽真空和密封技術)的集裝箱怎麼可能有這麼大的影響呢?

(集裝箱之父麥克萊恩:改造不僅限於集裝箱本身,還包括港口和貨輪等運輸環節)

我們知道工業社會最重要的競爭來自於節約成本,如果一個技術可以節省95%的成本就相當於帶來20倍的效率提升。這種技術可以說是顛覆性的,而集裝箱就是這樣的技術。

麥克萊恩在紐約港第一次做的集裝箱運輸實驗就實現了20倍的效率提升:使用集裝箱運輸啤酒,將每噸啤酒的運輸成本從4美金變成20美分。

過程是這樣的:從啤酒工廠把啤酒裝入集裝箱開始,通過陸路轉海路運輸到目的地,省去了工廠到陸路運輸、再到海洋運輸的中間人力搬運過程,因此從工廠到碼頭的裝卸時間大大縮短,由數天壓縮到數小時,從而使得美國到歐洲的貨運時間足足減少了4周。並且由於集裝箱的堆疊使得每一艘船隻的儲運量比以前提高了6倍。

在傳統運輸過程,貨物沒有統一的包裝標準,這既限制了運輸工具的運載量,又增加了貨物在從陸路運輸到海路運輸低效的手工搬運過程。集裝箱這個標準化的運輸單元,就為在整個運輸系統優化中間流轉效率提供了一種可能。

(運輸體系中間環節)

看到這裡,我不由得聯想到傳統軟體研發測試與釋出的過程。雖然每個過程內部自動化程度很高,但是部門之間的流轉卻依靠低效的手工操作,這些過程大大降低了整體效率。

系統性創新的窘境

但是非常意外的是,麥克萊恩在接下來10多年的航運生意中不僅沒賺到錢,反而是虧損了。這就太奇怪了,一個能讓效率提升20倍的技術,為什麼會不賺錢呢?

原因在於,在當時的運輸行業,大部分貨物並沒有使用集裝箱,大量的手工搬運使得船隻裝卸貨物並沒有節省多少時間,還有集裝箱運到目的地後,箱內的貨物需要分別運到不同的地方等等。

因此集裝箱技術並不在於“箱子”本身,而在於需要整個運輸系統的創新——在道路、橋樑、卡車、碼頭和吊裝裝置等基礎設施沒有針對“箱子”進行優化的情況下,集裝箱技術無法發揮出原有的效能。

讓我們回到最開始的問題:“什麼樣的技術會帶來生產力的極大提升呢?”

那些創新了人與事物連線方式,且極大降低這種連線成本的技術,才能真正促進生產力的提升。

DevOps正是這樣的技術,它是針對研發系統的一次系統性創新。其創新性在於針對整個研發系統中的各個子系統進行交付與反饋的優化,從而有效提升整體效率。

相對於傳統軟體6個月釋出一次,2009年John Allspaw 和Paul Hammond在Flickr可以實現每天釋出10次,將軟體釋出頻率提升了將近兩千倍,極大地降低了軟體釋出的成本。

但是大部分公司在實施DevOps的過程中,並沒有有效提升釋出頻率,這一點與集裝箱在最開始的10年內並不賺錢的道理是相似的。

(應用研發平臺:描述構建軟體包,在不同的環境進行測試、最終釋出生產環境的過程)

問題在於系統性創新初期,各個環節沒有對新技術進行優化,部分環節甚至會阻礙新技術發展,導致新技術無法提升效能。

轉機帶來的啟示

一切直到1967年才出現轉機。美國發動了越南戰爭,美軍需要將大量物資運輸到亞洲。在長期的優化實踐中,美軍得出高效運用集裝箱的3C原則:一種貨物、一個地址、一個客戶

從此,集裝箱的時代到來了。只在1967年一年的時間裡,麥克萊恩就從美國國防部賺了4.5億美金。低廉的海運成本、大大縮短的運輸時間以及到貨時間的可預期,讓全球製造業的分工協作效率得到極大的提高。行駛在大洋上的貨輪,就像在生產車間裡運輸原材料的叉車一樣,使得製造業不必大量囤積原材料,後來豐田的“零庫存”計劃更是將原料的管控能力發揮到了極致。

為什麼3C原則可以極大提升效率?它正是通過解決運輸“中間環節”過程的低效問題,使得總體效率得到極大提升。下面分別加以說明:

  • 一種貨物:在貨物“裝箱”過程,統一貨物的來源與種類,標準化貨物裝箱過程。
  • 一個地址:在貨物“分揀”過程中,不會開啟集裝箱,只做一次裝箱。
  • 一個客戶:在貨物“送貨”過程,只有一個客戶,簡化送貨的過程。

DevOps流程的3D原則

與如何高效利用集裝箱類似,在DevOps實施過程中,通過優化流水線中間流轉過程,提升總體效率。

下面舉出與3C原則對應的3D原則:

  • 一鍵式部署(Automatic Deploy):部署過程中,標準化部署過程,實現一鍵式部署
  • 一次構建打包(Automatic Delivery):在測試環境、UAT環境和生產環境的流轉過程中,只打包一次,軟體包按順序自動交付到各個環境,最終釋出到生產環境
  • 一次配置分發(Automatic Distribution):在生產環境釋出過程,建立統一的配置分發管理,將繁瑣的分散式環境配置一次分發到各個資料中心,簡化釋出過程。

“科技是第一生產力!”如果我們以技術含量來衡量一個創新會很容易走入誤區。集裝箱發展歷史告訴我們,從狀態的流轉環節入手,降低流轉成本是提高總體效能的另外一個途徑。

集裝箱發展歷史的前十年完成了道路、橋樑、隧道、卡車、碼頭設施、吊裝裝置的優化,以適應集裝箱的發展。這個程式的難點在於,以一家運輸企業推進整個運輸體系針對集裝箱的優化。

隨著技術的發展,DevOps的周邊環節正在逐步完善,DevOps實施的3D原則,也讓我們走入故事的後半段,就像集裝箱的故事那樣。

相關文章