互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
來自:https://www.jianshu.com/p/d9504fc0af4d
注:本文以面試應(yīng)答目的為主,深入學(xué)習(xí)請自行查閱其他資料,后續(xù)會匯總一些微服務(wù)相關(guān)面試題
什么是微服務(wù)
微服務(wù)架構(gòu)的系統(tǒng)是一個分布式的系統(tǒng),按業(yè)務(wù)進(jìn)行劃分為獨(dú)立的服務(wù)單元,解決單體系統(tǒng)的不足,同時也滿足越來越復(fù)雜的業(yè)務(wù)需求。一.單體架構(gòu)
1.1什么是單體架構(gòu)
在軟件設(shè)計的時候經(jīng)常提到和使用經(jīng)典的3層模型,即表現(xiàn)層,業(yè)務(wù)邏輯層,數(shù)據(jù)訪問層。雖然在軟件設(shè)計中劃分了3層模型,但是對業(yè)務(wù)場景沒有劃分,一個典型的單體架構(gòu)就是將所有的業(yè)務(wù)場景的表現(xiàn)層,業(yè)務(wù)邏輯層,數(shù)據(jù)訪問層放在一個工程中最終經(jīng)過編譯,打包,部署在一臺服務(wù)器上。此時服務(wù)架構(gòu)如圖:1.2單體架構(gòu)存在的不足
在小型應(yīng)用的初期,訪問量小的時候這種架構(gòu)的性價比還是比較高的,開發(fā)速度快,成本低,但是隨著業(yè)務(wù)的發(fā)展,邏輯越來越復(fù)雜,代碼量越來越大,代碼得可讀性和可維護(hù)性越來越低。用戶的增加,訪問量越來越多單體架構(gòu)的應(yīng)用并發(fā)能力十分有限。可能會有人想到將單體應(yīng)用進(jìn)行集群部署,并增加負(fù)載均衡服務(wù)器,再來個緩存服務(wù)器和文件服務(wù)器,數(shù)據(jù)庫再搞個讀寫分離。這種架構(gòu)如圖:這種架構(gòu)雖然有一定的并發(fā)能力,及應(yīng)對一定復(fù)雜業(yè)務(wù),但是依然沒有改變系統(tǒng)為單體架構(gòu)的事實(shí)。大量的業(yè)務(wù)必然會有大量的代碼,代碼得可讀性和可維護(hù)性依然很差。如果面對海量的用戶,它的并發(fā)能力依然不夠。基于以上單體架構(gòu)系統(tǒng)的不足,提出了微服務(wù)架構(gòu)。二.微服務(wù)
2.1什么是微服務(wù)
說了這么多現(xiàn)在來看看到底什么是微服務(wù)。微服務(wù)最初是由Martin Fowler提出來的他的理解如下:微服務(wù)架構(gòu)就是將單一程序開發(fā)成一個微服務(wù),每個微服務(wù)運(yùn)行在自己的進(jìn)程中,并使用輕量級的機(jī)制通信,通常是HTTP RESTFUL API。這些服務(wù)圍繞業(yè)務(wù)能力來劃分,并通過自動化部署機(jī)制來獨(dú)立部署。這些服務(wù)可以使用不同的編程語言,不同數(shù)據(jù)庫,以保證最低限度的集中式管理。
總結(jié)起來微服務(wù)就是將一個單體架構(gòu)的應(yīng)用按業(yè)務(wù)劃分為一個個的獨(dú)立運(yùn)行的程序即服務(wù),它們之間通過HTTP協(xié)議進(jìn)行通信(也可以采用消息隊(duì)列來通信,如RoocketMQ,Kafaka等),可以采用不同的編程語言,使用不同的存儲技術(shù),自動化部署(如Jenkins)減少人為控制,降低出錯概率。服務(wù)數(shù)量越多,管理起來越復(fù)雜,因此采用集中化管理。例如Eureka,Zookeeper等都是比較常見的服務(wù)集中化管理框架。2.2微服務(wù)的優(yōu)勢
將復(fù)雜的業(yè)務(wù)拆分成多個小的業(yè)務(wù),每個業(yè)務(wù)拆分成一個服務(wù),將復(fù)雜的問題簡單化。利于分工,降低新人的學(xué)習(xí)成本。
微服務(wù)系統(tǒng)是分布式系統(tǒng),業(yè)務(wù)與業(yè)務(wù)之間完全解耦,隨著業(yè)務(wù)的增加可以根據(jù)業(yè)務(wù)再拆分,具有極強(qiáng)的橫向擴(kuò)展能力。面對搞并發(fā)的場景可以將服務(wù)集群化部署,加強(qiáng)系統(tǒng)負(fù)載能力。
服務(wù)間采用HTTP協(xié)議通信,服務(wù)與服務(wù)之間完全獨(dú)立。每個服務(wù)可以根據(jù)業(yè)務(wù)場景選取合適的編程語言和數(shù)據(jù)庫。
微服務(wù)每個服務(wù)都是獨(dú)立部署的,每個服務(wù)的修改和部署對其他服務(wù)沒有影響。
2.3微服務(wù)和SOA的關(guān)系
SOA即面向服務(wù)的架構(gòu),SOA是根據(jù)企業(yè)服務(wù)總線(ESB)模式來整合集成大量單一龐大的系統(tǒng),微服務(wù)可以說是SOA的一種實(shí)現(xiàn),將復(fù)雜的業(yè)務(wù)組件化。但它比ESB實(shí)現(xiàn)的SOA更加的輕便敏捷和簡單。推薦閱讀:
【119期】談?wù)勗陧?xiàng)目中,如何應(yīng)對高并發(fā)流量
【118期】面試官:你真的清楚 i = i++和 i = ++i 的區(qū)別嗎?
【117期】面試官:熟悉JVM嗎?為什么新生代內(nèi)存需要有兩個Survivor區(qū)?
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號內(nèi)回復(fù)「2048」,即可免費(fèi)獲取!!微信掃描二維碼,關(guān)注我的公眾號
朕已閱?