知名 IT 雜誌《InfoWorld》評選出了年度最佳開源平臺、基礎設施、管理和編排軟件。docker
最佳開源數據中心和雲計算軟件數據庫
你可能已經據說過 Docker 容器這項新技術。開發人員很喜歡它,由於能夠用腳原本構建容器,添加一層層服務,並直接從 MacBook Pro 將它們推送到服務器進行測試。容器之因此切實可行,是由於它們超輕量級,不像那些如今已通過時的虛擬機。容器以及交付服務的其餘輕量級方法正在改變操做系統、應用程序及管理工具的格局。這份榜單上的最佳數據中心和雲計算軟件更是其中的佼佼者。編程
Docker 的開源容器技術已經獲得了各大公有云的採用,正內置到 Windows Server 的下一個版本中。Docker 是一款功能強大的數據中心自動化工具,讓廣大開發人員和運營團隊得以將應用程序與基礎設施分開來。設計模式
然而,容器只是 Docker 生態系統的一部分。Docker 還提供了一系列工具,讓你可使用 Docker API,讓容器的整個生命週期實現自動化,另外可自動處理應用程序的設計和編排。瀏覽器
Machine 讓你能夠實現 Docker 容器配置自動化。從命令行開始入手,你可使用一行代碼,鎖定一個或多個主機,部署Docker 引擎,甚至將它加入到 Swarm 集羣。支持大多數虛擬機管理程序和雲平臺,你只須要本身的訪問憑據。安全
Swarm 處理集羣和調度,還能夠與 Mesos 整合起來,提供更高級的調度功能。你可使用 Swarm 創建容器主機池,那樣需求增長時,應用程序能夠相應擴展。應用程序及全部依賴項均可以用 Compose 來定義,它讓你能夠把諸容器鏈接起來,連入到一個分佈式應用程序,做爲一個組來啓動。Compose 描述可適用於諸平臺,那樣拿來開發人員的配置後,可迅速部署到生產環境中。服務器
CoreOS 是一種瘦薄的輕量級服務器操做系統,基於谷歌的 Chromium OS。它旨在與 Linux 容器結合使用,而不是使用程序包管理器來安裝功能。經過使用容器來擴展瘦薄的核心,CoreOS讓你能夠快速部署應用程序,在雲基礎設施上順暢運行。網絡
CoreOS 的容器管理工具fleet旨在把CoreOS服務器集羣看成單個部件來對待,相應工具可用來管理高可用性,並根據資源可用性,將容器部 署到集羣。跨集羣鍵/值存儲系統 etcd 負責處理設備管理,並支持服務發現。若是某個節點出現故障,etcd就能在新的副本上迅速恢復狀態,提供一個鏈接到 CoreOS 自動化更新服務的分佈式配置管理平臺。架構
雖然 CoreOS 也許因支持 Docker 而家喻戶曉,但 CoreOS 的團隊正在開發本身的容器運行時環境 rkt,有本身的容器格式:應用容器映像 (App Container Image)。rkt 還與 Docker 容器兼容,採用了模塊化架構,容許不一樣的容器化系統(甚至硬件虛擬化系統)能夠插入。然而,rkt 仍處於發展的早期階段,因此尚未徹底準備好用於生產環境。併發
因爲咱們使用容器從底層操做系統抽取愈來愈多的服務,開始隨之考慮將來的操做系統會是什麼樣子。相似咱們的應用程序,將來的操做系統將會是在瘦薄內核上運行的一組模塊化服務,能夠自我配置,只提供應用程序所需的服務。
咱們能夠從 RancherOS 領略將來操做系統的模樣。RancherOS 結合了 Linux 內核和 Docker,是一種極簡操做系統,適合將基於容 器的應用程序託管在雲基礎設施中。RancherOS 利用 Docker,將 Linux 用戶空間服務和應用程序託管在不一樣的容器層中,而不是使用標準的 Linux 包裝技術。低級別的 Docker 實例先啓動,將系統服務託管在各自的容器中。用戶的應用程序在較高級別的 Docker 實例中運行,獨立於系統容器。即便其中一個容器崩潰了,主機照樣正常運行。
RancherOS 只有 20MB 大小,因此很容易在整個數據中心中進行復制。它還旨在使用自動化工具加以管理,而不是人工管理,API 級訪問既適用於 Docker 的管理工具,又適用於 Rancher Labs 本身的雲基礎設施和管理工具。
谷歌的 Kubernetes 容器編排系統旨在管理和運行用 Docker 和 Rocket 容器構建的應用程序。Kubernetes 專一於管理微服務應用程序,讓你能夠跨主機羣集分發容器,同時處理擴展問題,確保託管的服務可靠地運行。
因爲容器提供了應用程序抽象層,Kubernetes 是一種以應用程序爲中心的管理服務,支持許多現代開發模式,側重於用戶意圖。這意味着你啓動應 用程序後,Kubernetes 會管理容器,以便容器在你設定的參數範圍內運行,並使用 Kubernetes 調度器,確保它得到所需的資源。容器被分紅了 一個個 pod,由複製引擎加以管理。該引擎能夠恢復出現故障的容器,或者應用程序增長時,添加更多的 pod。
Kubernetes支持谷歌本身的容器引擎(Container Engine),它能夠在一系列其餘的雲和數據中心服務上運行,包括AWS 和 Azure,以及 vSphere 和Mesos。容器能夠鬆散耦合或緊密耦合,那樣不是爲雲平臺即服務(PaaS)運營環境設計的應用程序能夠做爲一組緊密耦合的容器,遷移到雲端。Kubernetes 還支持將應用程序快速部署到羣集,爲你提供了實現持續交付過程的端點。
將數據中心變成私有云或公有云不只僅須要虛擬機管理程序,還須要一種新的操做層,能夠管理數據中心資源,就好像它們是單一計算機,處理資源和調度。Apache Mesos 被稱爲是一種「分佈式系統內核」,讓你能夠管理成千上萬臺服務器,使用容器來託管應用程序和 API,支持應用程序並行開發。
Mesos 的核心是一組守護進程,將資源暴露在中央調度程序面前。任務跨節點分發,充分利用可用的處理器和內存資源。一個關鍵方法是,要是提供的資源知足不了要求,應用程序能夠拒絕這些資源。這種方法很適用於大數據應用,你可使用 Mesos 運行 Hadoop 和 Cassandra 分佈式數據庫,還有Apache 本身的 Spark 數據處理引擎。還支持 Jenkins 持續集成服務器,讓你能夠在服務器集羣上並行運行構建 worker 和測試worker,並根據工做負載的大小,動態調整任務。
Mesos 設計成可在 Linux 和 Mac OS X 上運行,最近還被移植到 Windows 上,以支持在 Azure 平臺上開發可擴展的並行應用程序。
Joyent 的 SmartDataCenter 是一款運行其公有云的軟件,在 SmartOS 瘦服務器操做系統上面添加了一個管理平臺軟件。SmartOS 是 OpenSolaris 的後續版本,結合了 Zones 容器和 KVM 虛擬機管理程序,這是一種內存中的操做系統,可從U盤快速啓動,能夠在裸機服務器上運行。
使用 SmartOS,你能夠快速部署一組輕量級服務器,這些服務器可經過一組JSON API,以編程的方式加以管理,而功能經過虛擬機來交付,由內置的映像管理工具來下載。經過使用虛擬機,全部用戶空間(userland)操做與底層操做系統隔離開來,減少了主機和訪客的安全隱患。
SmartDataCenter 在 SmartOS服務器上運行,一臺服務器做爲專用管理節點來運行,集羣的其他服務器做爲計算節點來運行。能夠從筆記本電腦上的雲版本(這是一種 VMware 虛擬設備)開始入手,於是能夠試用管理服務器。在實際數據中心,你將把 SmartOS 部署到服務器上,使用ZFS 來處理存儲這包括本地映像庫。服務做爲映像來部署,而各組件存儲在對象庫中。
SmartDataCenter 和 SmartOS這個組合改善了 Joyent公有云的體驗,提供了一套屢試不爽的工具,能夠幫助你啓動本身的雲數據中心。這個基礎架構專一於現在的虛擬機,但也爲明天的虛擬機奠基了基礎。一個相關的Joyent 項目 sdc-docker 將整個SmartDataCenter 集羣暴露爲單單一個 Docker 主機,受原生 Docker 命令的控制。
管理大規模數據中心的關鍵不是使用服務器的圖形用戶界面(GUI),而是根據來自監控工具和服務的信息,自動編制腳本,轉發來自傳感器和日誌的信息,而後將操做/行動告知應用程序。Sensu 就是開始提供這種功能的一個工具,它經常被稱爲「監控路由器」。
在數據中心中運行的腳本將信息發送給 Sensu,而後 Sensu 再將信息發送給相應的處理程序,使用一種基於 RabbitMQ 的發佈/訂閱架構。服務器能夠呈分佈式,將發佈的檢查結果發送給負責處理的代碼。你能夠在電子郵件、Slack 房間或 Sensu 本身的儀表板中查看結果。消息格式由 JSON 文件來定義,變異器(mutator)被用來實現數據實時格式化,消息通過濾後交給一個或多個事件處理程序。
Sensu 還是一種比較新興的工具,可是大有但願。若是你想實現數據中心自動化,就須要這樣一款工具,不只用來代表數據中心出現的狀況,還可用來在最須要的時候提供這方面信息。一款商業版本增長了支持與第三方應用程序集成的功能,可是開源版本含有管理數據中心所需的大部分功能。
管理現代數據中心是項複雜的任務。一排排服務器須要當心對待,你還須要旨在處理成千上萬個節點的監控系統。監控應用軟件帶來了特殊的挑戰,這時候Prometheus能夠發揮用場。做爲一種旨在向操做人員提供警報的服務監控系統,Prometheus能夠在各系統上運行,不管是一臺筆記本電腦,仍是多臺監控服務器組成的高可用性集羣。
時間序列數據捕獲後存儲起來,而後與模式進行比對,識別故障和問題。你須要暴露HTTP端點上的數據,使用YAML文件來配置服務器。基於瀏覽器的報告工具可處理數據顯示,還有一個表達式控制檯,你能夠試用查詢。儀表板能夠用GUI構建器來構建,或使用一系列模板來編寫,那樣你能夠提供應用程序控制臺,這些控制檯可以使用Git等版本控制系統來加以管理。
好比說,捕獲的數據可以使用表達式加以管理,於是很容易聚合來自幾個數據源的數據,好比說能夠未來自一系列 Web 端點的數據集中到一個存儲區。一個試驗性的警報管理模塊將警報發送給常見的協做和開發運營工具,包括 Slack 和 PagerDuty。提供了面向 Go 和 Java 等常見語言的官方客戶軟件庫,這意味着很容易爲應用程序和服務添加支持Prometheus的功能,而第三方選件能夠將 Prometheus 擴展到 Node.js 和 .Net。
運行現代數據中心會生成大量數據,還須要從這些數據中獲取信息的工具。這時候,Elasticsearch、Logstash和Kibana這對組合(經常被稱爲ELK架構)能夠發揮做用。
Elasticsearch旨在處理可擴展的搜索任務,對多種類型的內容執行搜索,包括結構化和非結構化文檔。它基於Apache的Lucene信 息檢索工具,還有一組充分利用REST的JSON API。它用來爲維基百科和GitHub等網站提供搜索服務,使用分佈式索引,具備自動化負載平衡和路由功能。
現代雲架構的基礎是物理服務器陣列,做爲虛擬機主機來運行。監控成千上萬臺服務器須要集中式日誌。Logstash負責採集和過濾那些服務器(以及在服務器上運行的應用程序)生成的日誌,並使用每一臺物理機和虛擬機上的轉發器。而後,Logstash格式的數據發送給Elasticsearch,爲你提供了搜索索引:添加更多的服務器後,搜索引擎能夠迅速擴展。
在更高層面上,Kibana爲Elasticsearch添加了可視化層,提供Web儀表板,用於探究和分析數據。儀表板能夠圍繞定製搜索來構建,並與團隊共享,提供了一種快速、易於理解的開發運營信息源。
管理服務器配置是管理現代數據中心或雲基礎設施的任何開發運營方法的一個關鍵部分。配置管理工具採用了指望狀態的方法,簡化雲級別系統管理,使用服務器和應用程序的描述來處理服務器和應用程序的部署。
Ansible提供了極簡的管理服務,使用SSH來管理Unix節點,使用PowerShell與Windows服務器協同運行,無需部署代理。Ansible Playbook用YAML描述服務器或服務的狀態,將Ansible模塊部署處處理配置的服務器,一旦服務運行起來,就刪除模塊。你可 以使用Playbook來編排任務,好比說使用一個腳原本部署多個Web端點。
可讓模塊建立和Playbook交付成爲持續交付過程的一部分,並使用構建工具來提供配置、實現部署自動化。Ansible能夠聚集來自雲服務提供商的信息,簡化虛擬機和網絡的管理。Ansible中的監控工具可以自動觸發額外的部署,幫助管理和控制雲服務,還竭力管理Hadoop等大規模數據平臺所使用的資源。
作好持續交付不只僅須要一種井井有理的方法來處理開發,還須要管理測試和構建的工具。這時候,Jenkins持續集成服務器應運而生。 Jenkins與你選擇的源代碼控制、測試工具以及構建服務器協同運行。它是個靈活的工具,最初用來與Java協同運行,如今已擴大到可支持Web開發和移動開發,甚至能夠構建Windows應用程序。
把Jenkins比做交換網絡可能最恰當,讓文件經過測試和構建過程,並回應來自所使用的各個工具的信號――這歸功於1000多個插件組成的龐大庫。這些包括將Jenkins與本地Git實例和GitHub整合起來的工具,那樣能夠將持續開發模式擴展到你的構建和交付過程。
使用Jenkins之類的自動化工具不只要奉行一種理念,還要實施構建過程。一旦你致力於持續集成做爲持續交付模式的一部分,只要代碼分發給源代碼控制版本分支,你就要運行測試和構建週期,一旦代碼進入到主分支,就要分發給用戶。
現代雲應用程序使用不一樣於咱們熟悉的n層企業和Web應用程序的設計模式構建而成。它們是分佈式、事件驅動的服務組合,這些服務可迅速擴展,並支持成千上萬個併發用戶。Node.js就是採用這種新模式的一項關鍵技術,它被許多主要的雲平臺所使用,易於安裝,成爲雲基礎設施上瘦服務器或容器的一部分。
Node.js 大獲成功,關鍵是 Npm 程序包格式,它讓你能夠迅速安裝核心 Node.js 服務的擴展件。這包括 Express 和 Seneca 等框架,這些框架有助於構建可擴展的應用程序。中央註冊中心處理程序包分發,依賴項自動安裝。
雖然 io.js 分支暴露了項目管理方面的問題,可是它也讓一組開發人員得以積極地將ECMAScript 6支持功能添加到與Npm兼容的引擎中。兩支團隊協調後,Node.js 的和 io.js 代碼庫已合併,如今新版原本自 io.js 代碼庫。
明年,其餘分支可能會從新併入到主分支,好比微軟的 io.js 分支增長了對 64 位 Chakra JavaScript 引擎以及谷歌 V8 的支持,從而讓 Node.js 的平臺不斷髮展,鞏固其做爲雲級別微服務首選主機的地位。
Seneca 微服務框架的開發人員有句座右銘:「如今構建,之後擴展」。對任何想開發微服務的人來講,這句格言再恰當不過了,由於它讓你能夠從小處作起,而後隨着服務增多,逐步添加功能。
從本質上講,Seneca 實施了對象/消息(actor/message)設計模式,專一於使用 Node.js 做爲交換引擎:獲取消息後,處理其內容,而後發送適當的響應,不管是發給消息始發者仍是另外一個服務。因爲專一於與業務用例相對應的消息模式,拿來Seneca 後,比較容易爲你的應用程序迅速 構建極簡的可行產品。插件架構讓你很容易將 Seneca 與其餘工具集成起來,迅速爲服務添加功能。
應用程序的要求提升或有變時,能夠迅速爲代碼庫添加新的模式,或者把現有模式分解成不一樣的服務。一個模式還能夠調用另外一模式,以便迅速重複使用代碼。還很容易將 Seneca 添加到消息總線,那樣能夠把它用做一個框架,處理來自物聯網設備的數據,由於你只須要定義監聽端口,監視 JSON 數據在哪裏提供。
服務可能不具備持續性,Seneca 爲你提供了這個選擇:使用內置的對象關係映射層來處理數據抽象,並提供了經常使用數據庫的插件。
微軟開放了 .Net 的源代碼,此舉無異於公開了該公司的這個 Web 平臺的大部分代碼。新的 .Net Core 版本能夠在Windows、OS X 和 Linux 上運行。.NetCore 目前從微軟的 Codeplex 代碼庫遷移到了 GitHub,爲 .Net 提供了一種更模塊化的方法,讓你能夠在須要時,安裝所需的功能。
ASP.Net 5 目前處於開發之中,這個 Web 平臺的開源版本可在 .Net Core 上運行。你可使用微軟的 MVC 6 框架,將它做爲 Web 應用程序的基礎。還支持新的 SignalR 庫,這些庫增添了對 WebSockets 及其餘實時通訊協議的支持。
若是你計劃使用微軟的新款 Nano 服務器,就要使用 .Net Core 編寫代碼,由於它是爲瘦環境設計的。新的 DNX 是 .Net 執行環境,簡化了將 ASP.Net 應用程序部署到衆多平臺上的任務,還有用於包裝代碼、在主機上啓動運行時環境的工具。特性可以使用 NuGet 程序包管理器來添加,讓你能夠只要使用所需的庫。
微軟的開源 .Net 還很年輕,可是微軟已承諾確保它取得成功。微軟本身的下一代服務器操做系統支持開源 .Net,這意味着它在數據中心和雲都有一席之地。
GlusterFS是一個分佈式文件系統。Gluster 把各類存儲服務器聚合到一個龐大的並行網絡文件系統。你甚至能夠用它來代替Hadoop 集羣中的 HDFS,或者代替成本高昂的存儲區域網(SAN)系統,或者同時代替二者。雖然 HDFS 很適合 Hadoop,但有一個不須要將數據傳輸到另外一處來分析的通用分佈式文件系統是一大優點。
在當下商品化硬件、商品化計算以及對性能和延遲要求更高的時代,購買又大又貴的 EMC SAN,但願它能知足全部要求(天然知足不了)再也不是你惟一切實可行的選擇。GlusterFS 在 2011 年被紅帽收購。