Shopify的Docker實戰經驗(一)用Docker和CoreOS構建內部雲

這是系列文章的第一篇,介紹咱們如何藉助容器讓服務器更易於擴展和管理,從而跟上業務需求的步伐。

git

containers-cropped_(1).jpg



關鍵元素是:
docker

  • Docker:容器技術,使應用更加便攜和易於管理數據庫

  • CoreOS:提供最小化的操做系統,便於流程規劃和Docker容器的運行安全


Shopify是一個大型的Ruby on Rails應用程序,這些年末層作過大規模的擴展。咱們的生產服務器擴容到使用1700個核以及6 TB內存,能支持每秒超過8000次的請求。

Docker備受矚目,由於其可以將應用打包進便攜的容器,從而實現版本控制和快速部署。

容器聽上去很像虛擬機(virtual machine,VM),它有獨立的文件系統、網絡環境等等。可是容器又比虛擬機更加輕量,可以更高效地利用硬件資源。Docker容器不是像VM同樣去模擬物理硬件的行爲,而是容許多個應用程序安全地共享Linux宿主機器,經過:
服務器

  • 內核命名空間使應用間相互隔離網絡

  • cgroups限制資源的上限並實現計費架構

  • 多層文件系統減小容器的大小負載均衡


Docker在開發和維護團隊中迅速走紅,主要是由於:
運維

  • 快速啓動:容器能夠快速啓動和運行,只須要幾秒時間。若是須要,能夠利用容器構建的時間作一些其餘耗時的操做。快速啓動意味着快速部署。spa

  • 超高利用率:容器最大限度地共享宿主機器(好比,單核機器),相比VM能更爲有效地利用硬件資源。這意味着在一樣的硬件配置上能夠運行更多應用。

  • 一致性:容器確保每一個實例啓動時是徹底一致。

  • 開發友好的工做流:容器由純文本的Dockerfile構建,Dockerfile能夠作版本控制從而幫助區分容器版本。另外,開發人員能夠用很熟悉很像git的push/pull操做來發布容器。

  • 運維友好的工做流:容器包含操做系統,所以,若是你須要安裝一個package或者自定義的配置,開發人員就能夠完成這項工做,而不須要推給運維人員。這是工做職責的重要改變:開發人員負責容器,運維人員則能夠關注於提供可靠的硬件和網絡。


最重要的容器特性是能夠實現一機多用。作不一樣工做的容器能夠在相同的硬件系統上和平共處。這使得數據中心真正成爲廣泛意義上的計算資源。好比:

  • 能夠很快很容易地增長應用服務器容器的數量,這意味着咱們隨時能夠應對忽然的流量尖峯。

  • 能夠輕鬆地拿出生產服務器的閒置資源去進行所需資源密集型的操做,好比數據分析。


聽上去不可抗拒吧?咱們也有同感,並且咱們已經準備來分享咱們的經驗,如何將這些願景變爲生產級別的現實。咱們不只僅高談闊論,咱們還會在社區裏分享盡量多的代碼。

這裏有不少內容能夠講,咱們將分期介紹:

  • 容器化:如何以一種能讓自覺得是的開發團隊滿意的方式,將已有應用放到容器裏?

  • 管理訣竅:真實的應用包括不少API祕鑰和數據庫密碼,這些都須要安全得保存(最好是能版本控制,並能在Heartbleed這樣的事件再次發生的時候迅速把它們找出來)。咱們在這裏有不錯的解決方案。

  • 路由:怎樣將容器鏈接到外部世界,並能和生產環境的基礎架構(好比負載均衡器)完美合做?

  • 監控:咱們的容器化架構須要達到或者超越Shopify的99.97%的在線時長。維護系統時須要花費大量的工做在問題變得嚴重以前發現並解決它。在容器化的世界裏解決這個問題須要和純物理機環境不一樣的解決方案。調整已有的監控系統來監控新環境是保證Shopify穩定性的重要環節。

  • 健壯性:優雅且可預見地拋錯很難。咱們在處理內存耗盡(out-of-memory),請求隊列化和signal處理上的經驗能夠供你們參考。

  • 部署:咱們的系統構建在Chef和Ubuntu之上,如今計劃更新爲純物理機上的CoreOS。以後會介紹咱們如何部署節點使其可以運行容器,而且在全是容器的世界裏實現高效監控。


敬請關注從此各個話題上更深刻的探討。

相關文章
相關標籤/搜索