日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

深入了解微服務(wù)架構(gòu)相關(guān)知識

 碼農(nóng)9527 2021-07-05

 微服務(wù)架構(gòu)(MicroserviceArchitecture)是一種架構(gòu)概念,旨在通過將功能分解到各個(gè)離散的服務(wù)中以實(shí)現(xiàn)對解決方案的解耦,你可以將其看作是在架構(gòu)層次而非獲取服務(wù)的。

微服務(wù)架構(gòu)相關(guān)知識

    類上應(yīng)用很多SOLID原則。微服務(wù)架構(gòu)是個(gè)很有趣的概念,它的主要作用是將功能分解到離散的各個(gè)服務(wù)當(dāng)中,從而降低系統(tǒng)的耦合性,并提供更加靈活的服務(wù)支持。

    概念:把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)個(gè)甚至數(shù)十個(gè)的支持微服務(wù),它可擴(kuò)展單個(gè)組件而不是整個(gè)的應(yīng)用程序堆棧,從而滿足服務(wù)等級協(xié)議。

    定義:圍繞業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用,這些應(yīng)用可獨(dú)立地進(jìn)行開發(fā)、管理和迭代。在分散的組件中使用云架構(gòu)和平臺式部署、管理和服務(wù)功能,使產(chǎn)品交付變得更加簡單。

    本質(zhì):用一些功能比較明確、業(yè)務(wù)比較精練的服務(wù)去解決更大、更實(shí)際的問題。

    微服務(wù)的具體特征

    官方的定義:

    1、一些列的獨(dú)立的服務(wù)共同組成系統(tǒng)

    2、單獨(dú)部署,跑在自己的進(jìn)程中

    3、每個(gè)服務(wù)為獨(dú)立的業(yè)務(wù)開發(fā)

    4、分布式管理

    5、非常強(qiáng)調(diào)隔離性

    大概的標(biāo)準(zhǔn):

    1、分布式服務(wù)組成的系統(tǒng)

    2、按照業(yè)務(wù),而不是技術(shù)來劃分組織

    3、做有生命的產(chǎn)品而不是項(xiàng)目

    4、強(qiáng)服務(wù)個(gè)體和弱通信(Smartendpointsanddumbpipes)

    5、自動(dòng)化運(yùn)維(DevOps)

    6、高度容錯(cuò)性

    7、快速演化和迭代

    怎么具體實(shí)踐微服務(wù)

    要實(shí)際的應(yīng)用微服務(wù),需要解決一下四點(diǎn)問題:

    1、客戶端如何訪問這些服務(wù)

    2、每個(gè)服務(wù)之間如何通信

    3、如此多的服務(wù),如何實(shí)現(xiàn)?

    4、服務(wù)掛了,如何解決?(備份方案,應(yīng)急處理機(jī)制)

    1、客戶端如何訪問這些服務(wù)

    原來的Monolithic方式開發(fā),所有的服務(wù)都是本地的,UI可以直接調(diào)用,現(xiàn)在按功能拆分成獨(dú)立的服務(wù),跑在獨(dú)立的一般都在獨(dú)立的虛擬機(jī)上的Java進(jìn)程了。客戶端UI如何訪問他的?

    后臺有N個(gè)服務(wù),前臺就需要記住管理N個(gè)服務(wù),一個(gè)服務(wù)下線/更新/升級,前臺就要重新部署,這明顯不服務(wù)我們拆分的理念,特別當(dāng)前臺是移動(dòng)應(yīng)用的時(shí)候,通常業(yè)務(wù)變化的節(jié)奏更快。

    另外,N個(gè)小服務(wù)的調(diào)用也是一個(gè)不小的網(wǎng)絡(luò)開銷。還有一般微服務(wù)在系統(tǒng)內(nèi)部,通常是無狀態(tài)的,用戶登錄信息和權(quán)限管理最好有一個(gè)統(tǒng)一的地方維護(hù)管理(OAuth)。

    所以,一般在后臺N個(gè)服務(wù)和UI之間一般會(huì)一個(gè)代理或者叫APIGateway,他的作用包括:

    ①提供統(tǒng)一服務(wù)入口,讓微服務(wù)對前臺透明

    ②聚合后臺的服務(wù),節(jié)省流量,提升性能

    ③提供安全,過濾,流控等API管理功能

    資料分享:SpringBoot學(xué)習(xí)筆記,這個(gè)太全了!

    其實(shí)這個(gè)APIGateway可以有很多廣義的實(shí)現(xiàn)辦法,可以是一個(gè)軟硬一體的盒子,也可以是一個(gè)簡單的MVC框架,甚至是一個(gè)Node.js的服務(wù)端。他們最重要的作用是為前臺(通常是移動(dòng)應(yīng)用)提供后臺服務(wù)的聚合,提供一個(gè)統(tǒng)一的服務(wù)出口,解除他們之間的耦合,不過APIGateway也有可能成為單點(diǎn)故障點(diǎn)或者性能的瓶頸。

    用過TaobaoOpenPlatform(淘寶開放平臺)的就能很容易的體會(huì),TAO就是這個(gè)APIGateway。

微服務(wù)架構(gòu)相關(guān)知識

    2、每個(gè)服務(wù)之間如何通信

    所有的微服務(wù)都是獨(dú)立的Java進(jìn)程跑在獨(dú)立的虛擬機(jī)上,所以服務(wù)間的通信就是IPC(interprocesscommunication),已經(jīng)有很多成熟的方案?,F(xiàn)在基本最通用的有兩種方式:

    同步調(diào)用:

    ①REST(JAX-RS,SpringBoot)

    SpringBoot最全基礎(chǔ)教程:https://github.com/javastacks/spring-boot-best-practice

    ②RPC(Thrift,Dubbo)

    異步消息調(diào)用(Kafka,Notify,MetaQ)

微服務(wù)架構(gòu)相關(guān)知識

    同步和異步的區(qū)別:

    一般同步調(diào)用比較簡單,一致性強(qiáng),但是容易出調(diào)用問題,性能體驗(yàn)上也會(huì)差些,特別是調(diào)用層次多的時(shí)候。RESTful和RPC的比較也是一個(gè)很有意思的話題。

    一般REST基于HTTP,更容易實(shí)現(xiàn),更容易被接受,服務(wù)端實(shí)現(xiàn)技術(shù)也更靈活些,各個(gè)語言都能支持,同時(shí)能跨客戶端,對客戶端沒有特殊的要求,只要封裝了HTTP的SDK就能調(diào)用,所以相對使用的廣一些。RPC也有自己的優(yōu)點(diǎn),傳輸協(xié)議更高效,安全更可控,特別在一個(gè)公司內(nèi)部,如果有統(tǒng)一個(gè)的開發(fā)規(guī)范和統(tǒng)一的服務(wù)框架時(shí),他的開發(fā)效率優(yōu)勢更明顯些。就看各自的技術(shù)積累實(shí)際條件,自己的選擇了。

    而異步消息的方式在分布式系統(tǒng)中有特別廣泛的應(yīng)用,他既能減低調(diào)用服務(wù)之間的耦合,又能成為調(diào)用之間的緩沖,確保消息積壓不會(huì)沖垮被調(diào)用方,同時(shí)能保證調(diào)用方的服務(wù)體驗(yàn),繼續(xù)干自己該干的活,不至于被后臺性能拖慢。不過需要付出的代價(jià)是一致性的減弱,需要接受數(shù)據(jù)最終一致性;還有就是后臺服務(wù)一般要實(shí)現(xiàn)冪等性,因?yàn)橄l(fā)送出于性能的考慮一般會(huì)有重復(fù)(保證消息的被收到且僅收到一次對性能是很大的考驗(yàn));最后就是必須引入一個(gè)獨(dú)立的broker,如果公司內(nèi)部沒有技術(shù)積累,對broker分布式管理也是一個(gè)很大的挑戰(zhàn)。

    3、如此多的服務(wù),如何實(shí)現(xiàn)?

    在微服務(wù)架構(gòu)中,一般每一個(gè)服務(wù)都是有多個(gè)拷貝,來做負(fù)載均衡。一個(gè)服務(wù)隨時(shí)可能下線,也可能應(yīng)對臨時(shí)訪問壓力增加新的服務(wù)節(jié)點(diǎn)。服務(wù)之間如何相互感知?服務(wù)如何管理?

    這就是服務(wù)發(fā)現(xiàn)的問題了。一般有兩類做法,也各有優(yōu)缺點(diǎn)?;径际峭ㄟ^zookeeper等類似技術(shù)做服務(wù)注冊信息的分布式管理。當(dāng)服務(wù)上線時(shí),服務(wù)提供者將自己的服務(wù)信息注冊到ZK(或類似框架),并通過心跳維持長鏈接,實(shí)時(shí)更新鏈接信息。服務(wù)調(diào)用者通過ZK尋址,根據(jù)可定制算法,找到一個(gè)服務(wù),還可以將服務(wù)信息緩存在本地以提高性能。當(dāng)服務(wù)下線時(shí),ZK會(huì)發(fā)通知給服務(wù)客戶端。

    另外,SpringCloud微服務(wù)系列面試題和答案全部整理好了,微信搜索Java技術(shù)棧,在后臺發(fā)送:面試,可以在線閱讀。

    客戶端做:優(yōu)點(diǎn)是架構(gòu)簡單,擴(kuò)展靈活,只對服務(wù)注冊器依賴。缺點(diǎn)是客戶端要維護(hù)所有調(diào)用服務(wù)的地址,有技術(shù)難度,一般大公司都有成熟的內(nèi)部框架支持,比如Dubbo。

    服務(wù)端做:優(yōu)點(diǎn)是簡單,所有服務(wù)對于前臺調(diào)用方透明,一般在小公司在云服務(wù)上部署的應(yīng)用采用的比較多。

微服務(wù)架構(gòu)相關(guān)知識

    4、服務(wù)掛了,如何解決

    前面提到,Monolithic方式開發(fā)一個(gè)很大的風(fēng)險(xiǎn)是,把所有雞蛋放在一個(gè)籃子里,一榮俱榮,一損俱損。而分布式最大的特性就是網(wǎng)絡(luò)是不可靠的。通過微服務(wù)拆分能降低這個(gè)風(fēng)險(xiǎn),不過如果沒有特別的保障,結(jié)局肯定是噩夢。所以當(dāng)我們的系統(tǒng)是由一系列的服務(wù)調(diào)用鏈組成的時(shí)候,我們必須確保任一環(huán)節(jié)出問題都不至于影響整體鏈路。

    分享給你:46張PPT弄懂JVM性能調(diào)優(yōu)!

    相應(yīng)的手段有很多:

    ①重試機(jī)制

    ②限流

    ③熔斷機(jī)制

    ④負(fù)載均衡

    ⑤降級(本地緩存)

微服務(wù)架構(gòu)相關(guān)知識

    這些方法基本都很明確通用,比如Netflix的Hystrix:https://github.com/Netflix/Hystrix、

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多