微服務(wù)的安全認(rèn)證


主題:微服務(wù)的安全認(rèn)證

一侵贵、認(rèn)識(shí)微服務(wù)

1.1 微服務(wù)的出道

圖片1.jpg
  • 軟件架構(gòu)(Software Architecture)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述咳燕。

  • 根據(jù)軟件系統(tǒng)在運(yùn)行期的表現(xiàn)風(fēng)格和部署結(jié)構(gòu)啊掏,可以粗略地將其劃分為兩大類:“單體架構(gòu)”(Monolithic Architecture)境氢、“分布式架構(gòu)”(Distributed Architecture)臼膏。

  • 四個(gè)時(shí)期:單體結(jié)構(gòu)危尿、垂直架構(gòu)、SOA架構(gòu)朗和、微服務(wù)架構(gòu)


(A)單體架構(gòu)

單體架構(gòu).png

? 當(dāng)網(wǎng)站流量很小時(shí)错沽,只需一個(gè)應(yīng)用,將所有功能都部署在一起眶拉,以減少部署節(jié)點(diǎn)和成本千埃。這種將所有功能都部署在一個(gè)web容器中運(yùn)行的系統(tǒng)就叫做單體架構(gòu)(也叫:巨石型應(yīng)用)。

<span style="font-size:14pt;">簡(jiǎn)單單體模式</span>

? 代碼層面沒有拆分忆植,所有的業(yè)務(wù)邏輯都在一個(gè)項(xiàng)目(Project)里打包成一個(gè)二進(jìn)制的編譯后文件放可,通過(guò)這個(gè)文件進(jìn)行部署,并提供業(yè)務(wù)能力朝刊。最典型的就是LAMP系統(tǒng)(Linux+PHP+Apache+MySQL),這種部署結(jié)構(gòu)過(guò)于龐大耀里,導(dǎo)致業(yè)務(wù)系統(tǒng)啟動(dòng)很慢。

? 隨著網(wǎng)站的上線拾氓,訪問(wèn)量逐步上升备韧,單臺(tái)機(jī)器的性能遇到瓶頸的時(shí)候,最先采取的是:web 服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器拆分開來(lái)痪枫,這樣做的話不僅提高了單機(jī)的負(fù)載能力织堂,也提高了整個(gè)系統(tǒng)的容災(zāi)能力。

hello.png

? 隨著訪問(wèn)量的繼續(xù)不斷增加奶陈,單臺(tái)應(yīng)用服務(wù)器已經(jīng)無(wú)法滿足我們的需求易阳。 假設(shè)數(shù)據(jù)庫(kù)服務(wù)器還沒有遇到性能問(wèn)題,那我們可以通過(guò)增加應(yīng)用服務(wù)器的方式來(lái)將應(yīng)用服務(wù)器集群化吃粒,這樣就可以將用戶請(qǐng)求分流到各個(gè)服務(wù)器中潦俺,從而達(dá)到繼續(xù)提升系統(tǒng)負(fù)載能力的目的。此時(shí)各個(gè)應(yīng)用服務(wù)器之間沒有直接的交互徐勃,他們都是依賴數(shù)據(jù)庫(kù)各自對(duì)外提供服務(wù)事示。

hello.png

? 集群架構(gòu)(屬于水平拓展) 相當(dāng)于把同一個(gè)項(xiàng)目部署到多個(gè)服務(wù)器上(相當(dāng)于復(fù)制備份),然后通過(guò)負(fù)載均衡服務(wù)器nginx將請(qǐng)求分別均衡的派發(fā)到不同的tomcat服務(wù)器上僻肖,不同服務(wù)器上運(yùn)行的是同一個(gè)web項(xiàng)目肖爵。

負(fù)載均衡.png

反向代理.png

特點(diǎn)

1、所有的功能集成在一個(gè)項(xiàng)目工程中臀脏。

2劝堪、所有的功能打一個(gè)war包部署到服務(wù)器冀自。

3、通過(guò)部署應(yīng)用集群數(shù)據(jù)庫(kù)集群來(lái)提高系統(tǒng)的性能秒啦。

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

項(xiàng)目架構(gòu)簡(jiǎn)單熬粗,前期開發(fā)成本低,周期短余境,小型項(xiàng)目的首選驻呐。

缺點(diǎn)

1、全部功能集成在一個(gè)工程中芳来,對(duì)于大型項(xiàng)目不易開發(fā)含末、擴(kuò)展及維護(hù)。

2绣张、單點(diǎn)容錯(cuò)率低,并發(fā)能力差关带。


<span style="font-size:14pt;">垂直架構(gòu)</span>
垂直架構(gòu).png

?

? 當(dāng)訪問(wèn)量逐漸增大侥涵,單一應(yīng)用無(wú)法滿足需求,此時(shí)為了應(yīng)對(duì)更高的并發(fā)和業(yè)務(wù)需求宋雏,我們根據(jù)業(yè)務(wù)功能對(duì)系統(tǒng)進(jìn)行拆分芜飘。

<span style="color: blue; font-size: 12pt">MVC 模式</span>

? 系統(tǒng)內(nèi)每個(gè)模塊的功能組件按照不同的職責(zé)劃分為模型(Model)、視圖(View)磨总、控制器(Controller)等角色嗦明,并以此來(lái)組織研發(fā)實(shí)現(xiàn)工作,整個(gè)系統(tǒng)由多個(gè)模塊組成蚪燕,每個(gè)模塊又由這種不同的部分組成娶牌。

mvc.jpg

? SpringMVC的流程簡(jiǎn)略示意圖:


springMVC.png

?

? 利用框架可以簡(jiǎn)化各層的開發(fā):表現(xiàn)層使用SpringMVC或者Struts2,持久層使用MybatisHibernate馆纳,使用spring管理表現(xiàn)層诗良,業(yè)務(wù)層和持久層三層之間的關(guān)系。

<span style="color: blue; font-size: 12pt">前后端分離模式</span>

? 將前后端代碼耦合的設(shè)計(jì)改為前端邏輯和后端邏輯獨(dú)立編寫實(shí)現(xiàn)的處理模式鲁驶;

? 只要數(shù)據(jù)接口保持穩(wěn)定不變鉴裹,那么前后端系統(tǒng)可以各自獨(dú)立發(fā)展和維護(hù)。目前最主流的三種前端開發(fā)框架(React钥弯、AngularJS径荔、Vue),都遵循著這種設(shè)計(jì)理念脆霎。


前后端.jpg

特點(diǎn):
1总处、以單體結(jié)構(gòu)規(guī)模的項(xiàng)目為單位進(jìn)行垂直劃分,一個(gè)大項(xiàng)目拆分成一個(gè)一個(gè)單體結(jié)構(gòu)項(xiàng)目睛蛛。

2辨泳、項(xiàng)目之間的接口多為數(shù)據(jù)同步功能虱岂,如:數(shù)據(jù)庫(kù)之間通過(guò)網(wǎng)絡(luò)接口進(jìn)行數(shù)據(jù)庫(kù)同步。

優(yōu)點(diǎn):
1菠红、系統(tǒng)拆分實(shí)現(xiàn)了流量分擔(dān)第岖,解決了并發(fā)問(wèn)題

2、可以針對(duì)不同模塊進(jìn)行優(yōu)化

3试溯、方便水平擴(kuò)展蔑滓,負(fù)載均衡,容錯(cuò)率提高

4遇绞、系統(tǒng)間相互獨(dú)立

缺點(diǎn):
1键袱、服務(wù)之間相互調(diào)用,如果某個(gè)服務(wù)的端口或者ip地址發(fā)生改變摹闽,調(diào)用的系統(tǒng)得手動(dòng)改變

2蹄咖、搭建集群之后,實(shí)現(xiàn)負(fù)載均衡比較復(fù)雜


(B)分布式架構(gòu)(RPC

? 當(dāng)垂直應(yīng)用越來(lái)越多付鹿,應(yīng)用之間交互不可避免澜汤,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù)舵匾,逐漸形成穩(wěn)定的服務(wù)中心俊抵,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。此時(shí)坐梯,用于提高業(yè)務(wù)復(fù)用及整合的分布式調(diào)用是關(guān)鍵徽诲。

? 分布式架構(gòu)就是多個(gè)子系統(tǒng)互相協(xié)作才能完成整個(gè)業(yè)務(wù)流程,系統(tǒng)之間需要進(jìn)行通信吵血。分布式系統(tǒng)作為一個(gè)整體對(duì)用戶提供服務(wù)谎替,而整個(gè)系統(tǒng)的內(nèi)部的協(xié)作對(duì)用戶來(lái)說(shuō)是透明的,用戶就像是只使用一個(gè)系統(tǒng) 一樣蹋辅。分布式系統(tǒng)中的多臺(tái)計(jì)算機(jī)之間在空間位置上可以隨意分布院喜,同時(shí),機(jī)器的分布情況也會(huì)隨時(shí)變動(dòng)晕翠。

? RPC(Remote Procedure Call)它是一種進(jìn)程間通信方式喷舀,允許像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù), ——從遠(yuǎn)程主機(jī)調(diào)用一個(gè)過(guò)程/函數(shù)淋肾。 兩臺(tái)服務(wù)器A硫麻、B,分別部署不同的應(yīng)用a樊卓,b拿愧。當(dāng)A服務(wù)器想要調(diào)用B服務(wù)器上應(yīng)用b提供的函數(shù)或方法的時(shí)候,由于不在一個(gè)內(nèi)存空間碌尔,不能直接調(diào)用浇辜,需要通過(guò)網(wǎng)絡(luò)來(lái)表達(dá)調(diào)用的語(yǔ)義傳達(dá)調(diào)用的數(shù)據(jù)券敌。 2006年之后,隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展柳洋,各種智能終端的普及待诅,遠(yuǎn)程分布式調(diào)用已經(jīng)成為主流,RPC框架也如雨后春筍般誕生熊镣,開源和自研的RPC框架的普及標(biāo)志著傳統(tǒng)垂直應(yīng)用架構(gòu)時(shí)代的終結(jié)卑雁。

分布式的演進(jìn)

分布式的發(fā)展流程.jpg

分布式系統(tǒng).png

分布式架構(gòu)的應(yīng)用
  • 分布式文件系統(tǒng)

例如:出名的有 Hadoop 的 HDFS, 還有 google的 GFS , 淘寶的 TFS 等

  • 分布式緩存

例如:memcache , hbase, mongdb 等

  • 分布式數(shù)據(jù)庫(kù)

例如:mysql, mariadb, postgreSql 等

……

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

將基礎(chǔ)服務(wù)進(jìn)行了抽取,系統(tǒng)間相互調(diào)用 (RPC Remote Procedure Call 遠(yuǎn)程過(guò)程調(diào)用)绪囱,提高了代碼復(fù)用和開發(fā)效率


<span style="font-size:14pt;">面向服務(wù)架構(gòu)(SOA)</span>
分布式出現(xiàn)的問(wèn)題
  • 服務(wù)越來(lái)越多测蹲,需要管理每個(gè)服務(wù)的地址

  • 調(diào)用關(guān)系錯(cuò)綜復(fù)雜,難以理清依賴關(guān)系

  • 服務(wù)過(guò)多鬼吵,服務(wù)狀態(tài)難以管理扣甲,無(wú)法根據(jù)服務(wù)情況動(dòng)態(tài)管理

? <span style="color: blue; font-size: 15pt">資源調(diào)度和治理中心(SOA Service-Oriented Architecture)</span>

? SOA( 面向服務(wù)架構(gòu)),是一種開發(fā)思想 齿椅,是一種松耦合框架琉挖,不是一種具體的開發(fā)技術(shù),讓軟件超越開發(fā)語(yǔ)言

SOA 要做什么媒咳?

1粹排、服務(wù)注冊(cè)中心种远,實(shí)現(xiàn)服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn)涩澡,無(wú)需人為記錄服務(wù)地址

2、服務(wù)自動(dòng)訂閱坠敷,服務(wù)列表自動(dòng)推送妙同,服務(wù)調(diào)用透明化,無(wú)需關(guān)心依賴關(guān)系

3膝迎、動(dòng)態(tài)監(jiān)控服務(wù)狀態(tài)監(jiān)控報(bào)告粥帚,人為控制服務(wù)狀態(tài)


服務(wù)發(fā)現(xiàn)與服務(wù)注冊(cè).png

? SOA中有一個(gè)服務(wù)注冊(cè)中心,所有的服務(wù)都會(huì)在這里進(jìn)行注冊(cè)限次,表明自己提供了哪些服務(wù)芒涡。當(dāng)一個(gè)請(qǐng)求到來(lái)時(shí),會(huì)先負(fù)載均衡卖漫,分流到某個(gè)具體的服務(wù)器费尽,服務(wù)器在調(diào)用后端服務(wù)的時(shí)候,會(huì)先去服務(wù)注冊(cè)中心獲取數(shù)據(jù)羊始,緩存到本地并查找服務(wù)地址旱幼,最后才是真正的遠(yuǎn)程服務(wù)調(diào)用(RPC SOA的具體實(shí)現(xiàn)方式)。

SOA架構(gòu)示例.jpg

缺點(diǎn):

服務(wù)間會(huì)有依賴關(guān)系突委,一旦某個(gè)環(huán)節(jié)出錯(cuò)會(huì)影響較大

服務(wù)關(guān)系復(fù)雜柏卤,運(yùn)維冬三、測(cè)試部署困難


<span style="font-size:14pt;">微服務(wù)架構(gòu)(MSA)</span>

Martin FowlerJames Lewis于2014年共同提出 微服務(wù)架構(gòu)思想 的文章—《Microservices》

微服務(wù)之父.png

? 簡(jiǎn)而言之,微服務(wù)架構(gòu)風(fēng)格是一種將單個(gè)應(yīng)用程序開發(fā)為一套小型服務(wù)的方法缘缚,每個(gè)小型服務(wù)都在自己的流程中運(yùn)行勾笆,并與輕量級(jí)機(jī)制(通常是HTTP資源API)進(jìn)行通信。這些服務(wù)圍繞業(yè)務(wù)功能構(gòu)建忙灼,可通過(guò)全自動(dòng)部署機(jī)制獨(dú)立部署匠襟。這些服務(wù)至少集中管理,可以用不同的編程語(yǔ)言編寫该园,并使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)酸舍。 ——————— 來(lái)自google無(wú)責(zé)任翻譯

<center>
<span style="color: blue;font-size: 17pt" >
** 微服務(wù)就是一個(gè)輕量級(jí)的服務(wù)治理方案 **
</span>


<span style="color: blue; font-size: 17pt" >
** 是SOA思想的一種更加簡(jiǎn)單、輕便里初、敏捷的實(shí)現(xiàn) **
</span>


<span style="color: green; font-size: 14pt" >
** 微服務(wù)架構(gòu) = 80%的SOA服務(wù)架構(gòu)思想 + 100%的組件化架構(gòu)思想 + 80%的領(lǐng)域建模思想 **
</span>
</center>

weifuwu.jpg

微服務(wù)的特點(diǎn)
  • 按照業(yè)務(wù)劃分成獨(dú)立運(yùn)行的程序啃勉,即服務(wù)單元

    根絕Martin Fowler的定義,微服務(wù)的“微”是按照業(yè)務(wù)劃分双妨。傳統(tǒng)的軟件開發(fā)模式通常由UI團(tuán)隊(duì)淮阐、服務(wù)端團(tuán)隊(duì)數(shù)據(jù)庫(kù)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)構(gòu)成,并相應(yīng)的將軟件按照職能劃分為各個(gè)模塊刁品。通常開發(fā)人員都是各司其職泣特,很少能跨職能去工作。如果是按照業(yè)務(wù)來(lái)劃分服務(wù)挑随,每個(gè)服務(wù)都要獨(dú)立的UI状您、服務(wù)端、數(shù)據(jù)庫(kù)和運(yùn)維兜挨,所以就需要跨職能團(tuán)隊(duì)膏孟,一個(gè)團(tuán)隊(duì)負(fù)責(zé)一個(gè)服務(wù)的所有工作。當(dāng)這個(gè)負(fù)責(zé)這個(gè)服務(wù)的團(tuán)隊(duì)只有1~2人的時(shí)候拌汇,就對(duì)開發(fā)人員提出了更高的要求柒桑。

  • 服務(wù)之間通過(guò)HTTP協(xié)議互相通信

    微服務(wù)單元獨(dú)立部署,并運(yùn)行在各自的進(jìn)程中噪舀,微服務(wù)單元之間的通信方式一般傾向于使用HTTP這種簡(jiǎn)單的通訊機(jī)制魁淳,更多的時(shí)候是使用Restful API。不同服務(wù)可以采用不同語(yǔ)言与倡,部署在不同平臺(tái)界逛。

    服務(wù)與服務(wù)之間也可以通過(guò)輕量級(jí)的消息總線來(lái)通信,例如RabbitMQ蒸走,Kafka等仇奶。通過(guò)發(fā)送消息或者訂閱消息來(lái)達(dá)到服務(wù)于服務(wù)之間的通信的目的。(弊端:會(huì)有失敗)

    通信的數(shù)據(jù)格式:JSON该溯、XML岛抄、Protobuf (序列化后的二進(jìn)制數(shù)據(jù))

  • 微服務(wù)的數(shù)據(jù)庫(kù)獨(dú)立

    服務(wù)與服務(wù)之間是無(wú)耦合,數(shù)據(jù)庫(kù)也是獨(dú)立的狈茉。典型的微服務(wù)架構(gòu)就是每個(gè)微服務(wù)都有自己獨(dú)立的數(shù)據(jù)庫(kù)夫椭,數(shù)據(jù)庫(kù)之間沒有任何聯(lián)系。單個(gè)業(yè)務(wù)的數(shù)據(jù)量少氯庆,易于維護(hù)和遷移蹭秋。每個(gè)數(shù)據(jù)庫(kù)所使用的數(shù)據(jù)存儲(chǔ)技術(shù)可以根據(jù)業(yè)務(wù)需要來(lái)選擇。

  • 自動(dòng)化部署
  • 可以用不同的編程語(yǔ)言

  • 可以用不同的存儲(chǔ)技術(shù)

  • 服務(wù)集中化管理

  • 微服務(wù)是一個(gè)分布式系統(tǒng)

微服務(wù)的優(yōu)點(diǎn)
微服務(wù)優(yōu)點(diǎn).jpeg

優(yōu)點(diǎn):
1堤撵、服務(wù)拆分粒度更細(xì)仁讨,有利于資源重復(fù)利用,提高開發(fā)效率实昨。

2洞豁、可以更加精準(zhǔn)的制定每個(gè)服務(wù)的優(yōu)化方案,提高系統(tǒng)可維護(hù)性荒给。

3丈挟、微服務(wù)架構(gòu)采用去中心化思想,服務(wù)之間采用RESTful等輕量協(xié)議通信志电,相比ESB更輕量曙咽。

4、適用于互聯(lián)網(wǎng)時(shí)代挑辆,產(chǎn)品迭代周期更短例朱。

微服務(wù)的設(shè)計(jì)原則


微服務(wù)設(shè)計(jì)原則.jpeg

四個(gè)原則推薦給大家:

  • (1) AKF拆分原則


    AKF擴(kuò)展立方體.jpeg

AKF擴(kuò)展立方體(參考《The Art of Scalability》),是一個(gè)叫AKF的公司的技術(shù)專家抽象總結(jié)的應(yīng)用擴(kuò)展的三個(gè)維度之拨。理論上按照這三個(gè)擴(kuò)展模式茉继,可以將一個(gè)單體系統(tǒng)咧叭,進(jìn)行無(wú)限擴(kuò)展蚀乔。

X 軸 :指的是水平復(fù)制,很好理解菲茬,就是講單體系統(tǒng)多運(yùn)行幾個(gè)實(shí)例吉挣,做個(gè)集群加負(fù)載均衡的模式。

Z 軸 :是基于類似的數(shù)據(jù)分區(qū)婉弹,比如一個(gè)互聯(lián)網(wǎng)打車應(yīng)用突然或了睬魂,用戶量激增,集群模式撐不住了镀赌,那就按照用戶請(qǐng)求的地區(qū)進(jìn)行數(shù)據(jù)分區(qū)氯哮,北京、上海商佛、四川等多建幾個(gè)集群喉钢。

Y 軸 :就是我們所說(shuō)的微服務(wù)的拆分模式姆打,就是基于不同的業(yè)務(wù)拆分。

  • (2) 前后端分離


    前后端分離.jpeg

? 推薦的模式是最好直接采用物理分離的方式部署肠虽,進(jìn)一步促使進(jìn)行更徹底的分離幔戏。不要繼續(xù)以前的服務(wù)端模板技術(shù),比如JSP 税课,把Java JS HTML CSS 都堆到一個(gè)頁(yè)面里闲延,稍復(fù)雜的頁(yè)面就無(wú)法維護(hù)。這種分離模式的方式有幾個(gè)好處:

  • 前后端技術(shù)分離韩玩,可以由各自的專家來(lái)對(duì)各自的領(lǐng)域進(jìn)行優(yōu)化垒玲,這樣前端的用戶體驗(yàn)優(yōu)化效果會(huì)更好。
  • 分離模式下找颓,前后端交互界面更加清晰侍匙,就剩下了接口和模型,后端的接口簡(jiǎn)潔明了叮雳,更容易維護(hù)想暗。
  • 前端多渠道集成場(chǎng)景更容易實(shí)現(xiàn),后端服務(wù)無(wú)需變更帘不,采用統(tǒng)一的數(shù)據(jù)和模型说莫,可以支撐前端的web UI\ 移動(dòng)App等訪問(wèn)。
  • (3) 無(wú)狀態(tài)服務(wù)


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

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

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

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

  • Restful通信風(fēng)格


    RestFulAPI.jpeg

作為一個(gè)原則來(lái)講本來(lái)應(yīng)該是個(gè)“無(wú)狀態(tài)通信原則”,在這里我們直接推薦一個(gè)實(shí)踐優(yōu)選的Restful 通信風(fēng)格 ,因?yàn)樗泻芏嗪锰帲?/p>

  • 無(wú)狀態(tài)協(xié)議HTTP伟阔,具備先天優(yōu)勢(shì)尸变,擴(kuò)展能力很強(qiáng)。例如需要安全加密是减俏,有現(xiàn)成的成熟方案HTTPS可用召烂。
  • JSON 報(bào)文序列化,輕量簡(jiǎn)單娃承,人與機(jī)器均可讀奏夫,學(xué)習(xí)成本低,搜索引擎友好历筝。
  • 語(yǔ)言無(wú)關(guān)酗昼,各大熱門語(yǔ)言都提供成熟的Restful API框架,相對(duì)其他的一些RPC框架生態(tài)更完善梳猪。

當(dāng)然在有些特殊業(yè)務(wù)場(chǎng)景下麻削,也需要采用其他的RPC框架,如Thrift春弥、Avro-rpc呛哟、Grpc。但絕大多數(shù)情況下Restful就足夠用了匿沛。

微服務(wù)應(yīng)用平臺(tái)的運(yùn)行視圖
微服務(wù)應(yīng)用平臺(tái)的運(yùn)行視圖.jpeg
微服務(wù)容器
微服務(wù)容器.jpeg
微服務(wù)帶來(lái)的難題
  • 微服務(wù)的復(fù)雜度
  • 分布式事物
  • 服務(wù)的劃分
  • 服務(wù)的部署

1.2 第一代微服務(wù)架構(gòu)

[圖片上傳失敗...(image-f835a6-1551540278906)]

[圖片上傳失敗...(image-d62dd3-1551540278906)]

微服務(wù)工具包扫责,為開發(fā)者提供了在分布式系統(tǒng)的配置管理、

服務(wù)發(fā)現(xiàn)逃呼、斷路器鳖孤、智能路由、微代理抡笼、控制總線等開發(fā)工具包

Spring Cloud包含了多個(gè)子項(xiàng)目,比如:Spring Cloud Config苏揣、

Spring Cloud Netflix、Spring Cloud CloudFoundry推姻、

Spring Cloud AWS平匈、Spring Cloud Security、Spring Cloud Commons拾碌、

Spring Cloud Zookeeper吐葱、Spring Cloud CLI等項(xiàng)目

微服務(wù)1.jpeg

[圖片上傳失敗...(image-a0dcc7-1551540278906)]

這是一個(gè)完整的Spring Cloud生態(tài)簡(jiǎn)圖街望。

Spring Cloud是一個(gè)基于Spring Boot實(shí)現(xiàn)的微服務(wù)架構(gòu)開發(fā)工具校翔。它為微服務(wù)架構(gòu)中涉及的服務(wù)治理、斷路器灾前、負(fù)載均衡防症、配置管理、控制總線和集群狀態(tài)管理等操作提供了一種簡(jiǎn)單的開發(fā)方式。

1蔫敲、外部或者內(nèi)部的非Spring Cloud項(xiàng)目都統(tǒng)一通過(guò)API網(wǎng)關(guān)(Zuul)來(lái)訪問(wèn)內(nèi)部服務(wù)饲嗽。

2、網(wǎng)關(guān)接收到請(qǐng)求后奈嘿,從注冊(cè)中心(Eureka)獲取可用服務(wù)貌虾。

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

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

5袄膏、Hystrix負(fù)責(zé)處理服務(wù)超時(shí)熔斷。

6掺冠、Turbine監(jiān)控服務(wù)間的調(diào)用和熔斷相關(guān)指標(biāo)沉馆。

(圖中沒有畫出配置中心,配置中心管理各微服務(wù)不同環(huán)境下的配置文件德崭。)


二斥黑、安全認(rèn)證

2.1 什么是認(rèn)證?

jwt.jpeg

2.2 常見的認(rèn)證方案

三眉厨、微服務(wù)安全認(rèn)證方案

? 安全認(rèn)證方面心赶,我們基于Spring Security結(jié)合OAuth2再加上JWT (Json Web Token)做安全令牌,實(shí)現(xiàn)統(tǒng)一的安全認(rèn)證與鑒權(quán)缺猛,使得微服務(wù)之間能夠按需隔離和安全互通缨叫。后續(xù)在統(tǒng)一認(rèn)證和權(quán)限方面我們產(chǎn)品會(huì)陸續(xù)推出較完善并且擴(kuò)展性良好的微服務(wù)組件,可以作為微服務(wù)平臺(tái)的公共的認(rèn)證和鑒權(quán)服務(wù)荔燎。 再啰嗦一句耻姥,認(rèn)證鑒權(quán)一定是個(gè)公共的服務(wù),而不是多個(gè)系統(tǒng)各自建設(shè)有咨。

3.1 Spring Boot Security

現(xiàn)在的好多項(xiàng)目都是基于APP移動(dòng)端以及前后端分離的項(xiàng)目琐簇,之前基于Session的前后端放到一起的項(xiàng)目已經(jīng)慢慢失寵并淡出我們視線,尤其是當(dāng)基于Spring Cloud的微服務(wù)架構(gòu)以及Vue座享、React單頁(yè)面應(yīng)用流行起來(lái)后婉商,情況更甚。為此基于前后端分離的項(xiàng)目用戶認(rèn)證也受到眾人關(guān)注的一個(gè)焦點(diǎn)渣叛,不同以往的基于Session用戶認(rèn)證丈秩,基于Token的用戶認(rèn)證是目前主流選擇方案(至于什么是Token認(rèn)證,網(wǎng)上有相關(guān)的資料淳衙,大家可以看看),而且基于Java的兩大認(rèn)證框架有Apache Shiro和Spring Security蘑秽,我在此就不討論孰優(yōu)孰劣的饺著,大家可自行百度看看,本文主要討論的是基于Spring Security的用戶認(rèn)證肠牲。

3.1.1 什么是Spring Boot Security

3.1.2 微服務(wù)案例展示

3.2 Spring Cloud OAuth2

3.2.1 什么是OAuth2幼衰?

3.2.2 OAuth2模型初探

3.3 Spring Security OAuth2 + JWT

3.3.1 什么是JWT?

3.3.2 微服務(wù)案例展示

3.4 Spring Security OAuth2 + JWT+Redis

3.4.1 什么是Redis缀雳?

3.4.2 微服務(wù)案例展示

四渡嚣、綜合案例展示

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

4.2 使用Spring Cloud構(gòu)建微服務(wù)的綜合案例

附錄

1、資源鏈接

2肥印、參考文章

[1] 微服務(wù)的4個(gè)設(shè)計(jì)原則和19個(gè)解決方案 http://server.51cto.com/Micro-551054.htm

[2] 圖解分布式架構(gòu) https://www.cnblogs.com/dump/p/8125539.html

[3] 負(fù)載均衡基礎(chǔ)知識(shí) (https://www.cnblogs.com/danbing/p/7459224.html) https://www.cnblogs.com/danbing/p/7459224.html

[4] Martin Fowler提出微服務(wù) https://martinfowler.com/articles/microservices.html

[5] 引領(lǐng)新未來(lái)SOA服務(wù)框架严拒,未來(lái)發(fā)展的方向 https://blog.csdn.net/u011687186/article/details/52126212

[6] 什么是分布式系統(tǒng),如何學(xué)習(xí)分布式系統(tǒng) https://www.cnblogs.com/xybaby/p/7787034.html

[7] Web Service學(xué)習(xí)https://www.cnblogs.com/xdp-gacl/p/4048937.html

[8] 什么是微服務(wù)架構(gòu)竖独?微服務(wù)架構(gòu)與SOA架構(gòu)區(qū)別 https://www.shsxt.com/it/java/1299.html

[9] 微服務(wù)數(shù)據(jù)管理(譯):每個(gè)服務(wù)一個(gè)數(shù)據(jù)庫(kù)模式 http://www.reibang.com/p/cd726b32342e

[10] 微服務(wù)架構(gòu)下的數(shù)據(jù)一致性保證 https://www.cnblogs.com/duanxz/p/7866516.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裤唠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莹痢,更是在濱河造成了極大的恐慌种蘸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竞膳,死亡現(xiàn)場(chǎng)離奇詭異航瞭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)坦辟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門刊侯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锉走,你說(shuō)我怎么就攤上這事滨彻。” “怎么了挪蹭?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵亭饵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我梁厉,道長(zhǎng)辜羊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任词顾,我火速辦了婚禮八秃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肉盹。我一直安慰自己昔驱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布垮媒。 她就那樣靜靜地躺著舍悯,像睡著了一般航棱。 火紅的嫁衣襯著肌膚如雪睡雇。 梳的紋絲不亂的頭發(fā)上萌衬,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音它抱,去河邊找鬼秕豫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛观蓄,可吹牛的內(nèi)容都是我干的混移。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼侮穿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歌径!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起亲茅,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤回铛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后克锣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茵肃,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年袭祟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了验残。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巾乳,死狀恐怖您没,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胆绊,我是刑警寧澤紊婉,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站辑舷,受9級(jí)特大地震影響喻犁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜何缓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一肢础、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碌廓,春花似錦传轰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)堪伍。三九已至纱控,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跟匆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工通砍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玛臂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓封孙,卻偏偏與公主長(zhǎng)得像迹冤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虎忌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容