一、系統(tǒng)高可用(High Availability)
(1) 啥是 “高可用” ?
?? 通俗一點(diǎn)說(shuō),高可用的意思是:在高并發(fā)的情況下,系統(tǒng)仍然是可用的
?? 高可用的目的:保障業(yè)務(wù)的連續(xù)性(實(shí)現(xiàn)在用戶眼里,業(yè)務(wù)永遠(yuǎn)是正常對(duì)外提供服務(wù)的)
?? ?? 【上圖】一個(gè) SpringBoot 項(xiàng)目(apple.jar)被部署到服務(wù)器上運(yùn)行,可向其發(fā)送網(wǎng)絡(luò)請(qǐng)求對(duì)數(shù)據(jù)庫(kù)執(zhí)行增刪改查操作
?? ?? 隨著請(qǐng)求數(shù)量逐漸增多,服務(wù)器宕機(jī)(死機(jī)、掛掉)的可能性也越來(lái)越高
?? ?? 若服務(wù)器宕機(jī)會(huì)導(dǎo)致服務(wù)器上的程序無(wú)法運(yùn)行、會(huì)導(dǎo)致服務(wù)器上的項(xiàng)目無(wú)法啟動(dòng),則該服務(wù)器上的項(xiàng)目不是高可用的項(xiàng)目,很容易產(chǎn)生單點(diǎn)故障
?? ?? 單點(diǎn)故障:服務(wù)器與項(xiàng)目共生(服務(wù)器生,項(xiàng)目活;服務(wù)器掛,項(xiàng)目死)
?? 高可用希望實(shí)現(xiàn)兩個(gè)目標(biāo)??:
① 系統(tǒng)的健壯性,不允許出現(xiàn)單點(diǎn)故障
② 提高系統(tǒng)的處理能力,保證系統(tǒng)的運(yùn)行效率
(2) 集群是啥意思?
服務(wù)器就是計(jì)算機(jī)???,計(jì)算機(jī)???就是服務(wù)器。
? 如何實(shí)現(xiàn)高可用( 在高并發(fā)的情況下,系統(tǒng)仍然可用 )?
?? 思想上:可以把項(xiàng)目部署在多臺(tái)服務(wù)器上( 某臺(tái)服務(wù)器掛了,可以有其他服務(wù)器頂上 )
?? 集群(cluster):一組 相互獨(dú)立的、通過(guò)高速網(wǎng)絡(luò)互聯(lián)的計(jì)算機(jī)???的集合
- 多臺(tái)計(jì)算機(jī)???構(gòu)成一個(gè)組( 一個(gè)集群 ),這些計(jì)算機(jī)??被一種 單一系統(tǒng)的模式 加以管理
??單一系統(tǒng)的模式:雖然是多個(gè)計(jì)算機(jī)的集合,但管理和使用的時(shí)候與操縱一臺(tái)計(jì)算機(jī)無(wú)異( 感覺(jué)就像是一個(gè)單一的系統(tǒng),而不是多個(gè)計(jì)算機(jī)的集合 )
- 集群模式:多臺(tái)計(jì)算機(jī)的組合方式
?? 集群模式有三種:
??① 主備模式
??② 主從模式
??③ 高可用模式
① 主備模式
??? 多臺(tái)服務(wù)器的結(jié)合構(gòu)成集群, 其中有一臺(tái)是主服務(wù)器???
??? 正常情況下,只有主服務(wù)器???提供服務(wù)(主服務(wù)器處于 active 狀態(tài))
??? 除主服務(wù)器之外的都是備用服務(wù)器【備用服務(wù)器??平時(shí)不提供服務(wù),處于 standby( 待命 )狀態(tài)】
??? 若主服務(wù)器??宕機(jī),挑選眾多備用服務(wù)器???中的一臺(tái)作為新的主服務(wù)器??,繼續(xù)提供服務(wù)
② 主從模式
-
?? 多臺(tái)服務(wù)器構(gòu)成集群,每臺(tái)服務(wù)器都提供服務(wù)( 只是不同的服務(wù)器提供的功能不同 )
-
?? 【上圖】① 主服務(wù)器接收寫(xiě)請(qǐng)求和實(shí)時(shí)性要求高的讀請(qǐng)求;② 從服務(wù)器接收大多數(shù)的讀請(qǐng)求;③ 減少服務(wù)器宕機(jī)的可能
③ 高可用模式
?? Queries-per-second:?jiǎn)蝹€(gè)進(jìn)程每秒請(qǐng)求服務(wù)器的成功次數(shù)( 每秒查詢率 )
- ?? 多臺(tái)服務(wù)器的組合構(gòu)成集群,每臺(tái)服務(wù)器的角色和功能都一樣
?? 【上圖】若一臺(tái)服務(wù)器的 Tomcat 每秒支持 250 個(gè)并發(fā)請(qǐng)求,則三臺(tái)服務(wù)器的集合構(gòu)成的集群服務(wù)器每秒可支持750個(gè)并發(fā)請(qǐng)求
④ 總結(jié)
?? 主備集群:避免單點(diǎn)故障
?? 主從集群:避免單點(diǎn)故障;提高并發(fā)度和吞吐量
?? 高可用集群:避免單點(diǎn)故障;提高并發(fā)度和吞吐量
(3) 分布式(Distribution)
- ?? 分布式是一種系統(tǒng)部署方式
① 單機(jī)部署
??【上圖】部署應(yīng)用的方式是單機(jī)部署
- ?? 應(yīng)用服務(wù)( Tomcat )和數(shù)據(jù)庫(kù)服務(wù)( MySQL )部署在同一臺(tái)服務(wù)器上,這種部署方式叫做單機(jī)部署
- ?? 好處:Tomcat 和 MySQL 溝通的網(wǎng)絡(luò)開(kāi)銷很小
- ?? 壞處:Tomcat 和 MySQL 共享服務(wù)器的內(nèi)存空間
② 分布式部署
??【上圖】部署應(yīng)用的方式是分布式部署
?? 【上圖】應(yīng)用服務(wù)( Tomcat )部署在 192.126.111.2 服務(wù)器;數(shù)據(jù)庫(kù)服務(wù)(MySQL)部署在 192.126.111.3 服務(wù)器【Tomcat 服務(wù)和 MySQL 服務(wù)之間通過(guò)網(wǎng)絡(luò)溝通】
- ?? 缺點(diǎn):兩個(gè)服務(wù)器之間通過(guò)網(wǎng)絡(luò)溝通(存在網(wǎng)絡(luò)開(kāi)銷)
- ?? 優(yōu)點(diǎn):Tomcat 服務(wù)和 MySQL 服務(wù)獨(dú)享自己所在服務(wù)器的內(nèi)存空間
(4) 微服務(wù)
- ?? 微服務(wù)是系統(tǒng)的一種架構(gòu)設(shè)計(jì)方式
- ?? 微服務(wù)一定是分布式
- ?? 但分布式不一定是微服務(wù)
?? 上圖把一個(gè)應(yīng)用全部的功能置于同一個(gè)項(xiàng)目、同一個(gè)應(yīng)用、同一個(gè) jar 包中,這是單體應(yīng)用
?? 上圖根據(jù)模塊進(jìn)行劃分,每個(gè)模塊部署在不同的服務(wù)器中。服務(wù)之間通過(guò)網(wǎng)絡(luò)請(qǐng)求進(jìn)行訪問(wèn)和溝通,這是微服務(wù)架構(gòu)
(5) 分布式和微服務(wù)的對(duì)比
??① 單體架構(gòu)所有模塊全都耦合在同一個(gè)項(xiàng)目中(代碼量大,維護(hù)困難)
- 微服務(wù)每個(gè)模塊就相當(dāng)于一個(gè)單獨(dú)的項(xiàng)目(代碼量明顯減少,遇到問(wèn)題也好針對(duì)解決)
??② 單體架構(gòu)的所有模塊共用一個(gè)數(shù)據(jù)庫(kù),存儲(chǔ)方式比較單一
- 微服務(wù)架構(gòu)各個(gè)模塊可以使用不同的存儲(chǔ)方式(如有的用 redis,有的用 MySQL),單個(gè)模塊( 獨(dú)立的模塊 )對(duì)應(yīng)自己獨(dú)立的數(shù)據(jù)庫(kù)
??③ 單體架構(gòu)所有模塊開(kāi)發(fā)所使用的技術(shù)一樣
- 微服務(wù)每個(gè)模塊可以使用不同的開(kāi)發(fā)技術(shù),開(kāi)發(fā)模式更加靈活
二、分布式應(yīng)用
?? 大數(shù)據(jù)時(shí)代,將會(huì)面臨三個(gè)重大問(wèn)題:
① 海量數(shù)據(jù)如何存儲(chǔ) ?
② 如何對(duì)海量數(shù)據(jù)進(jìn)行運(yùn)算 ?
③ 高并發(fā)請(qǐng)求如何處理 ?
?? 這些問(wèn)題都可通過(guò)【分布式】進(jìn)行解決
?? ① 分布式存儲(chǔ)解決海量數(shù)據(jù)的存儲(chǔ)問(wèn)題
?? ② 分布式計(jì)算處理海量數(shù)據(jù)的運(yùn)算
?? ③ 分布式系統(tǒng)處理高并發(fā)的請(qǐng)求
(1) 分布式存儲(chǔ)
?? 使用 MySQL 數(shù)據(jù)庫(kù)可存儲(chǔ)數(shù)據(jù),但其存儲(chǔ)的數(shù)據(jù)是有限的。假如 MySQL 可存儲(chǔ)的數(shù)據(jù)是 1T,則固定只能存儲(chǔ) 1T 的數(shù)據(jù),若數(shù)據(jù)容量超過(guò) 1T 就無(wú)法存儲(chǔ)了
HBase:Hadoop Database 是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng)。利用 HBase 技術(shù)可在廉價(jià) PC Server 上搭建起大規(guī)模的結(jié)構(gòu)化的存儲(chǔ)集群【百度百科】
(2) 分布式計(jì)算
?? 分布式計(jì)算:分而算之,把一個(gè)大的計(jì)算任務(wù)分解為多個(gè)小的計(jì)算任務(wù)進(jìn)行計(jì)算操作
?? 通過(guò)匯總小的計(jì)算任務(wù)的計(jì)算結(jié)果,進(jìn)而得到大的計(jì)算任務(wù)的結(jié)果
??【上圖】有一個(gè) 計(jì)算海量數(shù)據(jù)中字母?jìng)€(gè)數(shù) 的任務(wù)。不同的數(shù)據(jù)被存放在不同的服務(wù)器中,計(jì)算字母?jìng)€(gè)數(shù)的代碼放在 A 服務(wù)器。把每個(gè)服務(wù)器的數(shù)據(jù)都移動(dòng)到 A 服務(wù)器,再進(jìn)行計(jì)算(非常耗費(fèi)時(shí)間、性能低)
?? 最好的做法是: 把計(jì)算字母?jìng)€(gè)數(shù)的代碼移動(dòng)到不同的服務(wù)器,在數(shù)據(jù)所在的服務(wù)器中統(tǒng)計(jì)完字母?jìng)€(gè)數(shù)后,再把計(jì)算結(jié)果進(jìn)行匯總【不耗時(shí):移動(dòng)運(yùn)算代碼所花費(fèi)的時(shí)間肯定低于移動(dòng)數(shù)據(jù)所花費(fèi)的時(shí)間?】
?? 一份 計(jì)算字母?jìng)€(gè)數(shù)的代碼 可能最多100M,而不同服務(wù)器上的一份數(shù)據(jù)肯定是遠(yuǎn)大于100M的,移動(dòng)代碼(運(yùn)算)比移動(dòng)數(shù)據(jù)劃算
分布式計(jì)算強(qiáng)調(diào):移動(dòng)運(yùn)算,而不是移動(dòng)數(shù)據(jù)
(3) 分布式系統(tǒng)
?? 把應(yīng)用服務(wù)(Tomcat)和數(shù)據(jù)庫(kù)服務(wù)(MySQL)部署在不同的服務(wù)器上,Tomcat 和 MySQL 之間通過(guò)網(wǎng)絡(luò)進(jìn)行溝通
三、分布式協(xié)調(diào)服務(wù)(以 ZooKeeper 為例)
?? 【上圖】客戶端若想訪問(wèn)秒殺服務(wù),理論上, 需要知道有哪些秒殺服務(wù)器可以訪問(wèn) ?
?? 理論上, 需要知道秒殺服務(wù)的動(dòng)態(tài)變化(哪些服務(wù)器已宕機(jī),哪些服務(wù)器上線了)
?? 但實(shí)際上,客戶端并沒(méi)有必要知道服務(wù)器的狀態(tài)
?? 客戶端只需要發(fā)送請(qǐng)求就可以了,實(shí)際上是那個(gè)服務(wù)器處理請(qǐng)求?客戶端沒(méi)有必要知道
?? ZooKeeper 在分布式系統(tǒng)中充當(dāng)協(xié)調(diào)者的角色,幫助客戶端和分布式服務(wù)之間進(jìn)行溝通,保證系統(tǒng)的正常運(yùn)行。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-782802.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-782802.html
到了這里,關(guān)于【分布式和微服務(wù)1】一篇文章詳細(xì)了解分布式和微服務(wù)的基本概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!