【編者按】微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並非偶然,而是網際網路時代倒逼傳統技術和架構而產生的變革,而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,本文作者從什麼是微服務切入,詳細的介紹了微服務架構的優勢,最後從自身實踐出發,給出了微服務架構的雲端實踐。
以下為原文:
近年來,微服務架構及容器技術備受關注,在各類文章、演講、博客中頻頻亮相,成為業界最熱門的話題。在時尚的詞彙和熱情滿滿的討論背後,人們開始嚴肅的重新思考網際網路時代服務的架構以及應用開發、運維的方法。微服務以一種全新的架構設計模式,牽動了網際網路應用從設計到運維整個流程方法論的變革。而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,進而實質性的改變了新一代應用開發和發布的方式。
什麼是微服務架構?
微服務架構(Microservices Architecture)是一種架構風格(Architectural Style)和設計模式,提倡將應用分割成一系列細小的服務,每個服務專注於單一業務功能,運行於獨立的進程中,服務之間邊界清晰,採用輕量級通信機制(如HTTP/REST)相互溝通、配合來實現完整的應用,滿足業務和用戶的需求。
微服務作為架構模式的變革,其誕生絕非偶然。它是當傳統服務架構在網際網路時代遭遇挑戰時,人們對於架構模式,開發和運維方法論的一種反思。所以,在深入探討微服務架構之前,我們先回顧一下更為普遍的傳統服務架構。
傳統「單塊架構」:
在過去的10多年中,甚至是微服務日趨流行的當下,絕大多數應用採用的仍是我們更為熟悉的傳統架構,稱之為「單塊架構(Monolithic Architecture)」模式。此類架構系統通常以技術分層,例如最常見的「分層架構」中的表現層、業務邏輯層、數據層。而業務邏輯則可根據更具體的業務職責、功能進行模塊化,形成邏輯組件。這裡需要提一下的是,「分層架構」雖然有邏輯上的模塊和組件,但在物理部署架構層面仍是一個「單塊」,通常作為一個整體編譯、打包、部署、運維。「單塊架構」便是從物理部署角度,對於包括「分層架構」在內的應用架構模式的一種定義。
「分層架構」是軟體架構體系中的經典模式,也是長時間來應用架構實際上的標準。而單塊架構也有其一定優勢,體現為:
由於這些優點,在項目初期,單塊架構有一定的吸引力。開發者可以通過工具、框架快速生成應用原型,而不必花大量精力在服務分解和分布式架構設計上。但隨著業務的擴張和功能的累積,原本簡單的應用體積會迅速變大,此時單塊架構很難適應快速變更的需求,由於架構層面的局限性,這類應用會面臨多重挑戰。
由於這些結構性、系統性問題的存在,單塊架構下的應用越來越難適應網際網路時代快速變更的市場需求。微服務便是從架構層面出發,推動傳統應用開發、運維方式的變革,從而幫助企業快速響應市場需求、快速迭代、快速交付,在網際網路時代保持競爭力。
微服務架構的優勢:
在微服務架構下,我們將原本單一的應用按照功能邊界分解成一系列獨立、專注的微服務。每個微服務對應傳統應用中的一個組件,但是可以獨立編譯、部署和擴展。相對單塊架構,微服務具備以下優勢。
微服務架構的雲端實踐:
雖然微服務架構帶來了諸多優勢,但必須承認,構建,部署,維護分布式的微服務系統並不容易。而容器所提供的輕量級、面向應用的虛擬化運行環境為微服務提供了理想的載體。同樣,基於容器技術的雲服務將極大的簡化容器化微服務創建、集成、部署、運維的整個流程,從而推動微服務在雲端的大規模實踐。以下將以靈雀云為例,來說明各個流程的實踐:
1.創建:靈雀雲的鏡像構建和持續集成服務幫助用戶將獨立、可復用的微服務打包,轉化為隨時可以部署的容器鏡像。假設用戶的微服務程序,存儲於GitHub等代碼託管服務中,用戶可以將這個代碼倉庫構建成容器鏡像,並保存在鏡像倉庫中,用戶可以將這個微服務一鍵部署到我們的容器雲平臺。同時,靈雀雲提供了持續集成的功能,用戶可以選擇是否性使用。每當微服務的代碼有變化時,就構建一個新的容器鏡像,以便以後部署使用。
2.集成:該平臺不僅在平臺的鏡像倉庫中匯集了大量來自Docker官方和社區的優質鏡像,也支持平臺以外的任意鏡像源。用戶可以自由組合、復用數以萬計的容器化微服務,像搭積木一樣輕鬆集成應用。比如,用戶需要一個通用的MySQL資料庫服務,他無需構建鏡像,可以直接在 鏡像社區 中選擇適合的資料庫服務鏡像,並與其微服務連結起來。
3.部署:微服務由於組件數量眾多,雲端部署成為實踐上的一個難點。靈雀雲以容器為應用發布的載體,用戶不必指定傳統部署方式中繁瑣的步驟,只需提供容器鏡像和簡單的容器配置,平臺會將整個部署流程自動化。另外,該平臺還與docker-compose兼容,實現對於由多個微服務容器組成的完整應用的一鍵部署。
4.運維:微服務由於獨立進程眾多,部署後的運維、管理成為實踐上的另一個難點。靈雀雲完全屏蔽底層雲主機和基礎架構運維,讓用戶專注於應用。同時,通過容器編排、自動修復、自動擴展、監控日誌等高級應用生命周期服務,實現容器化微服務的智能託管,進一步幫助用戶降低運維成本和難度。
5.網絡:微服務架構下各組件之間的溝通、協調對網絡有較高要求,尤其在雲端實踐中,各個微服務組件的物理位置是動態的,且不受應用控制。靈雀雲提供完整的容器網絡解決方案,支持負載均衡、服務發現、跨主機關聯,以及應用安全內網來確保微服務對內、對外網絡的可用性及安全性。
6. 存儲:微服務提倡多元化持久性(PolyglotPersistence),應用內的每個微服務可根據實際需求選擇最合適的數據服務。微服務一般分兩類,無狀態服務和有狀態服務,無狀態服務比如應用伺服器,他們通常是不保存數據的,方便橫向的擴展。有狀態服務需要存儲數據,比如資料庫服務,緩存服務。Docker的特性,決定了容器本身的數據並不是持久化的,需要通過掛載Volume來實現數據的存儲。靈雀雲將持久性雲存儲抽象成數據卷,可以直接掛載在容器上,並在容器重啟、遷移中自動重新掛載。可支持任意容器化數據服務,供微服務應用集成。同時,支持對微服務數據的備份,恢復,和下載,可以利用備份隨時恢復數據。
微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並不是偶然。這是網際網路時代倒逼傳統技術和架構而產生的變革,最前線的開發者和他們所在的網際網路企業最先感受到了這場變革。靈雀雲希望與開發者一起共同引領這場變革,幫助網際網路企業真正專注於自身的核心業務,並在技術和架構上保持領先。
作者簡介:
陳愷,2015年正式加盟靈雀雲,任首席技術官。攜其十數年大規模、企業級分布式系統/雲平臺研發經驗,打造基於容器技術、面向開發者的雲計算平臺。加入雲雀科技之前,2004年在微軟從事Windows作業系統內核(Kernel)的研發,2010年出任微軟雲平臺Windows Azure首席架構師/軟體開發部經理,專注於雲計算/分布式系統的研發,組建、帶領團隊開發Azure最核心的中控系統(Fabric Controller),管理並支撐整個雲平臺後端,承載千萬級規模應用。