【知識】Amazon EC2 Container Service (ECS) 容器服務到底是啥?(特點、原理、視頻)

Amazon EC2 Container服務,這是一項高度可擴展的高性能容器管理服務,讓客戶使用AWS上的容器輕鬆地運行和管理分佈式應用。

1.這項服務的特點:

  • 簡化集羣管理:ECS能夠啓動和管理Docker容器的集羣,並且保存集羣的完整信息。

  • 高性能:可以將容器作爲應用構建模塊,在幾秒內啓動、停止和管理成千上萬的容器

  • 靈活調度: ECS包括一個內置的調度器 (使用了什麼技術?) ,將你的容器部署到集羣中,以平衡資源和可用性。由於ECS提供了完整的狀態信息及API接口,你也可以構建自己的調度器或者使用現有的開源調度器。

  • 可擴展及可移植性: 在ECS和內部環境中運行的Docker進程是一樣的,所以可以在AWS和本地部署中方便切換。

  • AWS集成:ECS中的應用同樣可以使用AWS其它服務,比如Elastic IP addresses,resource tags和Virtual Private Cloud (VPC)。實際上,它和EC2、S3一樣,僅是一個新的基礎結構單元。

  • 安全:你的任務運行在VPC中的EC2上,IAM、安全組和其它安全特性都可以使用。容器運行在一個多租戶的環境中,可以通過定義的接口互相通信。

  • 簡單:可以啓動一個支持ECS的AMI,你的實例會被自動加載到默認的集羣中。想爲一個Linux AMI添加ECS功能,只需要安裝ECS Agent和Docker daemon。

  • 開源:ECS Agent會使用Apache協議開源(AWS鮮少有開源項目啊)。你可以將其安裝在任何Linux AMI中,並調用registerContainerInstances接口,添加它們到集羣中。

2.一些名詞解釋:

  • 集羣:一個集羣是一個在AWS特定Region的EC2實例羣,它們被ECS管理。一個集羣中的實例類型和大小各異,並且可以跨區域。

  • 調度器:每個集羣都有一個調度器。調度器會考慮資源分配限制、併發性和高可用性等問題,通過將容器分配給各個實例,從而實現資源的充分利用。

  • Container:一個容器是一個打包(或者說Docker化)的應用組件。每個集羣中的EC2實例中運行一個或多個容器。

  • 作業:JSON文件中將作業定義爲一組容器。

  • 任務:一個任務是一個或多個容器的實例化,定義了其工作內容和相互之間的關係。

  • ECS-Enabled AMI:一個運行了ECS Agent和dockerd的AMI。

3.ECS中運行應用的步驟

(假設你已經將應用Docker化,並有對應的Dockerfile)

  • 創建一個集羣,或使用已有的集羣;

  • 創建你的任務定義,並在集羣註冊;

  • 啓動一些EC2實例,並在集羣上註冊;

  • 啓動這些任務;

  • 監控集羣的資源利用情況和應用的吞吐量,並按需調整。比如,想要擴展集羣資源時,你可以啓動和註冊額外的EC2實例。

4.容器服務背後的技術

  Amazon EC2 Container Service (ECS) 是一個高度可擴展的高性能軟件容器管理服務,它支持 Docker,使用戶可以輕鬆地在 Amazon EC2 實例集羣上運行應用程序。近日,Amazon首席技術官Werner Vogels撰文介紹了Amazon ECS的架構。下圖是Amazon ECS包含的基本組件:

圖2

  Amazon ECS的核心是集羣管理器,這是一個處理集羣協調和狀態管理任務的後臺服務,它的上面是不同的調度器。集羣管理和容器調度相互分離,用戶可以構建自己的調度器。集羣是一個供用戶應用程序使用的計算資源池,而所謂的資源是指由容器劃分的Amazon EC2實例的CPU、內存和網絡資源。Amazon ECS通過運行在每個實例上的Amazon ECS容器代理協調集羣。該代理允許Amazon ECS與EC2實例通信,並在用戶或調度器請求時啓動、停止和監控容器。它是用Go編寫的,在GitHub上遵循Apache許可協議開源。

  爲了協調集羣,需要一個有關集羣狀態的唯一信息源,提供諸如集羣包含的EC2實例、運行在實例上的任務、組成任務的容器以及可用資源或已佔用的資源這樣的信息。這樣,才能成功地啓停容器。爲此,他們將狀態存儲在一個鍵/值存儲中。在任何現代集羣管理中,鍵/值存儲都是一個核心。而且,爲了實現持久性和高可用性,預防網絡分區或硬件故障,該鍵/值存儲需要採用分佈式部署。但這又帶來一個問題,就是數據一致性很難保證,併發修改也很難處理。這就需要有一種併發控制機制來確保多個狀態修改不會衝突。

  爲了實現併發控制,他們在實現Amazon ECS時使用了Amazon的其中一個核心分佈式系統組件:一個基於Paxos算法以事務日誌爲基礎的數據存儲。該組件記錄了每個數據條目的每次修改。每次寫入操作都會作爲日誌中的一個事務提交,並且有一個特定的有順序的ID。數據存儲中的當前值是根據日誌記錄所做的所有事務操作的總和。它允許Amazon ECS採用樂觀併發的方式存儲集羣狀態信息,在一個共享數據不斷變化的環境中,這是非常合適的。

  有了鍵/值存儲,就可以協調集羣了。而爲了使用戶能夠利用Amazon ECS的狀態管理功能,他們通過一組API開放了Amazon ECS集羣管理器。用戶可以通過它們以一種結構化的方式訪問存儲在鍵/值存儲中的所有集羣的狀態信息。這組API成爲用戶在Amazon ECS上構建自己的解決方案的基礎。Vogels舉了兩個例子。

  一個是自創建第一天起就託管在AWS上的免費叫車應用Hailo。在過去的幾年裏,該應用從一個運行在單個AWS區域中的單體應用程序演化成爲一個運行在多個區域中的基於微服務的架構。起初,每個微服務運行在一個實例集羣上。但實例爲靜態分區,導致每個分區的資源利用率都不高。爲此,他們決定基於服務優先級和其它指標在一個彈性資源池上調度容器。他們選擇了Amazon ECS,因爲後者通過API完全暴露了集羣狀態,使他們可以使用滿足特定應用需求的邏輯構建一個自定義的調度器。

  另一個是教育類通訊軟件Remind。它起初是一個運行在Heroku上的大型單體應用。但隨着用戶數的增長,他們希望具備水平擴展的能力。因此,大約在2014年底,其工程團隊開始探索使用容器遷移到微服務架構。他們希望在AWS上構建一個兼容Heroku API的PaaS(平臺即服務)。爲了管理集羣和容器編排,他們首先考察了一些開源解決方案,如CoreOS和Kubernetes。但考慮到團隊規模較小,他們沒有時間管理集羣基礎設施及保持集羣高可用。經過簡單的評估之後,他們決定在Amazon ECS上構建他們的PaaS。這樣,工程團隊就可以專注於應用開發和部署。在6月份的時候,Remind開源了他們的PaaS解決方案“Empire”。在接下來的幾個月中,他們將把核心基礎設施的90%遷移到Empire上。

  總之,Amazon ECS的架構提供了一種高可擴展、高可用、低延遲的容器管理服務。它允許以樂觀併發的方式訪問共享的集羣狀態信息,並通過API賦予用戶創建自定義容器管理解決方案的能力。另外,Vogels還提到,集羣中實例的數量並不會對Amazon ECS的延遲產生明顯的影響。

5.其他信息

(以下內容摘自InfoQ http://www.infoq.com/cn/news/2014/11/re-invent-day-3

  要使用ECS,只需要選擇支持ECS的AMI鏡像安裝到EC2裏,集羣就會自動簽入該實例。通過list-clusters即可查看集羣裏可用的實例,通過run-instances即可啓動,當然在我們給它安排任務之前,它也不會跑什麼任務,需要做一個register-task-definition的動作,將哪個任務對應哪個Docker文件定義出來(定義文件是一個JSON文件),比如定義哪個是RabbitMQ,哪個是Redis,哪個是NodeJS。定義好了之後,用run-task即可讓任務跑起來,比如Paul在demo中先跑了1個RabbitMQ,再跑了5個Redis,再跑了5個NodeJS(這條操作執行的時候ECS也同時啓動了5個Nginx),再跑了30個音頻處理任務,然後又跑了30個音頻處理任務的v2版本,然後用stop-task把在跑的v1版本都停掉,最後用stop-task把所有任務停止。
  
  Docker公司CEO兼聯合創始人Ben Golub也在會上作了分享。Docker的理念一直都很簡單:開發者是內容創作者,應該將他們從“分發”這一行爲中解放出來,就好比印刷術將作者從抄寫的工作中解放出來一樣。
  
  Ben將應用的Docker化分爲5個階段:
1、容器技術可用。
2、容器標準化。
3、構建圍繞容器的生態。
4、成熟的多Docker應用模式。
5、可管理所有這些東西的平臺。

  Ben認爲第一階段在Docker誕生以前就已經完成了,過去18個月做的事情主要都是在2、3階段。技術的發展是一方面,重要的是一直保持開放,所以Github上纔會出現那麼多跟Docker相關的開源項目。
  
  Ben認爲ECS很好的地方在於這個服務很尊重Docker Hub的原有體系,因此他很高興能在 re:Invent 這個場合跟大家做分享。Ben介紹了他們客戶Gilt的例子,Gilt是一個很大的零售網站,使用Docker之前的開發部署週期是以星期計算,整個系統由7個大型應用組成。使用Docker之後,開發部署週期縮短爲以分鐘計算,系統被拆分爲300多個微服務。分鐘級的開發部署週期,意味着每天都可以迭代100多次,那就是100多次的創新。

6.ECS容器服務簡介

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章