基於容器雲的微服務架構實踐

2020-11-23 CSDN技術社區

【編者按】微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並非偶然,而是網際網路時代倒逼傳統技術和架構而產生的變革,而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,本文作者從什麼是微服務切入,詳細的介紹了微服務架構的優勢,最後從自身實踐出發,給出了微服務架構的雲端實踐。

以下為原文:

近年來,微服務架構及容器技術備受關注,在各類文章、演講、博客中頻頻亮相,成為業界最熱門的話題。在時尚的詞彙和熱情滿滿的討論背後,人們開始嚴肅的重新思考網際網路時代服務的架構以及應用開發、運維的方法。微服務以一種全新的架構設計模式,牽動了網際網路應用從設計到運維整個流程方法論的變革。而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,進而實質性的改變了新一代應用開發和發布的方式。

什麼是微服務架構?

微服務架構(Microservices Architecture)是一種架構風格(Architectural Style)和設計模式,提倡將應用分割成一系列細小的服務,每個服務專注於單一業務功能,運行於獨立的進程中,服務之間邊界清晰,採用輕量級通信機制(如HTTP/REST)相互溝通、配合來實現完整的應用,滿足業務和用戶的需求。

微服務作為架構模式的變革,其誕生絕非偶然。它是當傳統服務架構在網際網路時代遭遇挑戰時,人們對於架構模式,開發和運維方法論的一種反思。所以,在深入探討微服務架構之前,我們先回顧一下更為普遍的傳統服務架構。

傳統單塊架構

在過去的10多年中,甚至是微服務日趨流行的當下,絕大多數應用採用的仍是我們更為熟悉的傳統架構,稱之為「單塊架構(Monolithic Architecture)」模式。此類架構系統通常以技術分層,例如最常見的「分層架構」中的表現層、業務邏輯層、數據層。而業務邏輯則可根據更具體的業務職責、功能進行模塊化,形成邏輯組件。這裡需要提一下的是,「分層架構」雖然有邏輯上的模塊和組件,但在物理部署架構層面仍是一個「單塊」,通常作為一個整體編譯、打包、部署、運維。「單塊架構」便是從物理部署角度,對於包括「分層架構」在內的應用架構模式的一種定義。

「分層架構」是軟體架構體系中的經典模式,也是長時間來應用架構實際上的標準。而單塊架構也有其一定優勢,體現為:

  1. 便於開發:大量常用的集成開發環境(IDE)和編程框架(如Rails,Django)都是圍繞傳統架構下單塊應用設計的。這些工具為開發者提供了方便和熟悉的開發、調試體驗。
  2. 便於測試:由於整個應用包含在一個進程中,在常用工具的配合下應用可以很容易在開發、測試環境中啟動。然後採用UI自動化工具(如Selenium)便可簡單實現End-to-End測試。
  3. 便於部署:多數程式語言和框架都有特定的應用打包格式。部署只需將單一軟體包複製到運行環境。而這一過程也可通過現有工具實現自動化。

由於這些優點,在項目初期,單塊架構有一定的吸引力。開發者可以通過工具、框架快速生成應用原型,而不必花大量精力在服務分解和分布式架構設計上。但隨著業務的擴張和功能的累積,原本簡單的應用體積會迅速變大,此時單塊架構很難適應快速變更的需求,由於架構層面的局限性,這類應用會面臨多重挑戰。

  1. 開發效率低:隨著應用複雜度的增加,越來越少開發人員對應用能有全局性的深度理解。新功能開發和缺陷修復難度呈幾何性增加。代碼修改的正確性無法保障。而龐大的代碼庫需要更龐大的開發團隊來維護,無形中又增添了管理、溝通和協調的成本。另外,新加入的團隊成員需要花費大量的時間和精力來熟悉一個複雜的代碼庫。
  2. 交付周期長:在單一進程的單塊架構下,任何微小的改動都需要重新編譯、集成、測試和部署整個應用。隨著應用體積的增大,交付流程和反饋周期都會相應變長,應用發布的代價也隨之增加。於是應用交付周期變緩,交付間隙積累的代碼變動增加,從而對於下次交付產生更大的壓力,形成惡性循環。
  3. 技術轉型難:單一進程、單塊架構意味著中心化的技術選型。比如,應用的不同邏輯組建通常需要採用相對統一的程式語言、框架和技術棧。這些在項目初始階段便已定型。之後,即便是應用中全新的邏輯組件,也很難採用不同的技術棧。而當應用達到一定規模後,全局化的技術棧更新會面臨很高的風險。所以,單塊架構應用一旦定型,就很難再享受行業技術變更、發展所帶來的紅利。

由於這些結構性、系統性問題的存在,單塊架構下的應用越來越難適應網際網路時代快速變更的市場需求。微服務便是從架構層面出發,推動傳統應用開發、運維方式的變革,從而幫助企業快速響應市場需求、快速迭代、快速交付,在網際網路時代保持競爭力。

微服務架構的優勢:

在微服務架構下,我們將原本單一的應用按照功能邊界分解成一系列獨立、專注的微服務。每個微服務對應傳統應用中的一個組件,但是可以獨立編譯、部署和擴展。相對單塊架構,微服務具備以下優勢。

  1. 複雜度可控:在將應用分解的同時,規避了原本複雜度無止境的積累。每一個微服務專注於單一功能,並通過定義良好的接口清晰表述服務邊界。由於體積小、複雜度低,每個微服務可由一個小規模開發團隊完全掌控,易於保持高可維護性和開發效率。
  2. 獨立部署:由於微服務具備獨立的運行進程,所以每個微服務也可以獨立部署。當某個微服務發生變更時無需編譯、部署整個應用。由微服務組成的應用相當於具備一系列可並行的發布流程,使得發布更加高效,同時降低對生產環境所造成的風險,最終縮短應用交付周期。
  3. 技術選型靈活:微服務架構下,技術選型是去中心化的。每個團隊可以根據自身服務的需求和行業發展的現狀,自由選擇最適合的技術棧。由於每個微服務相對簡單,當需要對技術棧進行升級時所面臨的風險較低,甚至完全重構一個微服務也是可行的。
  4. 容錯:當某一組建發生故障時,在單一進程的傳統架構下,故障很有可能在進程內擴散,形成應用全局性的不可用。在微服務架構下,故障會被隔離在單個服務中。若設計良好,其他服務可通過重試、平穩退化等機制實現應用層面的容錯。
  5. 擴展:單塊架構應用也可以實現橫向擴展,就是將整個應用完整的複製到不同的節點。當應用的不同組件在擴展需求上存在差異時,微服務架構便體現出其靈活性,因為每個服務可以根據實際需求獨立進行擴展。

微服務架構的雲端實踐:

雖然微服務架構帶來了諸多優勢,但必須承認,構建,部署,維護分布式的微服務系統並不容易。而容器所提供的輕量級、面向應用的虛擬化運行環境為微服務提供了理想的載體。同樣,基於容器技術的雲服務將極大的簡化容器化微服務創建、集成、部署、運維的整個流程,從而推動微服務在雲端的大規模實踐。以下將以靈雀云為例,來說明各個流程的實踐:

1.創建:靈雀雲的鏡像構建和持續集成服務幫助用戶將獨立、可復用的微服務打包,轉化為隨時可以部署的容器鏡像。假設用戶的微服務程序,存儲於GitHub等代碼託管服務中,用戶可以將這個代碼倉庫構建成容器鏡像,並保存在鏡像倉庫中,用戶可以將這個微服務一鍵部署到我們的容器雲平臺。同時,靈雀雲提供了持續集成的功能,用戶可以選擇是否性使用。每當微服務的代碼有變化時,就構建一個新的容器鏡像,以便以後部署使用。


2.集成:該平臺不僅在平臺的鏡像倉庫中匯集了大量來自Docker官方和社區的優質鏡像,也支持平臺以外的任意鏡像源。用戶可以自由組合、復用數以萬計的容器化微服務,像搭積木一樣輕鬆集成應用。比如,用戶需要一個通用的MySQL資料庫服務,他無需構建鏡像,可以直接在 鏡像社區 中選擇適合的資料庫服務鏡像,並與其微服務連結起來。


3.部署:微服務由於組件數量眾多,雲端部署成為實踐上的一個難點。靈雀雲以容器為應用發布的載體,用戶不必指定傳統部署方式中繁瑣的步驟,只需提供容器鏡像和簡單的容器配置,平臺會將整個部署流程自動化。另外,該平臺還與docker-compose兼容,實現對於由多個微服務容器組成的完整應用的一鍵部署。


4.運維:微服務由於獨立進程眾多,部署後的運維、管理成為實踐上的另一個難點。靈雀雲完全屏蔽底層雲主機和基礎架構運維,讓用戶專注於應用。同時,通過容器編排、自動修復、自動擴展、監控日誌等高級應用生命周期服務,實現容器化微服務的智能託管,進一步幫助用戶降低運維成本和難度。

5.網絡:微服務架構下各組件之間的溝通、協調對網絡有較高要求,尤其在雲端實踐中,各個微服務組件的物理位置是動態的,且不受應用控制。靈雀雲提供完整的容器網絡解決方案,支持負載均衡、服務發現、跨主機關聯,以及應用安全內網來確保微服務對內、對外網絡的可用性及安全性。

  • 首先,要實現服務的高可用性,負載均衡器是必不可少的,靈雀雲支持基於傳輸層和應用層的負載均衡,以滿足用戶不同需求。
  • 負載均衡也可以實現服務發現,雲端部署服務時,各個組件部署的物理位置是有可能發生變化的。在靈雀雲,當用戶創建一個微服務的時候,不論這個服務是停止狀態還是運行狀態,我們都會為服務創建負載均衡器和一個域名,這樣其他服務就可以通過這個域名訪問該服務。即使服務中的容器實例被遷移,系統也會在它重新啟動後,將它掛載回原來的負載均衡器。
  • 跨主機關聯,是指微服務的容器實例會被部署在不同的雲主機上,但會被關聯到該服務的負載均衡器上,以服務來自內網或外網的請求。
  • 內部服務地址,對於很多微服務應用來說,這是個很重要的功能,比如在一個應用中,一個微服務需要訪問一個cache伺服器(比如memcached),但是出於安全的考慮,不希望外部請求訪問到這個cache伺服器,就可以使用靈雀雲的內部服務地址。系統同樣會創建負載均衡,以及域名,但是這個域名只供該用戶的其他服務訪問,外部應用,或其他用戶服務是無法訪問的。
  • 專屬IP是靈雀雲最近新增的一個功能,有些用戶由於特殊需求,不希望和其他用戶共享IP,就可以申請一個專屬IP,並綁定在自己的應用上,以獲得更好的隔離性。


6. 存儲:微服務提倡多元化持久性(PolyglotPersistence),應用內的每個微服務可根據實際需求選擇最合適的數據服務。微服務一般分兩類,無狀態服務和有狀態服務,無狀態服務比如應用伺服器,他們通常是不保存數據的,方便橫向的擴展。有狀態服務需要存儲數據,比如資料庫服務,緩存服務。Docker的特性,決定了容器本身的數據並不是持久化的,需要通過掛載Volume來實現數據的存儲。靈雀雲將持久性雲存儲抽象成數據卷,可以直接掛載在容器上,並在容器重啟、遷移中自動重新掛載。可支持任意容器化數據服務,供微服務應用集成。同時,支持對微服務數據的備份,恢復,和下載,可以利用備份隨時恢復數據。


微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並不是偶然。這是網際網路時代倒逼傳統技術和架構而產生的變革,最前線的開發者和他們所在的網際網路企業最先感受到了這場變革。靈雀雲希望與開發者一起共同引領這場變革,幫助網際網路企業真正專注於自身的核心業務,並在技術和架構上保持領先。

作者簡介:

陳愷,2015年正式加盟靈雀雲,任首席技術官。攜其十數年大規模、企業級分布式系統/雲平臺研發經驗,打造基於容器技術、面向開發者的雲計算平臺。加入雲雀科技之前,2004年在微軟從事Windows作業系統內核(Kernel)的研發,2010年出任微軟雲平臺Windows Azure首席架構師/軟體開發部經理,專注於雲計算/分布式系統的研發,組建、帶領團隊開發Azure最核心的中控系統(Fabric Controller),管理並支撐整個雲平臺後端,承載千萬級規模應用。


更多Container技術資訊,請掃描下方二維碼關注我們

相關焦點

  • 微服務架構技術棧
    基於近年在微服務基礎架構方面的實戰經驗和平時的學習積累,我想總結並提出一些構建微服務 2.0 技術棧的選型思路,供各位在一線實戰的架構師、工程師參考借鑑。對於一些暫時還沒有成熟開源產品的微服務支撐模塊,我也會給出一些定製自研的設計思路。二、選型準則對於技術選型,我個人有很多標準,其中下面三項是最重要的:1.
  • 「首席架構師看微服務架構」介紹NGINX的微服務參考架構
    NGINX的輕巧,高性能和靈活性非常適合微服務。NGINX Docker映像是Docker Hub上排名第一的應用程式映像,您今天在Web上找到的大多數微服務平臺都包含一個演示,它以某種形式部署NGINX並連接到歡迎頁面。因為我們認為轉向微服務對於客戶的成功至關重要,我們NGINX已經啟動了一個專門的程序來開發支持Web應用程式開發和交付這種地震轉變的功能和實踐。
  • 無服務和微服務架構,誰是業務計算的未來?
    總的說來,這兩種架構的相似之處在於:它們都能夠最大程度地降低運營的成本,縮短應用部署的周期,滿足不斷變化的開發需求,以及優化那些對於時間和資源敏感的日常任務。那麼,微服務和無伺服器模型之間的不同之處在哪裡呢?首先,微服務屬於一種小型的SOA(面向服務的體系架構)技術解決方案。
  • DDD到底適不適合微服務架構?
    從初期的單體架構,到豎井式架構、RPC架構,再到大放異彩的微服務架構,可以說架構演進,本質上就是基於業務,對現有架構的抽象過程。一名架構師,最怕缺少全局意識和長線思維。如果架構師設計架構的出發點,只是緩解燃眉之急,那麼在未來,這套系統的迭代會越來越困難,很可能陷入推翻、重建,再推翻、再重建的「鬼打牆」。
  • 基於Prometheus來做微服務監控,有多吃香?
    微服務架構是目前各大網際網路公司普遍採用的軟體架構方式。在微服務架構中,系統被拆分為多個小的、相互獨立的服務,這些服務運行在自己的進程中,可以獨立的開發和部署。
  • SpringCloud微服務架構篇3:Spring Cloud簡介
    5、微服務的統一配置對微服務架構中,數十個、上百個實例,統一對配置進行管理和發布更新。1、Spring Clound與Spring BootSpring Boot可以說是微服務架構的核心技術之一,快速啟動,通過Spring Boot應用中添加Spring MVC依賴,就可以快速實現基於REST架構的服務接口,並且可以提供堆HTTP標準動作的支持。
  • 覆蓋全網的阿里微服務架構有多牛:K8S+實戰+筆記+項目教程
    再次,從具體的案例出發,依次講解了SpringCloud最常用的組件,將理論與實踐相結合,使讀者在學習Spring Cloud的過程中還能了解一個產品從無到有的全過程。最後,結合目前最流行的容器技術,介紹了Kubernetes如何配合Docker進行系統的分布式部署。
  • GISINFO:容器漂移新實踐,助力技術能力跨層級共享
    在跨層級能力共享場景中,運行環境、資料庫和中間件往往不一致,無論是資料庫、網絡環境或者其他配置都有各自業務環境下的命名要求和規則,基於代碼級能力輸出與資源復用面臨很大的挑戰。容器漂移,即不同生產環境之間容器的自動轉移和動態部署,能夠較好地解決該問題。
  • 引領雲原生發展 阿里雲首創雲原生容器界面方法論
    伴隨著 Kubernetes 成為新作業系統的事實,以雲原生容器為主的技術,已經成為雲計算的新界面。1. 雲原生容器界面特徵雲原生容器界面具有以下三個典型特徵:向下封裝基礎設施,屏蔽底層架構的差異性。拓展雲計算新邊界,雲邊端一體化管理。向上支撐多種工作負載和分布式架構。
  • 解鎖物聯網奧秘、探秘微服務引擎,DevRun開發者沙龍深度賦能廣州...
    活動現場,華為雲的多位資深技術專家就從物聯網雲化架構、自動化工程能力、灰度發布能力、超大容量擴展架構、微服務的業務有效管理、企業適用的多樣化場景等多個維度展開了深度分享,為開發者們解鎖了更多關於微服務和物料網設備的前沿理論與實踐案例。除了精彩的主題分享外,華為雲的各位專家大咖還與參會者一同進行了現場實操。
  • DevOps與SRE在容器時代下的發展與變化
    但基於虛擬機的隔離和編排依舊繁瑣而笨重,導致啟動速度慢、傳遞交付笨重。隨著容器技術的出現,輕量級隔離和資源管理優勢令網際網路企業開始重視。Docker帶來了更輕量的運行、更快速的啟動和更便捷的分發模式,由此開啟了DevOps的容器實現時代。Docker為DevOps的實施提供了更多在開發部署和編排的操作延展性,流水線的所有環節都是流暢的,易配置的。
  • 中臺的進化,從「IT架構」到「數智化能力」
    在此理念下,今年 8 月,用友提出 YonBIP 商業創新平臺,該平臺基於大數據、AI、雲計算、區塊鏈等底層數智化技術,採用雲原生、微服務、中臺化、數用分離等新一代技術架構,為數據、智能、業務三大中臺提供底層技術支持。進而通過三大中臺向業界輸出數智化產品,幫助企業加快數智化轉型。  那麼YonBIP大中臺如何協助企業構建產業鏈生態?多企業協作在技術上又會遇到哪些問題?
  • 架構師必須知道的架構設計原則
    比如,微服務架構就體現了: 單一職責:一個微服務儘可能要職責單一,提供的接口也儘可能單一 (接口分離原則),安全 / 路由 / 限流等跨橫切面的關注點 (Cross-Cutting Concerns) 由獨立網關負責,體現關注分離 (Separation of Concerns)。
  • 微服務,Java目前很火熱的系統架構
    學習內容安排如下: 系統架構的演化:集中式架構、分布式架構。當然系統架構肯定不是說我一篇文章就能學好的,只能說我作為一名初學者,是如何去理解這些概念的。至於想要真正地去弄懂這些,需要自己長期性地不斷學習,非一朝一夕就能學完的。一、系統架構概述技術更新是非常快的,從單一應用到垂直細分,到分布式,到SOA,以及微服務架構。
  • 智能家居巨頭 Aqara 基於 KubeSphere 打造物聯網微服務
    當剛開始加入綠米大家庭,發現綠米運維還處在原始野人階段,回顧四周,我只能屢起袖子頂著壓力分析情況,發現綠米的微服務架構 80% 以上都是偏內存型服務,資源利用率非常低,尤其是 CPU、磁碟存儲,十分讓人懊惱。且迭代速度也不盡人意。靜心思靜,決定大改這種狀況。從持續集成開始、Jenkins、Harbor 搭建,到測試環境 Docker Swarm 排編。
  • 零度架構實踐系列視頻教程更新了
    第06期-規約模式最佳實踐(48分鐘)         規約模式用於定義可重用、可組合、有意義和可測試的過濾器,簡單地說,規約模式就是對查詢條件表達式用類的形式進行封裝,使用第三方開原始碼設計並構建自己的規約模式,抽象規約接口與基本實現,規約計算器,在倉儲模式中支持規約查詢
  • Tanzu雲原生平臺與Tanzu Pivotal Labs應用現代化服務能力相結合...
    以上業務和技術兩個方面的變化和挑戰,正在共同驅動現代企業軟體儘快最大限度利用雲計算和大數據平臺的能力,實現基於雲原生和微服務架構的應用軟體和業務系統,通過穩健、遞進式的轉型,共同促進企業軟體現代化。 在整個數位化轉型的過程中,PaaS雲原生平臺和數據平臺作為技術基礎和基石,起到承上啟下,至關重要的作用,是數位化轉型的關鍵。
  • 騰訊雲發布專有雲TCE矩陣 首推AI版專有雲
    TCE企業版採用了領先的分布式架構平臺,提供IaaS、PaaS、SaaS全量雲產品矩陣,並通過騰訊雲9大產品線的在服務方面,騰訊雲還提供遷雲(專有雲)的完整規劃方案,包括從傳統IDC到異構雲平臺的遷移。畢竟在一些中大型企業中,一部分原有業務跑在傳統IT架構上,新生業務則在新架構上。
  • Quarkus 1.0 發布,Java 雲原生、容器優先框架
    Quarkus 是一個用於編寫 Java 應用的雲原生、容器優先框架。Quarkus 是 Kubernetes 原生的 Java 技術棧,它由同類中最佳的 Java 庫和標準精製而成,並針對容器和雲部署量身定製。
  • 數人云發布金融容器雲 構建開放業務新形態
    作為基於Docker的新一代輕量級PaaS平臺,數人金融容器雲實現秒級啟停,幫助客戶及時響應高並發等新型業務需求;同時,藉助容器技術,數人金融容器雲使應用的交付變得標準,極大地消除技術部署的局限性,提高客戶產品的交付及運維效率。