微服務(wù)架構(gòu)深度解析微服務(wù)定義是什么?微服務(wù)與云原生有何關(guān)聯(lián)?
微服務(wù)概述

微服務(wù)的概念來源于Martin Fowler 的一篇知名博文 :MicroServices。在博文中,“微服務(wù)架構(gòu)”這個術(shù)語用來描述一種將軟件應(yīng)用程序設(shè)計為可獨立部署的服務(wù)套件的特定方式。
“細粒度自治服務(wù)”“自動化部署”“圍繞業(yè)務(wù)能力”“端點智能”“語言和數(shù)據(jù)的分散控制”,從這些描述微服務(wù)架構(gòu)特征的術(shù)語中,我們發(fā)現(xiàn)了一種越來越吸引人的軟件系統(tǒng)風(fēng)格。
微服務(wù)架構(gòu)介紹
背景介紹
目前不僅各大互聯(lián)網(wǎng)公司已經(jīng)在大規(guī)模地應(yīng)用微服務(wù)架構(gòu),而且傳統(tǒng)行業(yè)也逐漸接受了這種架構(gòu)模式,紛紛開始采用微服務(wù)架構(gòu)構(gòu)建業(yè)務(wù)系統(tǒng)。為什么微服務(wù)架構(gòu)會如此受歡迎?微服務(wù)架構(gòu)是設(shè)計而來還是演變而來的呢?要了解這些問題,我們需要從現(xiàn)代經(jīng)濟模式和企業(yè)組織架構(gòu)入手來了解微服務(wù)架構(gòu)崛起的時代背景。
Niels Pflaeging在Organize for Complexity一書中通過“浴缸曲線”(見下圖)將西方從20世紀到現(xiàn)在的經(jīng)濟模式劃分為三個時代:本地市場和用戶定制化的“手工藝時代”;通過機械規(guī)模化提升效率和比拼成本,市場廣闊而缺乏競爭的“泰勒工業(yè)時代”;以知識工人為主體,新興行業(yè)涌現(xiàn)、施壓,從而帶來市場需求快速變化的“全球經(jīng)濟時代”。

在“手工藝時代”,產(chǎn)品的價值創(chuàng)造完全取決于掌握技藝的手工藝者,局部市場、高度動態(tài)化、定制化是這個時代的特點,但這種模式很難做到規(guī)模化地生產(chǎn)和持續(xù)地輸出價值。在“泰勒工業(yè)時代”,主流的組織是上傳下達的“命令控制型”組織,更適合簡單、重復(fù)的規(guī)模化生產(chǎn),但這種組織架構(gòu)的不足是對市場響應(yīng)慢,在應(yīng)對復(fù)雜變化方面十分脆弱。而在“全球經(jīng)濟時代”,由新興行業(yè)帶領(lǐng),逐漸興起更多扁平或分散的復(fù)雜的自適應(yīng)組織,這種架構(gòu)模式更加傾向于跨職能混搭和協(xié)作,和市場直接對接,可以快速靈活地響應(yīng)市場變化。
可以說,組織、系統(tǒng)架構(gòu)和技術(shù)之間隱含著映射關(guān)系。從組織所采用的技術(shù)棧和架構(gòu)特征可以快速推斷出組織的業(yè)務(wù)模式和組織架構(gòu)方式。單體架構(gòu)、垂直架構(gòu)、集中式數(shù)據(jù)庫常見于泰勒型組織;而云計算、微服務(wù)、DevOps等技術(shù)更加適合于復(fù)雜的自適應(yīng)組織。同時,技術(shù)架構(gòu)反過來也受限于強勢的組織架構(gòu)和企業(yè)管理文化約束。回顧早期的軟件系統(tǒng),企業(yè)采用單體架構(gòu)可以快速滿足業(yè)務(wù)的簡單訴求,然而隨著項目規(guī)模的擴大、業(yè)務(wù)模塊的耦合、組織人員的膨脹,使得單體架構(gòu)冗余而數(shù)量龐大的代碼越來越無法適應(yīng)企業(yè)靈活應(yīng)對變化的需求,大量緊耦合的代碼導(dǎo)致應(yīng)用的模塊界限日益模糊,業(yè)務(wù)發(fā)展急需匹配高可用、可擴展、隔離性好、復(fù)用性強的應(yīng)用系統(tǒng)架構(gòu),而傳統(tǒng)的單體架構(gòu)顯然無法滿足企業(yè)的需求。
在Microservice Pattens一書中,作者使用餐飲應(yīng)用FTGO(Foodto Go)舉例,說明了系統(tǒng)是如何一步步走向單體地獄的。系統(tǒng)的過度復(fù)雜使得業(yè)務(wù)邏輯耦合、開發(fā)速度緩慢、交付周期長、難以擴展,這給開發(fā)人員帶來了極大的挫折感,生產(chǎn)效率也隨之大幅下降。單體架構(gòu)在運行狀態(tài)下,出現(xiàn)故障難以隔離,局部異常問題往往會影響整個系統(tǒng)的正常運行,最終導(dǎo)致整體服務(wù)的不可用,給業(yè)務(wù)人員造成的收入損失、給客戶造成的糟糕體驗都讓人無法忍受。
正是在這樣的時代背景和業(yè)務(wù)訴求下,微服務(wù)架構(gòu)成為了解決復(fù)雜問題的靈丹妙藥。微服務(wù)架構(gòu)在應(yīng)對需求的變化、容錯處理、服務(wù)復(fù)用及擴展、提升開發(fā)效率、簡化交互等方面都有明顯的優(yōu)勢。同時,敏捷、DevOps、持續(xù)集成/持續(xù)交付、容器技術(shù)、Spring Cloud框架、輕量級服務(wù)、領(lǐng)域驅(qū)動設(shè)計等的涌現(xiàn)也為微服務(wù)架構(gòu)的發(fā)展奠定了基礎(chǔ)。
綜上所述,持續(xù)快速響應(yīng)市場、高度動態(tài)化、應(yīng)對復(fù)雜場景的能力已經(jīng)成為企業(yè)的核心競爭力,企業(yè)越來越需要一個能夠面對變化、并且能夠主動擁抱變化的軟件架構(gòu),而微服務(wù)架構(gòu)正是在這樣的時代大背景下逐漸發(fā)展壯大起來的。
微服務(wù)的定義
微服務(wù)并沒有一個明確的官方定義,它可以解釋為一種架構(gòu)編程思維,更多地被描述為一種架構(gòu)風(fēng)格。微服務(wù)架構(gòu)的概念可以說來源于技術(shù)專家多年的工作積累和最佳實踐總結(jié),是通過不斷發(fā)展、演進逐漸形成的。
架構(gòu)演進論在“技術(shù)雷達”里,微服務(wù)最早以“Micro-service”,而非“MicroService” 出 現(xiàn) , 從 架 構(gòu) 演 進 的 角 度 來 說 , 微 服 務(wù) 是 從SOA(Services Oriented Architecture,面向服務(wù)架構(gòu))發(fā)展演進而來的,是更先進的細粒度的SOA實現(xiàn)方式。
SOA和微服務(wù)本質(zhì)上都是分布式的架構(gòu)模式,但是傳統(tǒng)的基于ESB(Enterprise Service Bus,企業(yè)服務(wù)總線)的SOA架構(gòu)和微服務(wù)架 構(gòu) 要 解 決 的 問 題 其 實 并 不 相 同 。在 J2EE ( Java 2 PlatformEnterprise Edition,Java企業(yè)級應(yīng)用平臺)的企業(yè)架構(gòu)中,ESB在異構(gòu)系統(tǒng)的集成方面發(fā)揮功能。而微服務(wù)架構(gòu)更多地采用輕量級的通信協(xié)議,圍繞業(yè)務(wù)進行服務(wù)拆分、解耦、復(fù)用、隔離,實現(xiàn)細粒度的分布式服務(wù)構(gòu)建和管理。
微服務(wù)架構(gòu)對傳統(tǒng)SOA架構(gòu)最大的改變是強化端點(Endpoints)和弱化通道(Dumb Pipe),拋棄了ESB過度復(fù)雜的業(yè)務(wù)規(guī)則、編排、消息路由等功能。微服務(wù)強調(diào)服務(wù)的自治性,服務(wù)應(yīng)用從一開始就可以獨立地進行開發(fā)和演進。另外,微服務(wù)間的通信應(yīng)盡可能地輕量化,微服務(wù)在SOA的基礎(chǔ)上更加關(guān)注細粒度服務(wù)的獨立性、可擴展性、伸縮性和容錯性等。
最佳實踐論
微服務(wù)的另外一種定義來源于架構(gòu)大師們多年的最佳實踐總結(jié),Martin Fowler于2014年在他自己的博文中首次提出微服務(wù)的定義,概括總結(jié)如下:
“微服務(wù)架構(gòu)”是一種將單個應(yīng)用程序作為一套小型服務(wù)開發(fā)的方法,服務(wù)之間相互協(xié)調(diào)、互相配合,每個服務(wù)運行在其獨立的進程中,并以輕量級機制(通常采用HTTP協(xié)議)進行交互通信。這些服務(wù)是圍繞業(yè)務(wù)功能構(gòu)建的,它們可以通過全自動部署機制進行獨立部署。微服務(wù)采用去中心化的管理理念、可以用不同的編程語言編寫,并使用不同的數(shù)據(jù)存儲技術(shù)。總結(jié)起來微服務(wù)有以下幾大特征:
● 通過服務(wù)組件化。
● 圍繞業(yè)務(wù)能力組織。
● 是產(chǎn)品不是項目。
● 智能端點和啞管道。● 去中心化治理。
● 去中心化數(shù)據(jù)管理。
● 基礎(chǔ)設(shè)施自動化。
● 為失效設(shè)計。
● 演進式設(shè)計。
可以看出,Martin Fowler試圖將微服務(wù)定義為一個一般化的架構(gòu)“最佳實踐”集合。微服務(wù)的這些特征也很好地融合了領(lǐng)域驅(qū)動設(shè)計、自動化、DevOps、容器等先進的技術(shù)實踐、架構(gòu)理念和方法論。
與此同時,微服務(wù)的架構(gòu)風(fēng)格被描述為一種可以實現(xiàn)業(yè)務(wù)功能松散 耦 合 ( Loosely Coupled ) 的 、 具 備 一 定 服 務(wù) 邊 界 ( BoundedContext)的服務(wù)集合。這種架構(gòu)風(fēng)格使得大型、復(fù)雜的應(yīng)用實現(xiàn)CI/CD(Continuous Integration/Continuous Delivery,持續(xù)集成/持續(xù)交付)成為可能,并且技術(shù)棧可以獨立發(fā)展演進。
歸根結(jié)底,微服務(wù)本質(zhì)上還是一種分布式系統(tǒng)架構(gòu)。它強調(diào)系統(tǒng)應(yīng)該按照業(yè)務(wù)領(lǐng)域邊界做細粒度的拆分和部署;它剔除了SOA中的企業(yè)服務(wù)總線,使用輕量級、標準化的HTTP(REST API)協(xié)議進行交互集成。微服務(wù)架構(gòu)有利于應(yīng)用應(yīng)對業(yè)務(wù)的快速變化和規(guī)模化發(fā)展,通過對軟件復(fù)雜性的有機治理,使系統(tǒng)易于有序化重構(gòu)及擴展。
?微服務(wù)與云原生
云原生(Cloud Native)可以理解為一系列技術(shù)及思想的集合,既包含微服務(wù)、容器等技術(shù)載體,也包含DevOps(開發(fā)與運維的合體)的組織形式和溝通文化。企業(yè)采用基于云原生的架構(gòu)進行構(gòu)建、運行、管理現(xiàn)代應(yīng)用的技術(shù)模式能夠平滑而快速地將業(yè)務(wù)遷移到云上,享受云的高效性和按需伸縮的能力。
云原生的提出
“效率”:天下武功、唯快不破,面對激烈的市場競爭,企業(yè)把服務(wù)產(chǎn)品快速交付的能力作為制勝的法寶。云原生架構(gòu)的提出與應(yīng)用的快速開發(fā)、快速交付的能力密不可分。作為對比,與傳統(tǒng)企業(yè)為應(yīng)用提供和部署軟件按周、按月來計算,互聯(lián)網(wǎng)公司經(jīng)常在一天內(nèi)可以進行上百次發(fā)布。這種快速迭代和部署是建立在云基礎(chǔ)設(shè)施和自動化持續(xù)交付能力之上的。
“彈性”:隨著用戶規(guī)模和需求的增長,我們的應(yīng)用需要能夠快速擴展,提高服務(wù)能力。傳統(tǒng)企業(yè)依靠購買硬件的方式來提升和擴展服務(wù)能力,而云原生架構(gòu)可以通過虛擬化的技術(shù)實現(xiàn)按需擴展,動態(tài)地擴展服務(wù)實例以滿足計算、存儲、服務(wù)資源的彈性需求。
“可靠”:服務(wù)僅僅做到快速交付和彈性擴展是遠遠不夠的,還需要兼顧系統(tǒng)的穩(wěn)定性、可用性、持久性,而這種特征與服務(wù)的容錯能力、故障隔離能力、可視化能力、系統(tǒng)快速恢復(fù)能力緊密相關(guān),也就是系統(tǒng)所謂的“反脆弱”能力。現(xiàn)代應(yīng)用如果想在這些“非功能需求”上得到保障,就需要采用云原生技術(shù)和云原生基礎(chǔ)設(shè)施保障服務(wù)的高可用性。
云原生與微服務(wù)
“云原生”的本質(zhì)和目標是一種應(yīng)用模式,它能夠幫助企業(yè)快速、持續(xù)、可靠、規(guī)模化地交付軟件,其中關(guān)鍵的支撐組件總結(jié)如下。
● 容器化的抽象封裝:標準化代碼和服務(wù),每個部分(應(yīng)用程序、進程等)都封裝在自己的容器中,有助于復(fù)用和資源隔離。實現(xiàn)方式代表有Docker、rkt。
● 動態(tài)管理:通過集中式的編排和調(diào)度系統(tǒng)來動態(tài)管理及優(yōu)化資源。實現(xiàn)方式代表有Kubernetes、Swarm和Mesos。
● 面向微服務(wù):應(yīng)用程序基于微服務(wù)架構(gòu),顯著提升開發(fā)效率、提高架構(gòu)演進的靈活性和可維護性。實現(xiàn)方式代表有SpringBoot、Spring Cloud。
從云原生的代表組件可以看出,云原生的主要組成技術(shù)包括容器、服務(wù)編排管理和微服務(wù)技術(shù)。云原生可以說是從概念上統(tǒng)一了構(gòu)建、交付、運行現(xiàn)代應(yīng)用的最佳實踐集合。在運行環(huán)境上,強調(diào)應(yīng)用程序的運行環(huán)境是以容器和Kubernetes為主的云基礎(chǔ)設(shè)施;在流程管理上,主要配合使用持續(xù)集成、持續(xù)發(fā)布以及DevOps能力;在軟件開發(fā)上,基于微服務(wù)架構(gòu)構(gòu)建現(xiàn)代應(yīng)用程序和軟件。雖然微服務(wù)架構(gòu)也可以運行在傳統(tǒng)虛擬機或物理機上,但是微服務(wù)架構(gòu)的最佳運行載體是以容器為代表的云原生環(huán)境。
云原生架構(gòu)
云原生架構(gòu)的思想和特征可以通過云原生12要素表達,我們在后面的章節(jié)中會詳細講解12要素的主要內(nèi)容,從實踐的角度,作為最早踐行Cloud Native的Netflix,在云原生架構(gòu)的目標、原則和措施等方面進行了詳盡描述:
● 不可變性。使用易失效的基礎(chǔ)設(shè)施來構(gòu)建高敏捷(HighlyAgile)、高可用(Highly Available)服務(wù)。其目的是為了提高伸縮性(Scalability)、可用性(Availability)、敏捷性(Agility)、效率(Efficiency)。
● 關(guān)注點分離。通過微服務(wù)架構(gòu)實現(xiàn)關(guān)注點分離,避免出現(xiàn)“決策瓶頸”。實際上,實現(xiàn)關(guān)注點分離有助于提升系統(tǒng)的可擴展性和可用性。
● 反脆弱性。默認所有的依賴都可能失效,在設(shè)計階段就要考慮如何處理這些失效問題。為了讓系統(tǒng)更強壯,Netflix會不斷地攻擊自己、主動破壞,以提醒技術(shù)人員系統(tǒng)要進行反脆弱性設(shè)計。
● 高度信任的組織。Netflix基于信任的管理風(fēng)格,相信自己的員工可以做出正確的決策,倡導(dǎo)給基層員工自主決策權(quán)。
● 共享。在Netflix,管理是比較透明的,共享能夠促進技術(shù)人員的成長。
結(jié)合云原生的特征和云原生的架構(gòu)實踐,我們將云原生架構(gòu)圖描述如下(見下圖),從架構(gòu)層面來說,Cloud Native是構(gòu)建在不可變基礎(chǔ)設(shè)施(以容器技術(shù)為代表)和以微服務(wù)架構(gòu)技術(shù)為基礎(chǔ)的分布式系統(tǒng)之上的,這里的云包括私有云、公有云和混合云。微服務(wù)架構(gòu)作為云原生概念的核心組成部分,本質(zhì)上就是保證我們更好地適應(yīng)云環(huán)境下的高效開發(fā)和運維。

云原生成熟度
對于系統(tǒng)采用云原生架構(gòu)的程度,我們可以用云原生成熟度模型進行精確的等級劃分和判斷,成熟度模型一共包含4個等級(從Level0到Level 3成熟度逐級遞增),從這些等級劃分可以看到開發(fā)和運行應(yīng)用程序的原則、模式和具體技術(shù)實踐。如果你所在公司正在進行微服務(wù)的改造或者云原生架構(gòu)的遷移,可以參考如下表所示的成熟度模型正確地評估你所在組織的云原生架構(gòu)等級。


本文給大家講解的內(nèi)容是微服務(wù)架構(gòu)深度解析微服務(wù)定義是什么?微服務(wù)與云原生有何關(guān)聯(lián)?
下篇文章給大家講解的是微服務(wù)架構(gòu)深度解析:微服務(wù)的主要特性有哪些?
覺得文章不錯的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;
感謝大家的支持!
本文就是愿天堂沒有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號里找我,我等你哦。
