一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - 編程技術(shù) - 如何更深入的給女朋友解釋什么是微服務(wù)?

如何更深入的給女朋友解釋什么是微服務(wù)?

2021-03-09 23:39淺羽的IT小屋淺羽Eric 編程技術(shù)

之前的一篇文章給大家介紹過了何為微服務(wù):圖文詳解:如何給女朋友解釋什么是微服務(wù)?但是身為一名積極好學(xué)的前端女朋友還是會經(jīng)常問我,微服務(wù)那么多理念,你跟我講完,我就忘了,可以再給我講講它的思想到底是啷個(gè)回事

如何更深入的給女朋友解釋什么是微服務(wù)?

之前的一篇文章給大家介紹過了何為微服務(wù):圖文詳解:如何給女朋友解釋什么是微服務(wù)?但是身為一名積極好學(xué)的前端女朋友還是會經(jīng)常問我,微服務(wù)那么多理念,你跟我講完,我就忘了,可以再給我講講它的思想到底是啷個(gè)回事嘛~看在她這么刻苦奮進(jìn)的情況下,加之我們公司也做了許多微服務(wù)的項(xiàng)目,對此還算有所研究。今天就繼續(xù)為大家?guī)砩顚哟蔚年P(guān)于微服務(wù)架構(gòu)的講解:

在學(xué)習(xí)微服務(wù)之前,我們先來回顧下單體架構(gòu)的模式。

單體架構(gòu)

概念

單體架構(gòu)也稱之為單體系統(tǒng)或者是單體應(yīng)用。就是一種把系統(tǒng)中所有的功能、模塊耦合在一個(gè)應(yīng)用中的架構(gòu)方式。

特點(diǎn)

單體架構(gòu)的特點(diǎn)主要有:

1. 打包成一個(gè)獨(dú)立的單元(導(dǎo)成一個(gè)唯一的jar包或者是war包)

2. 以一個(gè)進(jìn)程的方式來運(yùn)行

如何更深入的給女朋友解釋什么是微服務(wù)?

單體架構(gòu)

優(yōu)點(diǎn)

  • 易于開發(fā): 開發(fā)方式簡單,IDE 支持好,方便運(yùn)行和調(diào)試。
  • 易于測試: 所有功能運(yùn)行在一個(gè)進(jìn)程中,一旦進(jìn)程啟動,便可以進(jìn)行系統(tǒng)測試。
  • 易于部署: 只需要將打好的一個(gè)軟件包發(fā)布到服務(wù)器即可。
  • 易于水平伸縮: 只需要創(chuàng)建一個(gè)服務(wù)器節(jié)點(diǎn),配置好運(yùn)行時(shí)環(huán)境,再將軟件包發(fā)布到新服務(wù)器節(jié)點(diǎn)即可運(yùn)行程序(當(dāng)然也需要采取分發(fā)策略保證請求能有效地分發(fā)到新節(jié)點(diǎn))。

缺點(diǎn)

維護(hù)成本大: 當(dāng)應(yīng)用程序的功能越來越多、團(tuán)隊(duì)越來越大時(shí),溝通成本、管理成本顯著增加;當(dāng)出現(xiàn) bug 時(shí),可能引起 bug 的原因組合越來越多,導(dǎo)致分析、定位和修復(fù)的成本增加;并且在對全局功能缺乏深度理解的情況下,容易在修復(fù) bug 時(shí)引入新的 bug。

  • 持續(xù)交付周期長: 構(gòu)建和部署時(shí)間會隨著功能的增多而增加,任何細(xì)微的修改都會觸發(fā)部署流水線。
  • 新人培養(yǎng)周期長: 新成員了解背景、熟悉業(yè)務(wù)和配置環(huán)境的時(shí)間越來越長。
  • 技術(shù)選型成本高: 單塊架構(gòu)傾向于采用統(tǒng)一的技術(shù)平臺或方案來解決所有問題,如果后續(xù)想引入新的技術(shù)或框架,成本和風(fēng)險(xiǎn)都很大。
  • 可擴(kuò)展性差: 隨著功能的增加,垂直擴(kuò)展的成本將會越來越大;而對于水平擴(kuò)展而言,因?yàn)樗写a都運(yùn)行在同一個(gè)進(jìn)程,沒辦法做到針對應(yīng)用程序的部分功能做獨(dú)立的擴(kuò)展

采用過時(shí)的單體架構(gòu)的話,就會使得公司雇傭有潛力的開發(fā)者很困難,應(yīng)用無法擴(kuò)展,可靠性很低,那么我們再來看看微服務(wù)架構(gòu)是怎樣的呢?

微服務(wù)架構(gòu)

概念

微服務(wù)是一種架構(gòu)風(fēng)格。一個(gè)大型的復(fù)雜軟件應(yīng)用,由一個(gè)或多個(gè)微服務(wù)組成。系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署,各個(gè)微服務(wù)之間是松耦合的。每個(gè)微服務(wù)僅關(guān)注于完成一件任務(wù)并且能夠很好的完成該任務(wù)。

如何更深入的給女朋友解釋什么是微服務(wù)?

架構(gòu)核心

核心部分

  • 網(wǎng)關(guān)集群:數(shù)據(jù)的聚合、實(shí)現(xiàn)對接入客戶端的身份認(rèn)證、防報(bào)文重放與防數(shù)據(jù)篡改、功能調(diào)用的業(yè)務(wù)鑒權(quán)、響應(yīng)數(shù)據(jù)的脫敏、流量與并發(fā)控制等。
  • 業(yè)務(wù)集群:一般情況下移動端訪問和瀏覽器訪問的網(wǎng)關(guān)需要隔離,防止業(yè)務(wù)耦合。
  • Local Cache:由于客戶端訪問業(yè)務(wù)可能需要調(diào)用多個(gè)服務(wù)聚合,所以本地緩存有效的降低了服務(wù)調(diào)用的頻次,同時(shí)也提示了訪問速度。本地緩存一般使用自動過期方式,業(yè)務(wù)場景中允許有一定的數(shù)據(jù)延時(shí)。
  • 服務(wù)層:原子服務(wù)層,實(shí)現(xiàn)基礎(chǔ)的增刪改查功能,如果需要依賴其他服務(wù)需要在 Service 層主動調(diào)用。
  • Remote Cache:訪問 DB 前置一層分布式緩存,減少 DB 交互次數(shù),提升系統(tǒng)的TPS。
  • DAL:數(shù)據(jù)訪問層,如果單表數(shù)據(jù)量過大則需要通過 DAL 層做數(shù)據(jù)的分庫分表處理。
  • MQ:消息隊(duì)列用來解耦服務(wù)之間的依賴,異步調(diào)用可以通過 MQ 的方式來執(zhí)行。
  • 數(shù)據(jù)庫主從:服務(wù)化過程中必經(jīng)的階段,用來提升系統(tǒng)的 TPS

架構(gòu)

常見的架構(gòu)有:

1. 客戶端與服務(wù)端的

2. 基于組件模型的架構(gòu)(EJB)

3. 分層架構(gòu)(MVC)

4. 面向服務(wù)架構(gòu)(SOA)

特點(diǎn)

1. 系統(tǒng)是由多個(gè)服務(wù)構(gòu)成

2. 每個(gè)服務(wù)可以單獨(dú)獨(dú)立部署

3. 每個(gè)服務(wù)之間是松耦合的。服務(wù)內(nèi)部是高內(nèi)聚的,外部是低耦合的。高內(nèi)聚就是每個(gè)服務(wù)只關(guān)注完成一個(gè)功能。

優(yōu)點(diǎn)

  • 邊界清晰:比如說一個(gè)電商平臺,我們以前是部署在一臺服務(wù)器上,所有的代碼打成一個(gè)war包。現(xiàn)在,我們可以給它拆分開:用戶服務(wù),積分服務(wù),支付服務(wù),倉儲服務(wù),信息服務(wù),地圖服務(wù)等等,每一個(gè)微服務(wù)只關(guān)注一個(gè)特定的業(yè)務(wù)功能,這樣的話開發(fā)和維護(hù)單個(gè)服務(wù)都比較簡單,因?yàn)樗倪吔缱銐蚯逦瑯I(yè)務(wù)也足夠清晰,用戶服務(wù),只做好用戶的事情就好了,相較于之前的大而全的單體服而言,每個(gè)微服務(wù)的代碼量也比較少。
  • 效率高:單體服務(wù)隨著代碼量變得越來越多,比如說百萬行級別的代碼,僅僅編譯一次應(yīng)用可能就需要花費(fèi)很久,但是現(xiàn)在,如果一個(gè)地方有問題,比如說支付模塊有問題,只需要單獨(dú)修改支付模塊,修改完支付模塊之后,單獨(dú)測試支付功能,單獨(dú)部署支付模塊就可以了,而不會影響整體的部署速度。
  • 技術(shù)棧不受限制:每一個(gè)服務(wù)可以使用不同的技術(shù)棧來實(shí)現(xiàn),由于不同的服務(wù)之間是通過restful API來通信的,所以每個(gè)服務(wù)可以使用不同的技術(shù)框架,使用不同的存儲庫來實(shí)現(xiàn);
  • 拓展性更強(qiáng):隨著業(yè)務(wù)的發(fā)展,用戶量變得越來越多,或者說訂單量猛增,這時(shí)我們可以專門去優(yōu)化這個(gè)訂單服務(wù),給這個(gè)訂單服務(wù)提供更高配置的機(jī)器,而其他并沒有遇到瓶頸的業(yè)務(wù),比如說短信服務(wù),我們可以暫時(shí)不用動。

缺點(diǎn)

  • 運(yùn)維成本過高:以前只需要打個(gè) war 包扔在 tomcat 下面就可以了,但現(xiàn)在,我們可能需要部署幾個(gè)甚至幾十個(gè)微服務(wù),這樣的話,如何保證這幾十甚至上百個(gè)微服務(wù)正常的運(yùn)行和互相通信協(xié)作,這給運(yùn)維帶來了很大的挑戰(zhàn);
  • 分布式系統(tǒng)復(fù)雜:使用微服務(wù)這種架構(gòu),構(gòu)建的是一個(gè)分布式的系統(tǒng),在分布式系統(tǒng)當(dāng)中會引入很多問題,比如說分布式鎖,分布式事務(wù)等等,這個(gè)時(shí)候我們需要對這個(gè)系統(tǒng)的,事務(wù),冪等,網(wǎng)絡(luò)延遲,分區(qū),熔斷,降級等問題都要有一個(gè)妥善的處理和應(yīng)對方案;
  • 通信成本高:由于之前的接口調(diào)用都在同一個(gè)進(jìn)程內(nèi),我需要支付調(diào)用支付方法,需要積分直接調(diào)用添加積分的方法,但現(xiàn)在,由于積分模塊或者支付模塊都被拆成了單獨(dú)的服務(wù),這個(gè)時(shí)候如果再想去調(diào)用的話,就是通過http方式的請求去調(diào)用,這種頻繁的跨服務(wù)通信是有很高的成本的,選擇一個(gè)適合自己業(yè)務(wù)的輕量級低成本的通信方式,也很關(guān)鍵。
  • 服務(wù)拆分難:如何做好微服務(wù)的拆分?這個(gè)是需要我們不斷摸索的,從單體服務(wù)向微服務(wù)架構(gòu)的演進(jìn),它是一個(gè)循序漸進(jìn)的過程,在演進(jìn)的過程中常常會根據(jù)業(yè)務(wù)變化來對微服務(wù)進(jìn)行重構(gòu),甚至是重新劃分,從而讓這個(gè)架構(gòu)更加合理。

架構(gòu)區(qū)別

MVC架構(gòu)

MVC 架構(gòu)就是一個(gè)單體架構(gòu)。我們常使用的技術(shù):Struts2、SpringMVC、Spring、Mybatis等等。

RPC 架構(gòu)

RPC(RemoteProcedureCall):遠(yuǎn)程過程調(diào)用。他一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。我們常使用的技術(shù):Thrift、Hessian等等

實(shí)現(xiàn)原理:首先需要有處理網(wǎng)絡(luò)連接通訊的模塊,負(fù)責(zé)連接建立、管理和消息的傳輸。其次需要有編解碼的模塊,因?yàn)榫W(wǎng)絡(luò)通訊都是傳輸?shù)淖止?jié)碼,需要將我們使用的對象序列化和反序列化。剩下的就是客戶端和服務(wù)器端的部分,服務(wù)器端暴露要開放的服務(wù)接口,客戶調(diào)用服務(wù)接口的一個(gè)代理實(shí)現(xiàn),這個(gè)代理實(shí)現(xiàn)負(fù)責(zé)收集數(shù)據(jù)、編碼并傳輸給服務(wù)器然后等待結(jié)果返回。

SOA 架構(gòu)

SOA(ServiceorientedArchitecture):面向服務(wù)架構(gòu)

ESB(EnterpariseServceBus):企業(yè)服務(wù)總線,服務(wù)中介。主要是提供了一個(gè)服務(wù)于服務(wù)之間的交互。ESB 包含的功能如:負(fù)載均衡,流量控制,加密處理,服務(wù)的監(jiān)控,異常處理,監(jiān)控告急等等。我們常使用的技術(shù):Mule、WSO2

微服務(wù)架構(gòu)

微服務(wù)就是一個(gè)輕量級的服務(wù)治理方案。我們常使用的技術(shù):SpringCloud、dubbo等等。

如何更深入的給女朋友解釋什么是微服務(wù)?

架構(gòu)區(qū)別

微服務(wù)原則

AKF拆分原則

業(yè)界對于可擴(kuò)展的系統(tǒng)架構(gòu)設(shè)計(jì)有一個(gè)樸素的理念,就是:通過加機(jī)器就可以解決容量和可用性問題。

這一理念在“云計(jì)算”概念瘋狂流行的今天,得到了廣泛的認(rèn)可!對于一個(gè)規(guī)模迅速增長的系統(tǒng)而言,容量和性能問題當(dāng)然是首當(dāng)其沖的。但是隨著時(shí)間的向前,系統(tǒng)規(guī)模的增長,除了面對性能與容量的問題外,還需要面對功能與模塊數(shù)量上的增長帶來的系統(tǒng)復(fù)雜性問題以及業(yè)務(wù)的變化帶來的提供差異化服務(wù)問題。而許多系統(tǒng),在架構(gòu)設(shè)計(jì)時(shí)并未充分考慮到這些問題,導(dǎo)致系統(tǒng)的重構(gòu)成為常態(tài),從而影響業(yè)務(wù)交付能力,還浪費(fèi)人力財(cái)力!對此,《可擴(kuò)展的藝術(shù)》一書提出了一個(gè)更加系統(tǒng)的可擴(kuò)展模型——AKF 可擴(kuò)展立方(ScalabilityCube)。這個(gè)立方體中沿著三個(gè)坐標(biāo)軸設(shè)置分別為:X、Y、Z。

Y 軸(功能)——關(guān)注應(yīng)用中功能劃分,基于不同的業(yè)務(wù)拆分

Y 軸擴(kuò)展會將龐大的整體應(yīng)用拆分為多個(gè)服務(wù)。每個(gè)服務(wù)實(shí)現(xiàn)一組相關(guān)的功能,如訂單管理、客戶管理等。在工程上常見的方案是服務(wù)化架構(gòu)(SOA)。比如對于一個(gè)電子商務(wù)平臺,我們可以拆分成不同的服務(wù),組成下面這樣的架構(gòu):

如何更深入的給女朋友解釋什么是微服務(wù)?

服務(wù)化架構(gòu) SOA

但通過觀察上圖容易發(fā)現(xiàn),當(dāng)服務(wù)數(shù)量增多時(shí),服務(wù)調(diào)用關(guān)系變得復(fù)雜。為系統(tǒng)添加一個(gè)新功能,要調(diào)用的服務(wù)數(shù)也變得不可控,由此引發(fā)了服務(wù)管理上的混亂。所以,一般情況下,需要采用服務(wù)注冊的機(jī)制形成服務(wù)網(wǎng)關(guān)來進(jìn)行服務(wù)治理。系統(tǒng)的架構(gòu)將變成下圖所示:

如何更深入的給女朋友解釋什么是微服務(wù)?

服務(wù)網(wǎng)關(guān)治理

X 軸(水平擴(kuò)展)——關(guān)注水平擴(kuò)展,也就是”加機(jī)器解決問題”

X 軸擴(kuò)展與我們前面樸素理念是一致的,通過絕對平等地復(fù)制服務(wù)與數(shù)據(jù),以解決容量和可用性的問題。其實(shí)就是將微服務(wù)運(yùn)行多個(gè)實(shí)例,做集群加負(fù)載均衡的模式。為了提升單個(gè)服務(wù)的可用性和容量,對每一個(gè)服務(wù)進(jìn)行X軸擴(kuò)展劃分。

如何更深入的給女朋友解釋什么是微服務(wù)?

X 軸(水平擴(kuò)展)

Z 軸(數(shù)據(jù)分區(qū))——關(guān)注服務(wù)和數(shù)據(jù)的優(yōu)先級劃分,如按地域劃分

Z 軸擴(kuò)展通常是指基于請求者或用戶獨(dú)特的需求,進(jìn)行系統(tǒng)劃分,并使得劃分出來的子系統(tǒng)是相互隔離但又是完整的。工程領(lǐng)域常見的Z軸擴(kuò)展有以下兩種方案:

單元化架構(gòu):在分布式服務(wù)設(shè)計(jì)領(lǐng)域,一個(gè)單元(Cell)就是滿足某個(gè)分區(qū)所有業(yè)務(wù)操作的自包含閉環(huán)。如上面我們說到的Y軸擴(kuò)展的SOA架構(gòu),客戶端對服務(wù)端節(jié)點(diǎn)的選擇一般是隨機(jī)的,但是,如果在此加上Z軸擴(kuò)展,那服務(wù)節(jié)點(diǎn)的選擇將不再是隨機(jī)的了,而是每個(gè)單元自成一體。如下圖:

如何更深入的給女朋友解釋什么是微服務(wù)?

PC 用戶

如何更深入的給女朋友解釋什么是微服務(wù)?

移動端用戶

數(shù)據(jù)分區(qū):為了性能數(shù)據(jù)安全上的考慮,我們將一個(gè)完整的數(shù)據(jù)集按一定的維度劃分出不同的子集。一個(gè)分區(qū)(Shard),就是是整體數(shù)據(jù)集的一個(gè)子集。比如用尾號來劃分用戶,那同樣尾號的那部分用戶就可以認(rèn)為是一個(gè)分區(qū)。數(shù)據(jù)分區(qū)為一般包括以下幾種數(shù)據(jù)劃分的方式:

  • 數(shù)據(jù)類型 如:業(yè)務(wù)類型
  • 數(shù)據(jù)范圍 如:時(shí)間段,用戶ID
  • 數(shù)據(jù)熱度 如:用戶活躍度,商品熱度
  • 按讀寫分 如:商品描述,商品庫存

前后端分離原則

何為前后端分離?前后端本來不就分離么?這要從尷尬的jsp講起。分工精細(xì)化從來都是蛋糕做大的原則,多個(gè)領(lǐng)域工程師最好在不需要接觸其他領(lǐng)域知識的情況下合作,才可能使效率越來越高,維護(hù)也會變得簡單。jsp 的模板技術(shù)融合了 html 和 java 代碼,使得傳統(tǒng) MVC 開發(fā)中的前后端在這里如膠似漆,前端做好頁面,后端轉(zhuǎn)成模板,發(fā)現(xiàn)問題再找前端,前端又看不懂 java 代碼……前后端分離的目的就是將這尷尬局面打破。

如何更深入的給女朋友解釋什么是微服務(wù)?

前后端分離

前后端分離原則,簡單來講就是前端和后端的代碼分離,我們推薦的模式是最好采用物理分離的方式部署,進(jìn)一步促使更徹底的分離。如果繼續(xù)直接使用服務(wù)端模板技術(shù),如:jsp,把 java、js、html、css 都堆到一個(gè)頁面里,稍微復(fù)雜一點(diǎn)的頁面就無法維護(hù)了。

如何更深入的給女朋友解釋什么是微服務(wù)?

分離原則

這種分離方式有幾個(gè)好處:

1. 前后端技術(shù)分離,可以由各自的專家來對各自的領(lǐng)域進(jìn)行優(yōu)化,這樣前端的用戶體驗(yàn)優(yōu)化效果更好。

2. 分離模式下,前后端交互界面更清晰,就剩下了接口模型,后端的接口簡潔明了,更容易維護(hù)

3. 前端多渠道集成場景更容易實(shí)現(xiàn),后端服務(wù)無需變更,采用統(tǒng)一的數(shù)據(jù)和模型,可以支持多個(gè)前端:例如:微信 h5 前端、PC 前端、安卓前端、IOS 前端

無狀態(tài)服務(wù)

對于無狀態(tài)服務(wù),首先說一下什么是狀態(tài):如果一個(gè)數(shù)據(jù)需要被多個(gè)服務(wù)共享,才能完成一筆交易,那么這個(gè)數(shù)據(jù)被稱為狀態(tài)。進(jìn)而依賴這個(gè)“狀態(tài)”數(shù)據(jù)的服務(wù)被稱為有狀態(tài)服務(wù),反之稱為無狀態(tài)服務(wù)。

如何更深入的給女朋友解釋什么是微服務(wù)?

無狀態(tài)服務(wù)

那么這個(gè)無狀態(tài)服務(wù)原則并不是說在微服務(wù)架構(gòu)里就不允許存在狀態(tài),表達(dá)的真實(shí)意思是要把有狀態(tài)的業(yè)務(wù)服務(wù)改變?yōu)闊o狀態(tài)的計(jì)算類服務(wù),那么狀態(tài)數(shù)據(jù)也就相應(yīng)的遷移到對應(yīng)的“有狀態(tài)數(shù)據(jù)服務(wù)”中。

場景說明:例如我們以前在本地內(nèi)存中建立的數(shù)據(jù)緩存、Session 緩存,到現(xiàn)在的微服務(wù)架構(gòu)中就應(yīng)該把這些數(shù)據(jù)遷移到分布式緩存中存儲,讓業(yè)務(wù)服務(wù)變成一個(gè)無狀態(tài)的計(jì)算節(jié)點(diǎn)。遷移后,就可以做到按需動態(tài)伸縮,微服務(wù)應(yīng)用在運(yùn)行時(shí)動態(tài)增刪節(jié)點(diǎn),就不再需要考慮緩存數(shù)據(jù)如何同步的問題。

RestFul 的通訊風(fēng)格

原則來講本來應(yīng)該是個(gè)“無狀態(tài)通信原則”

如何更深入的給女朋友解釋什么是微服務(wù)?

無狀態(tài)通信

在這里我們直接推薦一個(gè)實(shí)踐優(yōu)選的 Restful 通信風(fēng)格,因?yàn)樗泻芏嗪锰帲?/p>

1. 無狀態(tài)協(xié)議 HTTP,具備先天優(yōu)勢,擴(kuò)展能力很強(qiáng)。例如需要安全加密,有現(xiàn)成的成熟方案HTTPS即可。

2. JSON 報(bào)文序列化,輕量簡單,人與機(jī)器均可讀,學(xué)習(xí)成本低,搜索引擎友好。

3. 語言無關(guān),各大熱門語言都提供成熟的 RestfulAPI 框架,相對其他的一些 RPC 框架生態(tài)更完善。

通信

服務(wù)通信

WebService、WCF、WebAPI,以及 ASHX,ASPX。

  • 主動觸發(fā)
  • 數(shù)據(jù)序列化傳遞
  • 跨平臺。
  • 跨語言
  • Http 穿透防火墻。

進(jìn)程通信

  • Net Remoting:Net 平臺督郵的,不支持跨平臺。
  • gRPC:高性能、開源和通用 RPC框架,面向服務(wù)端和移動端,基于 HTTP/2 設(shè)計(jì),推薦使用。
如何更深入的給女朋友解釋什么是微服務(wù)?

WebService

注冊中心 Eureka

注冊中心主要提供三個(gè)核心功能:

1. 服務(wù)注冊

服務(wù)提供者啟動時(shí),會通過 Eureka Client 向 Eureka Server 注冊信息,Eureka Server 會存儲該服務(wù)的信息,Eureka Server 內(nèi)部有二層緩存機(jī)制來維護(hù)整個(gè)注冊表

2. 提供注冊表

服務(wù)消費(fèi)者在調(diào)用服務(wù)時(shí),如果 Eureka Client 沒有緩存注冊表的話,會從 Eureka Server 獲取最新的注冊表

3. 同步狀態(tài)

Eureka Client 通過注冊、心跳機(jī)制和 Eureka Server 同步當(dāng)前客戶端的狀態(tài)。

如何更深入的給女朋友解釋什么是微服務(wù)?

Eureka 流程

網(wǎng)關(guān) Zuul

API 網(wǎng)關(guān)是一個(gè)更為智能的應(yīng)用服務(wù)器,它的存在就像是整個(gè)微服務(wù)架構(gòu)系統(tǒng)的門面,所有的外部客戶端訪問都需要經(jīng)過它來進(jìn)行調(diào)度和過濾。除了需要實(shí)現(xiàn)請求路由,負(fù)載均衡及校驗(yàn)過濾等功能外還需要與服務(wù)治理框架的結(jié)合,請求轉(zhuǎn)發(fā)時(shí)的熔斷機(jī)制,服務(wù)的聚合等一系列高級功能。主要核心功能:

  • 服務(wù)路由轉(zhuǎn)發(fā)
  • 鑒權(quán)校驗(yàn)過濾
  • 熔斷限制保護(hù)
如何更深入的給女朋友解釋什么是微服務(wù)?

網(wǎng)關(guān)

認(rèn)證&授權(quán)

現(xiàn)在的應(yīng)用開發(fā)層出不窮,基于瀏覽器的網(wǎng)頁應(yīng)用,基于微信的公眾號、小程序,基于 IOS、Android 的 App,基于 Windows 系統(tǒng)的桌面應(yīng)用和 UWP 應(yīng)用等等,這么多種類的應(yīng)用,就給應(yīng)用的開發(fā)帶來的挑戰(zhàn),我們除了分別實(shí)現(xiàn)各個(gè)應(yīng)用外,我們還要考慮各個(gè)應(yīng)用之間的交互,通用模塊的提煉,其中身份的認(rèn)證和授權(quán)就是每個(gè)應(yīng)用必不可少的的一部分。而現(xiàn)在的互聯(lián)網(wǎng),對于信息安全要求又十分苛刻,所以一套統(tǒng)一的身份認(rèn)證和授權(quán)就至關(guān)重要。

IdentityServer4 就是這樣一個(gè)框架,IdentityServer4 是為 ASP.NET CORE 量身定制的實(shí)現(xiàn)了 OpenId Connect 和 OAuth2.0 協(xié)議的認(rèn)證授權(quán)中間件。

如何更深入的給女朋友解釋什么是微服務(wù)?

IdentityServer4

分布式日志

一般我們需要進(jìn)行日志分析場景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規(guī)模較大也就是日志量多而復(fù)雜的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理,所有服務(wù)器上的日志收集匯總。常見解決思路是建立集中式日志收集系統(tǒng),將所有節(jié)點(diǎn)上的日志統(tǒng)一收集,管理,訪問。

大型系統(tǒng)通常都是一個(gè)分布式部署的架構(gòu),不同的服務(wù)模塊部署在不同的服務(wù)器上,問題出現(xiàn)時(shí),大部分情況需要根據(jù)問題暴露的關(guān)鍵信息,定位到具體的服務(wù)器和服務(wù)模塊,構(gòu)建一套集中式日志系統(tǒng),可以提高定位問題的效率。

Exceptionless 是一個(gè)開源的實(shí)時(shí)的日志收集框架,它可以應(yīng)用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技術(shù)棧的應(yīng)用程序中,并且提供了 Rest 接口可以應(yīng)用在 Javascript,Node.js 中。它將日志收集變得簡單易用并且不需要了解太多的相關(guān)技術(shù)細(xì)節(jié)及配置。在以前,我們做日志收集大多使用 Log4net,Nlog 等框架,在應(yīng)用程序變得復(fù)雜并且集群的時(shí)候,可能傳統(tǒng)的方式已經(jīng)不是很好的適用了,因?yàn)槭占鱾€(gè)日志并且分析他們將變得麻煩而且浪費(fèi)時(shí)間。

現(xiàn)在 Exceptionless 團(tuán)隊(duì)給我們提供了一個(gè)更好的框架來做這件事情,我認(rèn)為這是非常偉大并且有意義的,感謝他們。

ELK是三個(gè)開源軟件的縮寫,分別為:Elasticsearch 、 Logstash 以及 Kibana , 它們都是開源軟件。不過現(xiàn)在還新增了一個(gè) Beats,它是一個(gè)輕量級的日志收集處理工具(Agent),Beats 占用資源少,適合于在各個(gè)服務(wù)器上搜集日志后傳輸給 Logstash,官方也推薦此工具,目前由于原本的 ELK Stack 成員中加入了 Beats 工具所以已改名為 Elastic Stack,推薦使用。

如何更深入的給女朋友解釋什么是微服務(wù)?

ELK

配置中心 ConfigSpring

Config 首推基于 git 的管理方式,提供了兩個(gè)管理維度,一個(gè)是 label(即 branch),一個(gè)是 profile。主要核心功能:

  • 業(yè)務(wù)配置
  • 功能開關(guān)
  • 服務(wù)配置
如何更深入的給女朋友解釋什么是微服務(wù)?

Spring Config

異步隊(duì)列 MQMQ

大家都熟悉,現(xiàn)在主流的MQ有rabbitMQ,rocketMQ,kafka。想要了解更多關(guān)于 rabbitMQ 和 kafka 的知識可以在這兩篇文章里查看:

圖文詳解:阿里寵兒【小兔】RabbitMQ的養(yǎng)成攻略

圖文詳解:Kafka到底有哪些秘密讓我對它情有獨(dú)鐘呢?

核心功能:削峰填谷

如何更深入的給女朋友解釋什么是微服務(wù)?

流量削峰

容錯限流 Hystrix

它設(shè)計(jì)用來當(dāng)分布式系統(tǒng)發(fā)生不可避免的異常的時(shí)候去隔離當(dāng)前服務(wù)和遠(yuǎn)程服務(wù)、系統(tǒng)、三方包的聯(lián)系,防止出現(xiàn)級聯(lián)失敗的情況,從而導(dǎo)致整個(gè)系統(tǒng)雪崩。主要核心功能:

  • 失敗轉(zhuǎn)移和優(yōu)雅降級
  • 實(shí)時(shí)監(jiān)控更改相關(guān)配置
  • 基于線程和信號量的斷路器隔離
如何更深入的給女朋友解釋什么是微服務(wù)?

容錯限流

負(fù)載均衡、服務(wù)調(diào)用

ribbon是一個(gè)負(fù)載均衡客戶端,可以很好的控制htt和tcp的一些行為。

Feign默認(rèn)集成了ribbon。ribbon主要功能是提供客戶端的軟件負(fù)載均衡算法。Ribbon就屬于進(jìn)程內(nèi)負(fù)載均衡,它只是一個(gè)類庫,集成于消費(fèi)方進(jìn)程,消費(fèi)方通過它來獲取到服務(wù)提供方的地址。主要核心功能:負(fù)載均衡

如何更深入的給女朋友解釋什么是微服務(wù)?

負(fù)載均衡

持續(xù)集成 Jenkins

在項(xiàng)目多的時(shí)候,重復(fù)操作極大的浪費(fèi)時(shí)間。如果遇到同一時(shí)間不同項(xiàng)目組打包項(xiàng)目,打包和部署服務(wù)器就要排隊(duì)使用,測試人員只能在等待中浪費(fèi)時(shí)間。為了解決這些問題,選擇尋找合適的持續(xù)集成方案。來自動化完成重復(fù)的步驟。jenkins 還包含了很多插件,比如代碼校驗(yàn)等等。是 CI/CD 的基本技術(shù)。核心功能:

  • 拉取代碼
  • 打包構(gòu)建
  • 將資源送往目標(biāo)服務(wù)器
如何更深入的給女朋友解釋什么是微服務(wù)?

持續(xù)集成

分布式緩存 RedisRedis

是一款基于 ANSI C 語言編寫的,BSD 許可的,日志型 key-value 存儲組件,它的所有數(shù)據(jù)結(jié)構(gòu)都存在內(nèi)存中,可以用作緩存、數(shù)據(jù)庫和消息中間件。核心功能:

  • 內(nèi)存數(shù)據(jù)庫
  • 基于內(nèi)存數(shù)據(jù)庫的各種擴(kuò)展功能
如何更深入的給女朋友解釋什么是微服務(wù)?

分布式緩存 Redis

分布式事務(wù)

分布式事務(wù)的實(shí)現(xiàn)方式主要有:

  • 2PC(two-phase commit protocol,強(qiáng)一致性,沒有可用性)
  • 3PC
  • TCC(Try-Confirm-Cancel)
  • 本地消息表,推薦 RabbitMQ。
  • Saga 模式

本地消息表:MQ分布式事務(wù)—本地消息表—基于消息的一致性。

  • 上有投遞消息
  • 下游獲取消息
  • 上游投遞穩(wěn)定性
  • 下游接受穩(wěn)定性
如何更深入的給女朋友解釋什么是微服務(wù)?

消息隊(duì)列異步

分庫分表 sharding jdbc

Sharding-JDBC定位為輕量級 Java 框架,在 Java 的 JDBC 層提供額外的服務(wù),以 jar 包形式提供服務(wù),無需額外部署和依賴,可以理解為增強(qiáng)版的 JDBC 驅(qū)動,完全兼容 JDBC 和各種 ORM 框架。核心功能:

  • 數(shù)據(jù)分片
  • 讀寫分離
  • 透明的使用jdbc訪問各個(gè)數(shù)據(jù)庫
如何更深入的給女朋友解釋什么是微服務(wù)?

Sharding-JDBC

SpringCloud

SpringCloud,從命名我們就可以知道,Spring Cloud 是大名鼎鼎的 Spring家族的產(chǎn)品, 專注于企業(yè)級開源框架的研發(fā)。

Spring Cloud 自從發(fā)布到現(xiàn)在,仍然在不斷的高速發(fā)展,幾乎考慮了服務(wù)治理的方方面面,開發(fā)起來非常的便利和簡單。

Spring Cloud 架構(gòu)

  • Service Provider: 暴露服務(wù)的提供方。
  • Service Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
  • EureKa Server: 服務(wù)注冊中心和服務(wù)發(fā)現(xiàn)中心。

 如何更深入的給女朋友解釋什么是微服務(wù)?

Spring Cloud 架構(gòu)

支持協(xié)議

Spring Cloud 使用 HTTP 協(xié)議的 REST API。

Spring Cloud 組件運(yùn)行

所有請求都統(tǒng)一通過 API 網(wǎng)關(guān)(Zuul)來訪問內(nèi)部服務(wù)。

網(wǎng)關(guān)接收到請求后,從注冊中心(Eureka)獲取可用服務(wù)。

由 Ribbon 進(jìn)行均衡負(fù)載后,分發(fā)到后端的具體實(shí)例。

微服務(wù)之間通過 Feign 進(jìn)行通信處理業(yè)務(wù)。

如何更深入的給女朋友解釋什么是微服務(wù)?

Spring Cloud 組件運(yùn)行

Dubbo

Dubbo 出生于阿里系,是阿里巴巴服務(wù)化治理的核心框架,并被廣泛應(yīng)用于中國各互聯(lián)網(wǎng)公司;只需要通過 Spring 配置的方式即可完成服務(wù)化,對于應(yīng)用無入侵,設(shè)計(jì)的目的還是服務(wù)于自身的業(yè)務(wù)為主。

雖然阿里內(nèi)部原因 Dubbo 曾經(jīng)一度暫停維護(hù)版本,但是框架本身的成熟度以及文檔的完善程度,完全能滿足各大互聯(lián)網(wǎng)公司的業(yè)務(wù)需求

Dubbo 架構(gòu)

  • Provider:暴露服務(wù)的提供方,可以通過 jar 或者容器的方式啟動服務(wù)。
  • Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
  • Registry:服務(wù)注冊中心和發(fā)現(xiàn)中心。
  • Monitor:統(tǒng)計(jì)服務(wù)和調(diào)用次數(shù),調(diào)用時(shí)間監(jiān)控中心。(Dubbo 的控制臺頁面中可以顯示,目前只有一個(gè)簡單版本。)
  • Container:服務(wù)運(yùn)行的容器。
如何更深入的給女朋友解釋什么是微服務(wù)?

Dubbo 架構(gòu)

支持協(xié)議

Dubbo 使用 RPC 通訊協(xié)議,提供序列化方式如下:

Dubbo:Dubbo 缺省協(xié)議采用單一長連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況。

RMI:RMI 協(xié)議采用 JDK 標(biāo)準(zhǔn)的 java.rmi.* 實(shí)現(xiàn),采用阻塞式短連接和 JDK 標(biāo)準(zhǔn)序列化方式。

Hessian:Hessian 協(xié)議用于集成 Hessian 的服務(wù),Hessian 底層采用 HTTP 通訊,采用 Servlet 暴露服務(wù),Dubbo 缺省內(nèi)嵌 Jetty 作為服務(wù)器實(shí)現(xiàn)。

HTTP:采用 Spring 的 Http Invoker 實(shí)現(xiàn)。

Webservice:基于 CXF 的 frontend-simple 和 transports-http 實(shí)現(xiàn)。

Dubbo 組件運(yùn)行

每個(gè)組件都是需要部署在單獨(dú)的服務(wù)器上,Gateway 用來接受前端請求、聚合服務(wù),并批量調(diào)用后臺原子服務(wù)。每個(gè) Service 層和單獨(dú)的 DB 交互。

如何更深入的給女朋友解釋什么是微服務(wù)?

Dubbo 組件運(yùn)行儲

Gateway:前置網(wǎng)關(guān),具體業(yè)務(wù)操作,Gateway 通過 Dubbo 提供的負(fù)載均衡機(jī)制自動完成。

Service:原子服務(wù),只提供該業(yè)務(wù)相關(guān)的原子服務(wù)。

Zookeeper:原子服務(wù)注冊到 ZK 上。

最后

以上就是關(guān)于微服務(wù)的一些核心知識點(diǎn)了,暫時(shí)就寫到這里了,也是為自己做一下相關(guān)技術(shù)棧的記錄,后續(xù)有時(shí)間會針對每一項(xiàng)技術(shù)進(jìn)行仔細(xì)研究,或者通過實(shí)際項(xiàng)目來展示,盡量通過一個(gè)完整的項(xiàng)目來幫助大家更好的了解這些技術(shù)的落地應(yīng)用。

原文地址:https://mp.weixin.qq.com/s/UdpLJlZ1tM1QpMLrW-pdxw

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本在线视频免费观看 | 日韩毛片网 | 窝窝午夜理伦影院 | 九九九九九九伊人 | 成人福利在线视频免费观看 | 波多野结衣女教师在线观看 | 国产精品久久久免费视频 | 国产成人精品视频一区二区不卡 | 久久影院中文字幕 | 俺去俺去啦最新官网在线 | 国产成人免费观看在线视频 | 乳环调教 | 成人精品亚洲人成在线 | 亚洲欧洲日产国码天堂 | 九九热在线视频 | 亚洲精品福利在线 | 国产欧美日韩精品一区二 | 美女张开大腿让男人桶 | 成人精品一区二区三区中文字幕 | 国产伦精品一区二区三区女 | 91青青国产在线观看免费 | 小草高清视频免费直播 | 国产精品久久久久毛片真精品 | 成年人在线免费观看视频网站 | 亚洲福利一区二区精品秒拍 | 校花被老头夺去第一次动图 | 亚飞与亚基高清国语在线观看 | 美女隐私部位视频网站 | 亚洲一区二区日韩欧美gif | 亚洲 在线 日韩 欧美 | 色老板在线免费视频 | 日本成人高清视频 | 星星动漫在线观看无删减 | 99re精品在线 | 午夜福利体检 | 国产欧美日韩综合二区三区 | 午夜欧美精品久久久久久久久 | 免费理伦片手机在线播放 | 脱女学小内内摸出水网站免费 | 国产精品久久毛片蜜月 | 四虎影院新地址 |