天天看點

利用微服務建構現代應用(二)

本文講的是<b>利用微服務建構現代應用(二)</b>,【編者的話】本文是如何用微服建構現代應用的第二部分,介紹了如何用MongoDB中實作微服務,在遷移到微服務之前需要考慮的問題以及使用MongoDB建構微服務架構的客戶案例。

企業要享受到微服務的好處需要一些基本的技術原則,其中最主要的是靈活的資料模型、備援、自動化和可擴充性。

靈活的資料模型:MongoDB的動态模式是處理微服務和持續傳遞需求的理想方式。當有新的功能上線需要修改資料模型時,無需修改所有的資料庫記錄,這對于關系資料庫來講可能需要花費數周。開發人員可以針對迅速變化的環境快速的疊代資料模型,是以提供了更好的靈活性和可以更快的将産品推向市場。

備援:微服務的分布式特性造成了更多的失效點,例如更多的網絡連接配接使得微服務的設計需要仔細的考慮備援性。MongoDB非常适合這一點,因為它通過MongoDB副本提供了内建的備援性。副本不僅僅提供了更好的錯誤恢複能力,也通過多資料中心的部署和在同一個資料庫叢集中隔離業務負載和分析報告負載的功能提供了更好的災備能力。

監控和自動化:手動管理少量的服務并不困難,但是當服務的數量增加時,如果沒有一個自動化的方式去管理這種複雜性的增加,生産力将會停滞。選擇合适的監控和自動化工具對于保證DevOps團隊的生産力是非常重要的,尤其是當環境變得複雜時。

Ops Manager可以管理超過100個關鍵的資料庫和系統的健康狀況,包括操作計數器、CPU使用率、副本狀态和任意節點的狀态。這些度量被安全的送到Ops Manager進行處理和可視化。

利用微服務建構現代應用(二)

圖1:Ops Manager提供了MongoDB部署的實時和曆史資料的可視化

通過Ops Manager的RESTful API跟已有的監控工具整合,以及通過内置的整合功能跟業界領先的APM(Application Performance Management)平台例如New Relic整合都是非常容易的。這種整合使得可以通過統一的管理界面MongoDB狀态和應用基礎設施中的其它部分。

可擴充性:通過擴充來滿足新的業務需求是所有IT環境的必備能力,微服務也不例外。MongoDB提供了一整套可擴充的方案可以自動化的在多個節點之間配置設定和部署資料庫,這可以非常容易的滿足有動态以及高性能需求的IT基礎設施。另外,通過auto-sharding功能(在需要時可以将部署配置設定到不同的地理域),MongoDB也非常适合在商用硬體上進行橫向擴充。這比整體設計、縱向擴充的傳統RDBMS來講是有優勢的,因為MongoDB是自動化和透明的。

為了擷取更大的商業利益,很多組織正在将微服務遷移到雲平台上。雲平台的動态特性使得企業可以容易的進行縱向擴充或者收縮同時提供持續的可用性。

雖然微服務有很多有點,但是它并不是适合所有人。在實施一個微服務項目之前有幾個問題需要仔細考慮:

監控:微服務的一個最重要的挑戰是如何有效的監控整個系統。監控一兩個服務是很容易的,但是如何有效的監控大量服務則會變得非常具有挑戰性。不僅僅是有更多的伺服器需要監控,同時也有更多的log檔案需要分析,以及更大的可能性發生網絡分裂。傳統的方式是監控狀态例如CPU,記憶體以及網絡延遲等,這也是很重要的,但是企業使用者也需要擴充監控能力去了解系統的度量和從一個長時間來看系統的運作情況。自動化監控流程可以幫助應付這些挑戰和降低營運的開銷。

更高的開發技能需求:微服務在分布式系統上運作,這意味着更高的複雜性。網絡延遲、硬體失效、不可靠的網絡、同步以及容錯能力都需要細緻的和适當的去處理。為了去處理這種增加的複雜性,開發人員需要很強的營運和産品背景。開發人員不再是簡單的将開發好的程式交給運維團隊即可,開發人員需要了解DevOps、測試和釋出之間的關系來設計一個服務。在實作一個微服務架構之前,确定你的團隊是否有能力處理這種複雜性是一件非常重要的事情。

更高的營運開銷:對于某個整體性應用,它可能隻是需要一個應用伺服器叢集和幾個程序,但是一個微服務應用在增加了備援之後可能需要50個服務和200個程序。營運和監控所有的這些程序會是一個令人生畏的任務。另外,服務需要通過持續傳遞線被測試和快速部署,這需要合适的工具和技能。

不正确的服務邊界:在設計階段就定義合适的服務邊界是非常必要的。在從内部元件開始建立服務時,一個常見的問題就是沒有很好的考慮服務邊界。随着更多的功能被加入,有一種風險就是最終建構了一個巨大的分布式整體性應用。如果服務邊界沒有被正确的定義,将會增加成本,耦合的服務以及更高的測試複雜性。

全世界成千上萬的組織在使用MongoDB,包含幾乎半數的财富100企業。很多企業在微服務架構中使用MongoDB來達到他們的業務和部署目标。

Comparethemarket.com是英國一個領先的比價服務提供商,它使用了MongoDB作為其巨大的微服務環境背後的營運資料庫。業務可用時間是非常關鍵的,MongoDB的分布式設計保證了SLA總是能被滿足。Comparethemarket.com的部署包含了在AWS上的微服務。每一個微服務或者相關的邏輯分組都有專用的運作在Docker容器裡的MongoDB副本,并部署在AWS的不同可用域以提高彈性和高可用性。MongoDB Ops Manager被用來提供營運自動化,這對快速上線新的功能至關重要:部署副本、提供持續的備份和執行無當機時間的更新。

fuboTV是北美的一個流媒體服務提供商,提供全世界足球聯賽的流媒體,fuboTV使用MongoDB作為其微服務架構的核心資料庫。fuboTV的流媒體服務具有極端的突發性,在一個比賽開始前10分鐘會是平常的流量的100多倍。為了處理業務增長和軟體釋出計劃的需求,fuboTV将它的MongoDB資料庫遷移到了Google雲平台中被Kubernetes編排系統管理的Docker容器中。

利用微服務建構現代應用(二)

圖2:fuboTV 微服務架構

這給fuboTV待了帶來了更高的靈活性、效率和上線時間。使用Kubernetes管理的容器,fuboTV可以将其所有的環境 – 開發、測試、QA和生産 – 部署到一個實體機叢集中。Kubernetes排程器被用來精确的控制所有應用的資源配置設定,使得fuboTV可以最大化伺服器使用率和減少成本。Kubernetes副本控制器可以在某個容器失敗時自動的重新排程,進而實作容錯和持續可用性。資料備援是通過MongoDB的副本來實作的。這使得fuboTV在部署和更新應用時可以做到零當機時間。

OTTO 是德國最大的時尚和生活品零售商,每天客流量有200萬。OTTO的一個問題是并行的團隊橫跨多個業務領域(業務,項目管理,IT),他們會面對不同的問題但是都需要快速的送出結果。所有的團隊都獨立的選擇了MongoDB作為最好的工具來快速和容易的獲得結果。使用松耦合的團隊,架構和營運,OTTO消除了部署和測試的瓶頸。團隊可以快速的和疊代式的修改錯誤和支援持續傳遞。MongoDB是OTTO業務、IT和項目管理團隊能夠快速送出結果、提高開發的靈活性、允許團隊無風險的創新的驅動力。

微服務架構相比整體性架構有諸多的優點,但這并不意味着微服務沒有挑戰。合适的計劃和應用的解耦合是能保證微服務架構可以達到你既定目的的前提。MongoDB非常适合微服務架構,MongoDB提供了靈活的模式、備援、自動化和可擴充性。MongoDB和微服務的協同使用可以幫助組織有效的協調團隊、更快的創新和在應用開發與傳遞的新時代中克服挑戰。

======================================================

譯者介紹

李光成,IBM中國研究院資深研究員,研究方向是雲計算基礎設施及技術。目前在做的是Docker資源隔離方面的研究項目。

<a href="http://dockone.io/file/download/file_name-5Yip55So5b6u5pyN5Yqh5p6E5bu6546w5Luj5bqU55SoXy1fMi5kb2N4__url-aHR0cDovL2RvY2tlcm9uZS5jb20vdXBsb2Fkcy9hcnRpY2xlLzIwMTYwNjE0L2QzMjFkMjM1NDNmOTUwZDliYzM5ODdjODhlZDVlOTM1"> 利用微服務建構現代應用_-_2.docx</a>

原文釋出時間為:2016-06-14

本文作者:liguangcheng 

本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。

原文标題:利用微服務建構現代應用(二)