最近幾年,云計(jì)算技術(shù)飛速發(fā)展,各種領(lǐng)域的服務(wù)系統(tǒng)方法也緊隨其后。微服務(wù)架構(gòu)也逐漸引起人們的重視了,那么到底什么是微服務(wù)架構(gòu)模式呢?首先它是一種體系結(jié)構(gòu)模式,并且主張把單個(gè)應(yīng)用分成一組服務(wù),通過這些服務(wù)相協(xié)作,相互協(xié)調(diào),以達(dá)到為用戶提供最終價(jià)值的目的。事實(shí)上每一個(gè)服務(wù)都在其獨(dú)立進(jìn)程中運(yùn)行,通過服務(wù)和服務(wù)之間采用輕量級通信機(jī)制來相互促進(jìn)交流。當(dāng)然每一個(gè)服務(wù)都是圍繞特定的業(yè)務(wù)構(gòu)建而來的,接下來我們說一說微服務(wù)架構(gòu)優(yōu)勢。
微服務(wù)體系結(jié)構(gòu)的本質(zhì),就是使用具有更多明確功能和更多復(fù)雜業(yè)務(wù)的服務(wù)來解決更大的實(shí)際問題。微型服務(wù)體系結(jié)構(gòu)將服務(wù)分開,采用相對獨(dú)立的服務(wù)對各個(gè)方面進(jìn)行管理,彼此使用統(tǒng)一的接口進(jìn)行通信,體系結(jié)構(gòu)變得復(fù)雜,優(yōu)點(diǎn)也十分明顯,微服務(wù)架構(gòu)優(yōu)勢:
一、復(fù)雜性控制:在運(yùn)用分解的同時(shí),避免無限制地累積原來的復(fù)雜性。每個(gè)微服務(wù)都關(guān)注單個(gè)功能,并通過定義良好的接口清楚地描述服務(wù)邊界。因?yàn)檫@些微服務(wù)都很小,復(fù)雜度很低,所以每個(gè)微服務(wù)都可以被一個(gè)小型的開發(fā)團(tuán)隊(duì)完全控制,很容易保持高的維護(hù)性和開發(fā)效率。
微服務(wù)架構(gòu)
二、單獨(dú)部署:因?yàn)槲⒎?wù)有獨(dú)立的運(yùn)行流程,所以每個(gè)微服務(wù)也可以單獨(dú)部署。在更改某些微服務(wù)時(shí),不需要編譯和部署整個(gè)應(yīng)用程序。包含微服務(wù)的應(yīng)用程序相當(dāng)于具有一系列可并行的發(fā)布過程,這使得發(fā)布更高效,同時(shí)減少生產(chǎn)環(huán)境中的風(fēng)險(xiǎn),并最終縮短應(yīng)用程序的交付周期。
靈活的技術(shù)選擇:在微服務(wù)體系結(jié)構(gòu)中,技術(shù)選擇是去中心化的。每一個(gè)團(tuán)隊(duì)都可以根據(jù)自己的服務(wù)需求和行業(yè)發(fā)展現(xiàn)狀,自由選擇最合適的技術(shù)組合。因?yàn)槊恳粋€(gè)微服務(wù)都比較簡單,所以在需要升級技術(shù)棧時(shí)風(fēng)險(xiǎn)就會降低,甚至可以完全重構(gòu)一個(gè)微服務(wù)。
三、容錯(cuò):當(dāng)一個(gè)組態(tài)出現(xiàn)故障時(shí),在傳統(tǒng)的單進(jìn)程結(jié)構(gòu)中,故障很可能在進(jìn)程中擴(kuò)散,并形成應(yīng)用程序無法使用的全局性。在微服務(wù)體系結(jié)構(gòu)中,故障被隔離在一個(gè)服務(wù)內(nèi)。如果設(shè)計(jì)良好,其他服務(wù)可以通過重試、平滑退化等機(jī)制在應(yīng)用層上實(shí)現(xiàn)容錯(cuò)。
四、擴(kuò)展性:單一體系結(jié)構(gòu)應(yīng)用也可以實(shí)現(xiàn)橫向擴(kuò)展,即完整地復(fù)制整個(gè)應(yīng)用到不同節(jié)點(diǎn)。微服務(wù)架構(gòu)在應(yīng)用的不同組件之間存在著擴(kuò)展需求差異的情況下表現(xiàn)出靈活性,因?yàn)槊總€(gè)服務(wù)都可以根據(jù)實(shí)際需求獨(dú)立地?cái)U(kuò)展。
互聯(lián)網(wǎng)高并發(fā)相關(guān)名詞。
頁面瀏覽數(shù)(pageviews)
唯一身份瀏覽量(UniquePageViews)
獨(dú)立訪問者數(shù)量(uniquevisitors)
重復(fù)訪問者數(shù)量(repeatvisitors)
每個(gè)訪問者的頁面瀏覽數(shù)(PageViewsperuser)
五、高并發(fā)
以前我把高并發(fā)解決方案誤認(rèn)為線程或隊(duì)列就可以解決,因?yàn)楦卟l(fā)時(shí)有很多用戶在訪問,導(dǎo)致出現(xiàn)系統(tǒng)數(shù)據(jù)不正確、丟失數(shù)據(jù)的現(xiàn)象,所以想到了用隊(duì)列解決方案,其實(shí)隊(duì)列解決方案的方式也可以處理,比如我們在競拍商品,轉(zhuǎn)發(fā)評論微博或是秒殺商品,同時(shí)訪問量特別大,隊(duì)列在這一點(diǎn)上發(fā)揮著特殊的作用,把所有的請求都放到隊(duì)列中,按毫秒計(jì)時(shí)器,有序地進(jìn)行,這樣就不會出現(xiàn)系統(tǒng)中數(shù)據(jù)不正確的情況。通過查閱資料,高并發(fā)性解決方案有兩個(gè),一個(gè)是使用緩存,另一個(gè)是使用生成靜態(tài)頁面;另外一個(gè)是優(yōu)化我們的代碼以減少不必要的資源浪費(fèi):不要經(jīng)常使用new對象,對于整個(gè)應(yīng)用程序中只需要存在一個(gè)實(shí)例的類,要使用StringBuffer或StringBuilder,對StringBuilder,StringBuilder,StringBuilder,通過靜態(tài)方法訪問單個(gè)類。不要使用諸如Exception可以控制方法推出等錯(cuò)誤的方法,但Exception要保持stacktrace消耗性能,除非必要時(shí)不使用instanceof進(jìn)行條件判斷,并盡量使用比率的條件判斷。在JAVA中使用效率高的類,例如ArrayList,它比Vector更好。
以上我們分享了微服務(wù)架構(gòu)的設(shè)計(jì)模式以及優(yōu)勢,如果您想了解更多相關(guān)信息,請您繼續(xù)關(guān)注中培偉業(yè)。