我們究竟要用Docker做什么

jopen 9年前發布 | 41K 次閱讀 Docker

1.摘要

前一陣微博風風火火的用大規模docker集群扛過了春節峰值。最近跟不少人聊起接下來要做什么,總是有一種能做的很多,但是能做的又很少的感覺。想了一下原因,感覺還是對docker、docker的生態系統、應用和集群沒有劃清楚的界限,docker并不是很多問題的最終解決方案,只是解決方案中的一環而已。

2.容器化與輕量

一談起docker總是會在各種地方看到輕量這個詞,甚至會有一種通過docker啟動一個服務會節省很多資源的錯覺。

但是docker總歸不是一個資源優化技術,所謂“輕”也只是相對于傳統虛擬機而已。

相對于傳統的虛擬技術,docker提供的容器化方案優勢在于:

  1. 虛擬化額外的資源占用更少了
  2. 部署、啟動和銷毀的時間更短了
  3. 部署、啟動和銷毀的工作量更少了
  4. </ol>

    但相對于不使用容器化方案來說:

    1. 占用的資源更多了(可以忽略)
    2. 啟動、銷毀的時間增加了(可以忽略)
    3. 部署的時間和工作量變少了
    4. </ol>

      也就是說,相對于不使用容器化的方案,docker在效率方面主要的貢獻是可以在不增加性能消耗的情況下,降低部署服務的工作量,提高部署效率。

      3.虛擬化與隔離

      這里先拋掉神乎其神的docker,考慮一下傳統的虛擬化技術。傳統的虛擬化技術在犧牲了性能之后換來了什么?最大收益大概是更好的隔離性。

      隔離了什么?用到最多的有四類:

      • cpu:不同虛擬機的計算資源不混用
      • 內存:不同虛擬機的內存不共享
      • 網絡:每個虛擬機有自己的網絡棧
      • 文件系統:每個虛擬機獨享自己的文件系統
      • </ul>

        傳統的虛擬化消耗了一些系統資源,換來了對cpu、內存、網絡和文件系統的隔離。換句話說,一個服務不會影響另一個服務的資源。

        于是自然的會想到,一個服務的依賴可以做成一套隨著服務一起發布的文件系統,用時加載、停時棄置;也可以把需要不同資源的服務可以部署在一起以節約成本,等等,隔離給了虛擬化真正的價值。

        4.微服務與彈性調度

        接下來的問題是,怎么更大限度的提高資源的利用率。

        又是顯而易見的,要提高資源利用率,就得降低資源的浪費,而浪費來源于兩方面:服務自身和依賴環境對資源的浪費、服務沒有利用到的空閑資源。

        一般來說,一個服務內聚越高,對資源的浪費就越少(全人類腦后插管連到母體大概是最省資源的吧……),但現實情況下資源被拆分成一臺臺計算機,服務也要跟著拆分。當服務的拆分不能保證和資源拆分相同的粒度時,空閑資源就產生了。

        服務拆分的粒度越粗,與資源不匹配的矛盾會越激烈;拆分粒度越細,帶來的資源浪費也就越多。另一方面,服務內聚提高會帶來更高的更高的耦合度和風險,反之會帶來更高的部署和維護成本,等等。

        所以服務拆到多細這件事本身沒有定論,docker能做到的只是降低其中一兩個砝碼的權重而已。

        5.集群管理與服務發現

        在一個資源上啟動了服務之后,接下來的問題是:啟動了這個服務有什么用?因為在啟動服務之后,服務只是“可用”的,并沒有提高資源的利用率。

        于是需要有一種機制,讓可用的服務變成被使用的服務,有很多方法可以實現,比如通過配置文件指定訪問的ip和端口,大部分場景下,手工配置的方式已經足夠了。

        但是伴隨著系統越來越復雜,配置也越來越復雜,漸漸的手工配置已經有些吃力了。

        而伴隨著虛擬化和容器化,配置的修改也越來越頻繁和復雜,甚至已經超過了啟動服務本身的難度。單純啟動一個服務沒有意義,需要通過一個足夠可靠和高效的機制把“可用”的服務變成“被用”的服務,服務發現擔當了這個任務。

        6.docker與生態系統

        那么,總結一下docker本身帶來了什么:

        • 更高效的服務部署、啟動方式。
        • 對cpu、內存、網絡和文件系統的簡單隔離。
        • </ul>

          由于docker本身帶來了這兩點好處,通過docker和相關的生態系統,可以更簡單的實現:

          • 系統監控和管理對象由“機器”改為抽象的“資源”
          • 基于對資源的抽象,提供更靈活的服務部署、調度機制
          • </ul>

            而docker能做也僅僅是調整天平中眾多砝碼中的幾個而已。更高效的集群管理、更高的資源利用率是目的,docker的生態系統、服務發現和微服務等都是手段,與其糾結于我們要用docker做什么,不如拆分成兩個問題:我們要做什么,docker能幫我們做什么。

            來自:http://blog.2baxb.me/archives/1136

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!