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