互聯(lián)網(wǎng)金融微服務(wù)架構(gòu)設(shè)計(jì)_第1頁(yè)
互聯(lián)網(wǎng)金融微服務(wù)架構(gòu)設(shè)計(jì)_第2頁(yè)
互聯(lián)網(wǎng)金融微服務(wù)架構(gòu)設(shè)計(jì)_第3頁(yè)
互聯(lián)網(wǎng)金融微服務(wù)架構(gòu)設(shè)計(jì)_第4頁(yè)
互聯(lián)網(wǎng)金融微服務(wù)架構(gòu)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、討論內(nèi)容,互聯(lián)話題: 獨(dú)立訪問者數(shù)量(unique visitors)、 重復(fù)訪問者數(shù)量(repeat visitors)、 頁(yè)面瀏覽數(shù)(page views)理解,SOA(面向服務(wù)的架構(gòu)),面向服務(wù)的架構(gòu)(SOA)是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種各樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。,對(duì)于一個(gè)SOA解決方案來(lái)說就需要能夠滿足這些場(chǎng)景的業(yè)務(wù)需求,能夠解決其中的各種技術(shù)問題。需要解決的基本問題包括: 服務(wù)的描述問題

2、,描述服務(wù)提供哪些功能,適用服務(wù)有哪些要求 服務(wù)的注冊(cè)和查找問題,定義好的服務(wù)信息在哪發(fā)布,如何發(fā)布,到哪查找,如何查找 服務(wù)通訊方式,包括具體如何向服務(wù)發(fā)送請(qǐng)求,并獲取應(yīng)答,支持什么樣的交互方式。 服務(wù)流程問題,對(duì)服務(wù)流程的靈活定制,執(zhí)行監(jiān)控等提供管理 服務(wù)的管理問題,服務(wù)的提供,撤銷,改變這些情況如何進(jìn)行管理 服務(wù)質(zhì)量問題,如何保障安全性,通訊的可靠性,以及事務(wù)完整性如何保證 整個(gè)系統(tǒng)的效率問題,包括查找效率,通訊效率,服務(wù)運(yùn)行處理效率等 系統(tǒng)能夠提供什么樣的開發(fā)工具,支持什么樣的開發(fā)模式,系統(tǒng)運(yùn)行情況是否可以及時(shí)了解,是否可以及時(shí)獲取故障信息,是否可以提供運(yùn)行狀態(tài)信息,以利于系統(tǒng)的優(yōu)化。

3、,ESB(企業(yè)服務(wù)總線),ESB全稱為Enterprise Service Bus,即企業(yè)服務(wù)總線。它是傳統(tǒng)中間件技術(shù)與XML、Web服務(wù)等技術(shù)結(jié)合的產(chǎn)物。ESB提供了網(wǎng)絡(luò)中最基本的連接中樞,是構(gòu)筑企業(yè)神經(jīng)系統(tǒng)的必要元素。,大規(guī)模分布式的企業(yè)應(yīng)用需要相對(duì)簡(jiǎn)單而實(shí)用的中間件技術(shù)來(lái)簡(jiǎn)化和統(tǒng)一越來(lái)越復(fù)雜、繁瑣的企業(yè)級(jí)信息系統(tǒng)平臺(tái)。面向服務(wù)體系架構(gòu)(SOA)是能夠?qū)?yīng)用程序的不同功能單元通過服務(wù)之間定義良好的接口和契約聯(lián)系起來(lái)。SOA使用戶可以不受限制地重復(fù)使用軟件、把各種資源互連起來(lái),只要IT人員選用標(biāo)準(zhǔn)接口包裝舊的應(yīng)用程序、把新的應(yīng)用程序構(gòu)建成服務(wù),那么其他應(yīng)用系統(tǒng)就可以很方便的使用這些功能服務(wù)。

4、,SOA 與 ESB的區(qū)別,SOA是一種方式或架構(gòu),用于具有自服務(wù)功能的應(yīng)用程序,應(yīng)用程序隨后通過用戶接口(UI)或經(jīng)過工作流將其聚合成用戶需要的功能。服務(wù)不僅是可復(fù)用代碼的組件,更是運(yùn)行程序的一部分,客戶端可以不必合并它自己的代碼直接調(diào)用該程序。服務(wù)是與業(yè)務(wù)相關(guān)的一個(gè)定義。 ESB是用于調(diào)節(jié) SOA 中的調(diào)用者及服務(wù)提供者的機(jī)制。它使得調(diào)用者在不知道提供者或提供者使用的地址的情況下調(diào)用該服務(wù)。ESB 可在多個(gè)提供者、提供者的負(fù)載平衡及停止使用提供者(當(dāng)失效時(shí))之間進(jìn)行選擇,并且基于調(diào)用者的需求在提供者之間進(jìn)行選擇,這些提供者提供了各種質(zhì)量級(jí)別的服務(wù)。ESB 能夠調(diào)節(jié)同步或異步服務(wù),事實(shí)上對(duì)于

5、同一服務(wù)可以提供同步及異步的訪問。 因此 SOA 和 ESB 是相對(duì)應(yīng)的。具備 SOA 的應(yīng)用程序應(yīng)當(dāng)使用 ESB 來(lái)調(diào)用它的服務(wù)。SOA 和 ESB 不必用 Web 服務(wù)實(shí)現(xiàn)。然而,經(jīng)常需要 ESB 來(lái)調(diào)用服務(wù),該服務(wù)提供自我描述及發(fā)現(xiàn)的能力,這由 Web 服務(wù)幫助完成。在 SOA 中經(jīng)常需要由一種技術(shù)實(shí)現(xiàn)的調(diào)用者,它們用于調(diào)用由其它技術(shù)實(shí)現(xiàn)的服務(wù),這也由 Web 服務(wù)幫助完成。所以 SOA、ESB 和 Web 服務(wù)都集中于創(chuàng)建這樣的領(lǐng)域:一個(gè)應(yīng)用程序中的功能在其它應(yīng)用程序中也是可用的,本質(zhì)是復(fù)用性。,SAAS (軟件即服務(wù)),SaaS是Software-as-a-Service(軟件即服務(wù)

6、)的簡(jiǎn)稱,它與“on-demand software”(按需軟件),the application service provider(ASP,應(yīng)用服務(wù)提供商),hosted software(托管軟件)所具有相似的含義。它是一種通過Internet提供軟件的模式,廠商將應(yīng)用軟件統(tǒng)一部署在自己的服務(wù)器上,客戶可以根據(jù)自己實(shí)際需求,通過互聯(lián)網(wǎng)向廠商定購(gòu)所需的應(yīng)用軟件服務(wù),按定購(gòu)的服務(wù)多少和時(shí)間長(zhǎng)短向廠商支付費(fèi)用,并通過互聯(lián)網(wǎng)獲得廠商提供的服務(wù)。,對(duì)企業(yè)來(lái)說,SaaS的優(yōu)點(diǎn): 從技術(shù)方面來(lái)看:SaaS是簡(jiǎn)單的部署,不需要購(gòu)買任何硬件,剛開始只需要簡(jiǎn)單注冊(cè)即可。企業(yè)無(wú)需再配備IT方面的專業(yè)技術(shù)人員,同

7、時(shí)又能得到最新的技術(shù)應(yīng)用,滿足企業(yè)對(duì)信息管理的需求。 從投資方面來(lái)看:企業(yè)只以相對(duì)低廉的“月費(fèi)”方式投資,不用一次性投資到位,不占用過多的營(yíng)運(yùn)資金,從而緩解企業(yè)資金不足的壓力;不用考慮成本折舊問題,并能及時(shí)獲得最新硬件平臺(tái)及最佳解決方案。 從維護(hù)和管理方面來(lái)看:由于企業(yè)采取租用的方式來(lái)進(jìn)行物流業(yè)務(wù)管理,不需要專門的維護(hù)和管理人員,也不需要為維護(hù)和管理人員支付額外費(fèi)用。很大程度上緩解企業(yè)在人力、財(cái)力上的壓力,使其能夠集中資金對(duì)核心業(yè)務(wù)進(jìn)行有效的運(yùn)營(yíng);SaaS能使用戶在世界上都是一個(gè)完全獨(dú)立的系統(tǒng)。如果您連接到網(wǎng)絡(luò),就可以訪問系統(tǒng)。 對(duì)企業(yè)來(lái)說,SaaS的缺點(diǎn) 1.安全性:企業(yè),尤其是大型企業(yè),很

8、不情愿使用SaaS正是因?yàn)榘踩珕栴},他們要保護(hù)他們的核心數(shù)據(jù),不希望這些核心數(shù)據(jù)由第三方來(lái)負(fù)責(zé)。 2.標(biāo)準(zhǔn)化:SaaS解決方案缺乏標(biāo)準(zhǔn)化。這個(gè)行業(yè)剛剛起步,沒有明確的解決辦法,一家公司可以設(shè)計(jì)建立一個(gè)解決方案。鑒于復(fù)雜和高度可定制的ERP產(chǎn)品,這是一個(gè)冒險(xiǎn)的建議。,PAAS(平臺(tái)即服務(wù)),PaaS是Platform-as-a-Service的縮寫,意思是平臺(tái)即服務(wù)。 把服務(wù)器平臺(tái)作為一種服務(wù)提供的商業(yè)模式。通過網(wǎng)絡(luò)進(jìn)行程序提供的服務(wù)稱之為SaaS(Software as a Service),而云計(jì)算時(shí)代相應(yīng)的服務(wù)器平臺(tái)或者開發(fā)環(huán)境作為服務(wù)進(jìn)行提供就成為了PaaS(Platform as a

9、Service)。 所謂PaaS實(shí)際上是指將軟件研發(fā)的平臺(tái)(計(jì)世資訊定義為業(yè)務(wù)基礎(chǔ)平臺(tái))作為一種服務(wù),以SaaS的模式提交給用戶。因此,PaaS也是SaaS模式的一種應(yīng)用。但是,PaaS的出現(xiàn)可以加快SaaS的發(fā)展,尤其是加快SaaS應(yīng)用的開發(fā)速度。在2007年國(guó)內(nèi)外SaaS廠商先后推出自己的PAAS平臺(tái)。,PaaS區(qū)別 簡(jiǎn)單地說,PaaS平臺(tái)就是指云環(huán)境中的應(yīng)用基礎(chǔ)設(shè)施服務(wù),也可以說是中間件即服務(wù)。PaaS平臺(tái)在云架構(gòu)中位于中間層,其上層是SaaS,其下層是IaaS3 。在傳統(tǒng)On-Premise部署方式下,應(yīng)用基礎(chǔ)設(shè)施即中間件的種類非常多, 有應(yīng)用服務(wù)器,數(shù)據(jù)庫(kù),ESBs, BPM, Po

10、rtal,消息中間件,遠(yuǎn)程對(duì)象調(diào)用中間件等等。對(duì)于PaaS平臺(tái),Gartner把它們分為兩類,一類是應(yīng)用部署和運(yùn)行平臺(tái)APaaS(application platform as a service),另一類是集成平臺(tái)IPaaS(integration as a service)。 人們經(jīng)常說的PaaS平臺(tái)基本上是指APaaS,如Force和Google App Engine。 國(guó)內(nèi)日前上線的中國(guó)云應(yīng)用平臺(tái),能夠?yàn)檐浖S商提供領(lǐng)先的IaaS基礎(chǔ)平臺(tái),使得軟件廠商能夠?qū)⒆⒁饬性谄鋺?yīng)用產(chǎn)品的云化之上,而將對(duì)基礎(chǔ)資源的需求,包括云服務(wù)器、云存儲(chǔ)、云監(jiān)控等完全依托在理念領(lǐng)先、技術(shù)成熟、安全可靠的Ia

11、aS平臺(tái)上。,IaaS (基礎(chǔ)設(shè)施即服務(wù)),IaaS(Infrastructure as a Service),即基礎(chǔ)設(shè)施即服務(wù)。 消費(fèi)者通過Internet 可以從完善的計(jì)算機(jī)基礎(chǔ)設(shè)施獲得服務(wù)。這類服務(wù)稱為基礎(chǔ)設(shè)施即服務(wù)?;?Internet 的服務(wù)(如存儲(chǔ)和數(shù)據(jù)庫(kù))是 IaaS的一部分。Internet上其他類型的服務(wù)包括平臺(tái)即服務(wù)(Platform as a Service,PaaS)和軟件即服務(wù)(Software as a Service,SaaS)。PaaS提供了用戶可以訪問的完整或部分的應(yīng)用程序開發(fā),SaaS則提供了完整的可直接使用的應(yīng)用程序,比如通過 Internet管理企業(yè)資

12、源。,根據(jù)NIST(NationalInstituteofStandardsandTechnology,美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院)的權(quán)威定義,云計(jì)算的服務(wù)模式有SPI(即SaaS、PaaS和IaaS)這三個(gè)大類或?qū)哟?。這是目前被業(yè)界最廣 泛認(rèn)同的劃分。PaaS和IaaS源于SaaS理念。PaaS和IaaS可以直接通過SOA/Web Services向平臺(tái)用戶提供服務(wù), 也可以作為SaaS模式的支撐平臺(tái)間接向最終用戶服務(wù),IaaS中間件 (包括HPC/Gri中間件,PVM/MPI,機(jī)群/集群,Beowulf,DRS作業(yè)調(diào)度,并行文件系統(tǒng)等),云系統(tǒng) (效用計(jì)算機(jī)SaaS BI/BPM,BSS/O

13、SS,WS/SOA/API),PaaS中間件 (包括應(yīng)用服務(wù)器MQ/ESB/SOA,多層次多租戶SaaS模式支撐,Hypervisor,OSGI等),IaaS 、 PaaS、 SaaS,1. SaaS:提供給客戶的服務(wù)是運(yùn)營(yíng)商運(yùn)行在云計(jì)算基礎(chǔ)設(shè)施上的應(yīng)用程序,用戶可以在各種設(shè)備上通過客戶端界面訪問,如瀏覽器。消費(fèi)者不需要管理或控制任何云計(jì)算基礎(chǔ)設(shè)施,包括網(wǎng)絡(luò)、服務(wù)器、操作系統(tǒng)、存儲(chǔ)等等; 2. PaaS:提供給消費(fèi)者的服務(wù)是把客戶采用提供的開發(fā)語(yǔ)言和工具(例如Java,python, .Net等)開發(fā)的 或收購(gòu)的應(yīng)用程序部署到供應(yīng)商的云計(jì)算基礎(chǔ)設(shè)施上去??蛻舨恍枰芾砘蚩刂频讓拥脑苹A(chǔ)設(shè)施,包

14、括網(wǎng)絡(luò)、服務(wù)器、操作系統(tǒng)、存儲(chǔ)等,但客戶能控制部署的應(yīng)用程序,也可能控制運(yùn)行應(yīng)用程序的托管環(huán)境配置; 3. IaaS:提供給消費(fèi)者的服務(wù)是對(duì)所有計(jì)算基礎(chǔ)設(shè)施的利用,包括處理CPU、內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)和其它基本的計(jì)算資源,用戶能夠部署和運(yùn)行任意軟件,包括操作系統(tǒng)和應(yīng)用程序。消費(fèi)者不管理或控制任何云計(jì)算基礎(chǔ)設(shè)施,但能控制操作系統(tǒng)的選擇、存儲(chǔ)空間、部署的應(yīng)用,也有可能獲得有限制的網(wǎng)絡(luò)組件(例如路由器、,防火墻,、負(fù)載均衡器等)的控制。,SOA和SaaS的區(qū)別,1. SOA包括了關(guān)于軟件是如何被架構(gòu)起來(lái)的東西,而SaaS是關(guān)于軟件是如何被應(yīng)用的。 2. 在SaaS當(dāng)中,應(yīng)用程序可以像任何服務(wù)一樣被傳遞,

15、就像你家中電話的語(yǔ)音一樣,看起來(lái)似乎就是為你的需求量體裁衣得到的。而SOA的定義和這個(gè)無(wú)絲毫的聯(lián)系。SOA支持的服務(wù),都是些離散的可以再使用的事務(wù)處理,這些事務(wù)處理合起來(lái)就組成了一個(gè)業(yè)務(wù)流程,是從基本的系統(tǒng)中提取出來(lái)的抽象代碼。 3. SOA是一個(gè)框架的方法,而SaaS是一種傳遞模型。 4. 通過SaaS傳遞Web服務(wù)并不需要SOA。 5. SaaS主要是指一個(gè)軟件企業(yè)向其它企業(yè)提供軟件服務(wù)。而SOA一般是企業(yè)內(nèi)部搭建系統(tǒng)的基礎(chǔ)。SaaS注重的是提供服務(wù)的思維。而SOA注重的是實(shí)現(xiàn)服務(wù)的思維。,什么是微服務(wù)架構(gòu),微服務(wù)架構(gòu)模式(Microservice Architect Pattern)。近

16、兩年在服務(wù)的瘋狂增長(zhǎng)與云計(jì)算技術(shù)的進(jìn)步,讓微服務(wù)架構(gòu)受到重點(diǎn)關(guān)注,微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價(jià)值。每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級(jí)的通信機(jī)制互相溝通(通常是基于HTTP的RESTful API)。每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立地部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等。另外,應(yīng)盡量避免統(tǒng)一的、集中式的服務(wù)管理機(jī)制,對(duì)具體的一個(gè)服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下文,選擇合適的語(yǔ)言、工具對(duì)其進(jìn)行構(gòu)建。,微服務(wù)架構(gòu)優(yōu)勢(shì) 首先簡(jiǎn)單介紹了微服務(wù)(Microservices)的內(nèi)涵及優(yōu)勢(shì),他表示,微服務(wù)架構(gòu)的

17、本質(zhì),是用一些功能比較明確、業(yè)務(wù)比較精練的服務(wù)去解決更大、更實(shí)際的問題。微服務(wù)架構(gòu)將服務(wù)拆分,分別采用相對(duì)獨(dú)立的服務(wù)對(duì)各方面進(jìn)行管理,彼此之間使用統(tǒng)一的接口來(lái)進(jìn)行交流,架構(gòu)變得復(fù)雜,優(yōu)勢(shì)也很明顯: 復(fù)雜度可控:在將應(yīng)用分解的同時(shí),規(guī)避了原本復(fù)雜度無(wú)止境的積累。每一個(gè)微服務(wù)專注于單一功能,并通過定義良好的接口清晰表述服務(wù)邊界。由于體積小、復(fù)雜度低,每個(gè)微服務(wù)可由一個(gè)小規(guī)模開發(fā)團(tuán)隊(duì)完全掌控,易于保持高可維護(hù)性和開發(fā)效率。,什么是微服務(wù)架構(gòu),微服務(wù)架構(gòu)優(yōu)勢(shì) 獨(dú)立部署:由于微服務(wù)具備獨(dú)立的運(yùn)行進(jìn)程,所以每個(gè)微服務(wù)也可以獨(dú)立部署。當(dāng)某個(gè)微服務(wù)發(fā)生變更時(shí)無(wú)需編譯、部署整個(gè)應(yīng)用。由微服務(wù)組成的應(yīng)用相當(dāng)于具備

18、一系列可并行的發(fā)布流程,使得發(fā)布更加高效,同時(shí)降低對(duì)生產(chǎn)環(huán)境所造成的風(fēng)險(xiǎn),最終縮短應(yīng)用交付周期。 技術(shù)選型靈活:微服務(wù)架構(gòu)下,技術(shù)選型是去中心化的。每個(gè)團(tuán)隊(duì)可以根據(jù)自身服務(wù)的需求和行業(yè)發(fā)展的現(xiàn)狀,自由選擇最適合的技術(shù)棧。由于每個(gè)微服務(wù)相對(duì)簡(jiǎn)單,當(dāng)需要對(duì)技術(shù)棧進(jìn)行升級(jí)時(shí)所面臨的風(fēng)險(xiǎn)較低,甚至完全重構(gòu)一個(gè)微服務(wù)也是可行的。 容錯(cuò):當(dāng)某一組建發(fā)生故障時(shí),在單一進(jìn)程的傳統(tǒng)架構(gòu)下,故障很有可能在進(jìn)程內(nèi)擴(kuò)散,形成應(yīng)用全局性的不可用。在微服務(wù)架構(gòu)下,故障會(huì)被隔離在單個(gè)服務(wù)中。若設(shè)計(jì)良好,其他服務(wù)可通過重試、平穩(wěn)退化等機(jī)制實(shí)現(xiàn)應(yīng)用層面的容錯(cuò)。 擴(kuò)展:?jiǎn)螇K架構(gòu)應(yīng)用也可以實(shí)現(xiàn)橫向擴(kuò)展,就是將整個(gè)應(yīng)用完整的復(fù)制到不

19、同的節(jié)點(diǎn)。當(dāng)應(yīng)用的不同組件在擴(kuò)展需求上存在差異時(shí),微服務(wù)架構(gòu)便體現(xiàn)出其靈活性,因?yàn)槊總€(gè)服務(wù)可以根據(jù)實(shí)際需求獨(dú)立進(jìn)行擴(kuò)展。,SOA和微服務(wù)架構(gòu)的區(qū)別,如果一句話來(lái)談SOA和微服務(wù)的區(qū)別,即微服務(wù)不再?gòu)?qiáng)調(diào)傳統(tǒng)SOA架構(gòu)里面比較重的ESB企業(yè)服務(wù)總線,同時(shí)SOA的思想進(jìn)入到單個(gè)業(yè)務(wù)系統(tǒng)內(nèi)部實(shí)現(xiàn)真正的組件化。 微服務(wù)架構(gòu)強(qiáng)調(diào)的第一個(gè)重點(diǎn)就是業(yè)務(wù)系統(tǒng)需要徹底的組件化和服務(wù)化,原有的單個(gè)業(yè)務(wù)系統(tǒng)會(huì)拆分為多個(gè)可以獨(dú)立開發(fā),設(shè)計(jì),運(yùn)行和運(yùn)維的小應(yīng)用。這些小應(yīng)用之間通過服務(wù)完成交互和集成。每個(gè)小應(yīng)用從前端web ui,到控制層,邏輯層,數(shù)據(jù)庫(kù)訪問,數(shù)據(jù)庫(kù)都完全是獨(dú)立的一套。在這里我們不用組件而用小應(yīng)用這個(gè)詞更加

20、合適,每個(gè)小應(yīng)用除了完成自身本身的業(yè)務(wù)功能外,重點(diǎn)就是還需要消費(fèi)外部其它應(yīng)用暴露的服務(wù),同時(shí)自身也將自身的能力朝外部發(fā)布為服務(wù)。,首先對(duì)于應(yīng)用本身暴露出來(lái)的服務(wù),是和應(yīng)用一起部署的,即服務(wù)本身并不單獨(dú)部署,服務(wù)本身就是業(yè)務(wù)組件已有的接口能力發(fā)布和暴露出來(lái)的,其次微服務(wù)架構(gòu)本身來(lái)源于互聯(lián)網(wǎng)的思路,因此組件對(duì)外發(fā)布的服務(wù)強(qiáng)調(diào)了采用HTTP Rest API的方式來(lái)進(jìn)行。,微服務(wù)的基本思想在于考慮圍繞著業(yè)務(wù)領(lǐng)域組件來(lái)創(chuàng)建應(yīng)用,這些就應(yīng)用可獨(dú)立地進(jìn)行開發(fā)、管理和加速。在分散的組件中使用微服務(wù)云架構(gòu)和平臺(tái)使部署、管理和服務(wù)功能交付變得更加簡(jiǎn)單。,互聯(lián)網(wǎng)高并發(fā)相關(guān)名詞,頁(yè)面瀏覽數(shù)(page views )

21、,獨(dú)立訪問者數(shù)量(unique visitors),重復(fù)訪問者數(shù)量(repeat visitors),每個(gè)訪問者的頁(yè)面瀏覽數(shù)(Page Views per user),唯一身份瀏覽量(Unique PageViews),高并發(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ì)列解決的方式也可以處理,比如我們?cè)诟?jìng)拍商品、轉(zhuǎn)發(fā)評(píng)論微博或者是秒殺商品等,同一時(shí)間訪問量特別大,隊(duì)列在此起到特別的作用,將 所有請(qǐng)求放入隊(duì)列,以毫秒計(jì)時(shí)單位,有序的進(jìn)行,從而不會(huì)出現(xiàn)數(shù)據(jù)丟失系統(tǒng)數(shù)據(jù)不正確的情況

22、。,經(jīng)過查資料,高并發(fā)的解決方法有倆種,一種是使用緩存、另一種是使用生成靜態(tài)頁(yè)面;還有就是從最基礎(chǔ)的地方優(yōu)化我們寫代碼減少不必要的資源浪費(fèi):( 1.不要頻繁的new對(duì)象,對(duì)于在整個(gè)應(yīng)用中只需要存在一個(gè)實(shí)例的類使用單例模式.對(duì)于String的連接操作,使用StringBuffer或者StringBuilder.對(duì)于utility類型的類通過靜態(tài)方法來(lái)訪問。 2. 避免使用錯(cuò)誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayLi

23、st比Vector性能好。),互聯(lián)網(wǎng)高并發(fā)系統(tǒng)-需要解決的問題,一:應(yīng)用緩存,二:HTTP緩存,三:多級(jí)緩存,四:池化,五:異步并發(fā),六:擴(kuò)容,七:隊(duì)列,高并發(fā)-應(yīng)用緩存,堆緩存 使用Java堆內(nèi)存來(lái)存儲(chǔ)緩存對(duì)象。使用堆緩存的好處是沒有序列化/反序列化,是最快的緩存。缺點(diǎn)也很明顯,當(dāng)緩存的數(shù)據(jù)量很大時(shí),GC(垃圾回收)暫停時(shí)間會(huì)變長(zhǎng),存儲(chǔ)容量受限于堆空間大小。一般通過軟引用/弱引用來(lái)存儲(chǔ)緩存對(duì)象,即當(dāng)堆內(nèi)存不足時(shí),可以強(qiáng)制回收這部分內(nèi)存釋放堆內(nèi)存空間。一般使用堆緩存存儲(chǔ)較熱的數(shù)據(jù)。有Guava Cache、Ehcache 3.x、MapDB實(shí)現(xiàn),堆外緩存 即緩存數(shù)據(jù)存儲(chǔ)在堆外內(nèi)存,可以減少GC

24、暫停時(shí)間(堆對(duì)象轉(zhuǎn)移到堆外,GC掃描和移動(dòng)的對(duì)象變少),但是,讀取數(shù)據(jù)時(shí)需要序列化/反序列化,因此會(huì)比堆緩存要慢很多。有Ehcache 3.x、MapDB實(shí)現(xiàn),磁盤緩存 即緩存數(shù)據(jù)存儲(chǔ)在磁道上,在JVM重啟時(shí)數(shù)據(jù)還存在的,而堆緩存/堆外緩存數(shù)據(jù)會(huì)丟失,需要重新加載。有Ehcache 3.x、MapDB實(shí)現(xiàn),高并發(fā)-應(yīng)用緩存,分布式緩存 之前緩存提到是進(jìn)程內(nèi)緩存和磁盤緩存,在多JVM實(shí)例的情況下,會(huì)存在兩個(gè)問題: 1、單機(jī)容量問題; 2、數(shù)據(jù)一致性問題(多臺(tái)JVM實(shí)例的緩存數(shù)據(jù)不一致怎么辦?),這個(gè)問題不用糾結(jié),既然數(shù)據(jù)允許緩存,則表示允許一定時(shí)間內(nèi)的不一致,因此可以設(shè)置緩存數(shù)據(jù)的過期時(shí)間來(lái)定期

25、更新數(shù)據(jù); 3、緩存不命中時(shí),需要回源到DB/服務(wù)請(qǐng)求多變問題:每個(gè)實(shí)例在緩存不命中的情況下都會(huì)回源到DB加載數(shù)據(jù),因此多實(shí)例后DB整體的訪問量變多了解決辦法是可以使用如一致性哈希分片算法。因此,這些情況可以考慮使用分布式緩存來(lái)解決。 可以使用ehcache clustered(配合 Terracotta server) 實(shí)現(xiàn)JAVA進(jìn)程間分布式緩存。最好的辦法是使用redis實(shí)現(xiàn)分布式緩存。,高并發(fā)- HTTP緩存,瀏覽器緩存是指當(dāng)我們使用瀏覽器訪問一些網(wǎng)站頁(yè)面或者h(yuǎn)ttp服務(wù)時(shí),根據(jù)服務(wù)端返回的緩存設(shè)置響應(yīng)頭將響應(yīng)內(nèi)容緩存到瀏覽器,下次可以直接使用緩存內(nèi)容或者僅需要去服務(wù)端驗(yàn)證內(nèi)容是否過期

26、即可。這樣的好處可以減少瀏覽器和服務(wù)端之間來(lái)回傳輸?shù)臄?shù)據(jù)量,節(jié)省帶寬提升性能。,解決辦法:內(nèi)容不需要?jiǎng)討B(tài)(計(jì)算、渲染等)速度更快,內(nèi)容越接近于用戶速度越快。像apache traffic server、squid、varnish、nginx等技術(shù)都可以來(lái)進(jìn)行內(nèi)容緩存。還有CDN就是用來(lái)加速用戶訪問的:,即用戶首先訪問到全國(guó)各地的CDN節(jié)點(diǎn)(使用如ATS、Squid實(shí)現(xiàn)),如果CDN沒命中,會(huì)回源到中央nginx集群,該集群如果沒有命中緩存(該集群的緩存不是必須的,要根據(jù)實(shí)際命中情況等決定),最后回源到后端應(yīng)用集群。,高并發(fā)- 多級(jí)緩存(分布式緩存),高并發(fā)-池化,在應(yīng)用系統(tǒng)開發(fā)過程中,我們經(jīng)常

27、會(huì)用到池化技術(shù),如對(duì)象池、連接池、線程池等,通過池化來(lái)減少一些消耗,以提升性能。對(duì)象池通過復(fù)用對(duì)象從而減少創(chuàng)建對(duì)象、垃圾回收 的開銷。但是,池化不能太大,太大會(huì)影響GC時(shí)的掃描時(shí)間。連接池如數(shù)據(jù)庫(kù)連接池、Redis連接池、Http連接池,通過復(fù)用TCP連接減少創(chuàng)建和釋放連接的時(shí)間來(lái)提升性能。線程池也是類似的,通過復(fù)用線程提升性能。也就是說池化的目的就是通過復(fù)用技術(shù)提升性能。,高并發(fā)-擴(kuò)容,1、讀寫分離:當(dāng)數(shù)據(jù)庫(kù)訪問量還不是很大的時(shí)候,我們可以適當(dāng)增加服務(wù)器,數(shù)據(jù)庫(kù)主從復(fù)制的方式將讀寫分離,2、垂直分區(qū):當(dāng)寫入操作一旦增加的時(shí)候,那么主從數(shù)據(jù)庫(kù)將花更多的時(shí)間的放在數(shù)據(jù)同步上,這個(gè)時(shí)候服務(wù)器也是不

28、堪重負(fù)的;那么就有了數(shù)據(jù)的垂直分區(qū),數(shù)據(jù)的垂直分區(qū)思路是將寫入操作比較頻繁的數(shù)據(jù)表,如用戶表_user,或者訂單表_orders,那么我們就可以把這個(gè)兩個(gè)表分離出來(lái),放在不同的服務(wù)器,如果這兩個(gè)表和其他表存在聯(lián)表查詢,那么就只能把原來(lái)的sql語(yǔ)句給拆分了,先查詢一個(gè)表,在查詢另一個(gè),雖然說這個(gè)會(huì)消耗更過性能,但比起那種大量數(shù)據(jù)同步,負(fù)擔(dān)還是減輕了不少;,3、水平分區(qū):但是往往事情不盡人意,可能采取垂直分區(qū)能撐一段時(shí)間,由于網(wǎng)站太火了,訪問量又每日100w,一下子蹦到了1000w,這個(gè)時(shí)候可以采取數(shù)據(jù)的進(jìn)行分離,我們可以根據(jù)user的Id不同進(jìn)行分配,如采取%2的形式,或者%10的形式,當(dāng)然這種

29、形式對(duì)以后的擴(kuò)展有了很大的限制,當(dāng)我由10個(gè)分區(qū)增加到20個(gè)的時(shí)候,所有的數(shù)據(jù)都得重新分區(qū),那么將是一個(gè)的很龐大的計(jì)算量;以下提供幾種常見的算法: 哈希算法:就是采用user_id%的方式; 范圍:可以根據(jù)user_id字符值范圍分區(qū),如1-1000為一區(qū),1001-2000則是另一個(gè)區(qū)等; 映射關(guān)系:就是將user_id存在的所對(duì)應(yīng)的分區(qū)放在數(shù)據(jù)庫(kù)中保存,當(dāng)用戶操作時(shí)先去查詢所在分區(qū),再進(jìn)行操作;,高并發(fā)-擴(kuò)容分布式數(shù)據(jù)庫(kù),4、分布式數(shù)據(jù)庫(kù)(終極方案):TDSQL架構(gòu)采用自動(dòng)擴(kuò)容機(jī)制、分表邏輯、擴(kuò)容流程、容災(zāi)機(jī)制、強(qiáng)同步方案解決分布式數(shù)據(jù)庫(kù)擴(kuò)容方案,高并發(fā)-擴(kuò)容分布式數(shù)據(jù)庫(kù),系統(tǒng)由三個(gè)模塊組

30、成:Scheduler、Agent、網(wǎng)關(guān),三個(gè)模塊的交互都是通過ZooKeeper完成,極大簡(jiǎn)化了各個(gè)節(jié)點(diǎn)之間的通信機(jī)制,相對(duì)于第二代HOLD的開發(fā)簡(jiǎn)單了很多。 Scheduler作為集群的管理調(diào)度中心,主要功能包括: 1、管理set,提供創(chuàng)建、刪除set、set內(nèi)節(jié)點(diǎn)替換等工作;2、所有的DDL操作統(tǒng)一下發(fā)和調(diào)度;3、監(jiān)控set內(nèi)各個(gè)節(jié)點(diǎn)的存活狀態(tài),當(dāng)set內(nèi)主節(jié)點(diǎn)故障,發(fā)起高一致性主備切換流程;4、監(jiān)控各個(gè)set的CPU、磁盤容量、各個(gè)表的資源消耗情況,必要的時(shí)候自動(dòng)發(fā)起擴(kuò)容流程;5、Scheduler自身的容災(zāi)通過ZooKeqzer的選舉機(jī)制完成,保證中心控制節(jié)點(diǎn)無(wú)單點(diǎn)。 Agent模塊

31、負(fù)責(zé)監(jiān)控本機(jī)MySQL實(shí)例的運(yùn)行情況,主要功能包括: 1、用短連接的方式周期性訪問本機(jī)的MySQL實(shí)例,檢測(cè)是否可讀、可寫,若發(fā)生異常,會(huì)將異常信息上報(bào)到ZooKeeper,最終會(huì)由上面描述的Scheduler模塊檢測(cè)到這個(gè)異常情況,從而發(fā)起容災(zāi)切換; 2、檢測(cè)主備復(fù)制的執(zhí)行情況,會(huì)定期上報(bào)主備復(fù)制的延時(shí)和延遲的事務(wù)數(shù),若發(fā)生了主備切換,自動(dòng)向新主機(jī)重建主備,因此MySQL的主備不需要DBA干預(yù),對(duì)于新增的實(shí)例會(huì)自動(dòng)采用xtrabackup通過主機(jī)自動(dòng)重建數(shù)據(jù);,高并發(fā)-擴(kuò)容分布式數(shù)據(jù)庫(kù),3、檢測(cè)MySQL實(shí)例的CPU利用率和各個(gè)表的請(qǐng)求量、數(shù)據(jù)量、CPU利用率,上報(bào)到ZooKeeper,Zo

32、oKeeper通過全局的資源情況抉擇如何擴(kuò)容、縮容; 監(jiān)控是否有下發(fā)到自身的擴(kuò)容任務(wù),如有則會(huì)執(zhí)行擴(kuò)容流程(下面會(huì)有描述); 監(jiān)控是否要發(fā)生容災(zāi)切換,并按計(jì)劃執(zhí)行主備切換流程。 網(wǎng)關(guān)基于MySQL Proxy開發(fā),在網(wǎng)絡(luò)層、連接管理、SQL解析、路由等方面做了大量?jī)?yōu)化,主要特點(diǎn)和功能如下: 1、解析SQL,將識(shí)別出的DDL語(yǔ)句直接存到ZooKeeper,讓Keeper來(lái)統(tǒng)一調(diào)度; 2、Watch ZooKeeper的路由信息,拉取最新的路由表保存到本地文件和內(nèi)存; 3、將SQL請(qǐng)求路由到對(duì)應(yīng)的set,支持讀寫分離; 4、對(duì)接入的IP、用戶名、密碼進(jìn)行鑒權(quán); 5、記錄完整的SQL執(zhí)行信息,與秒級(jí)

33、監(jiān)控平臺(tái)對(duì)接完成實(shí)時(shí)的SQL請(qǐng)求的時(shí)耗,成功率等指標(biāo)監(jiān)控分析; 6、對(duì)count、distinct、sum、avg、max、min、order by、group by等聚合類SQL一般需要訪問后端的多個(gè)set,網(wǎng)關(guān)會(huì)分析結(jié)果并做合并再返回,暫不支持跨set join和分布式事務(wù); 7、網(wǎng)關(guān)無(wú)狀態(tài),既支持與業(yè)務(wù)部署到一起,也可以獨(dú)立部署(可通過TGW或者LVS做容災(zāi))。,高并發(fā)-擴(kuò)容( Canal分布式數(shù)據(jù)庫(kù)同步系統(tǒng)),1. 基于Canal開源產(chǎn)品,獲取數(shù)據(jù)庫(kù)增量日志數(shù)據(jù)。 2. 典型管理系統(tǒng)架構(gòu),manager(web管理)+node(工作節(jié)點(diǎn)) a. manager運(yùn)行時(shí)推送同步配置到nod

34、e節(jié)點(diǎn) b. node節(jié)點(diǎn)將同步狀態(tài)反饋到manager上 3. 基于zookeeper,解決分布式狀態(tài)調(diào)度的,允許多node節(jié)點(diǎn)之間協(xié)同工作.,高并發(fā)-隊(duì)列應(yīng)用場(chǎng)景,1、異步處理:使用隊(duì)列的一個(gè)主要原因是進(jìn)行異步處理,比如用戶注冊(cè)完成后,需要發(fā)送注冊(cè)成功郵件/新用戶積分/優(yōu)惠卷等;緩存過期時(shí),先返回過期數(shù)據(jù),然后異步更新緩存、異步寫日志等。,2、系統(tǒng)解耦:比如用戶支付完成訂單后,需要通知生產(chǎn)配貨系統(tǒng)、發(fā)票系統(tǒng)、庫(kù)存系統(tǒng)、推薦系統(tǒng)、搜索系統(tǒng)等進(jìn)行業(yè)務(wù)處理。,3、數(shù)據(jù)同步:比如想把mysql變更的數(shù)據(jù)同步到Redis,或者將mysql數(shù)據(jù)同步到mongodb,或者讓機(jī)房之間的數(shù)據(jù)同步,或者主從數(shù)

35、據(jù)同步等,有相關(guān)軟件:databus、canal、otter等。使用數(shù)據(jù)總線隊(duì)列進(jìn)行數(shù)據(jù)同步的好處是可以保證數(shù)據(jù)修改的有序。,4、流量削峰:系統(tǒng)的瓶頸一般在數(shù)據(jù)庫(kù)上,比如扣減庫(kù)存、下單等,此時(shí)可以考慮使用隊(duì)列將變更請(qǐng)求暫時(shí)放入隊(duì)列,通過緩存+隊(duì)列暫存的方式將數(shù)據(jù)庫(kù)流量削峰。同樣,對(duì)于秒殺系統(tǒng),下單服務(wù)會(huì)是該系統(tǒng)的瓶頸,此時(shí)可以使用隊(duì)列進(jìn)行排隊(duì)和限流,從而保護(hù)下單服務(wù),通過隊(duì)列暫存或者隊(duì)列限流進(jìn)行流量削峰,高并發(fā)-隊(duì)列( Canal ),1、Canal 同步緩存,2、Canal 下發(fā)任務(wù)給消息隊(duì)列,高可用,什么是高可用性,高可用性(HA)系統(tǒng)是目前企業(yè)防止核心計(jì)算機(jī)系統(tǒng)因故障停機(jī)的最有效手段。

36、高可用性(HA)的功能 1、軟件故障監(jiān)測(cè)與排除 2、備份和數(shù)據(jù)保護(hù) 3、管理站能夠監(jiān)視各站點(diǎn)的運(yùn)行情況,能隨時(shí)或定時(shí)報(bào)告系統(tǒng)運(yùn)行狀況,故障能及時(shí)報(bào)告和告警,并有必要的控制手段 4、實(shí)現(xiàn)錯(cuò)誤隔離以及主、備份服務(wù)器間的服務(wù)切換 HA的工作方式:HA有主從方式和雙工方式兩種工作模式 高可用性方案則利用更少的冗余部件同時(shí)由軟件檢測(cè)故障,一旦故障發(fā)生立即隔離損壞部件,通過提供故障恢復(fù)實(shí)現(xiàn)最大化系統(tǒng)和應(yīng)用的可用性。 容錯(cuò)技術(shù)隨著處理器速度的加快和價(jià)格的下跌而越來(lái)越多地轉(zhuǎn)移到軟件中。未來(lái)容錯(cuò)技術(shù)將完全在軟件環(huán)境下完成,那時(shí)它和高可用性技術(shù)之間的差別也就隨之消失了。,互聯(lián)網(wǎng)高可用性(HA)系統(tǒng)-需要解決的問題

37、,一:負(fù)載均衡與反向代理,二:隔離,三:限流,四:降級(jí),五:超時(shí)與重試,六:回滾,七:壓力測(cè)試與應(yīng)急預(yù)案,高可用-負(fù)載均衡,負(fù)載均衡 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。,軟件負(fù)載均衡解決方案是指在一臺(tái)或多臺(tái)服務(wù)器相應(yīng)的操作系統(tǒng)上安裝一個(gè)或多個(gè)附加軟件來(lái)實(shí)現(xiàn)負(fù)載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的優(yōu)點(diǎn)是基于特定環(huán)境,配置簡(jiǎn)單,使用靈活,成本低廉,可以滿足一般的負(fù)載均衡需求。 軟件解決方案缺點(diǎn)也較多,因?yàn)槊?/p>

38、臺(tái)服務(wù)器上安裝額外的軟件運(yùn)行會(huì)消耗系統(tǒng)不定量的資源,越是功能強(qiáng)大的模塊,消耗得越多,所以當(dāng)連接請(qǐng)求特別大的時(shí)候,軟件本身會(huì)成為服務(wù)器工作成敗的一個(gè)關(guān)鍵;軟件可擴(kuò)展性并不是很好,受到操作系統(tǒng)的限制;由于操作系統(tǒng)本身的Bug,往往會(huì)引起安全問題。,硬件負(fù)載均衡解決方案是直接在服務(wù)器和外部網(wǎng)絡(luò)間安裝負(fù)載均衡設(shè)備,這種設(shè)備通常稱之為負(fù)載均衡器,由于專門的設(shè)備完成專門的任務(wù),獨(dú)立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負(fù)載均衡策略,智能化的流量管理,可達(dá)到最佳的負(fù)載均衡需求。,高可用-反向代理,反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求

39、轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。,代理服務(wù)器有三種: 1 標(biāo)準(zhǔn)的代理緩沖服務(wù)器 一個(gè)標(biāo)準(zhǔn)的代理緩沖服務(wù)被用于緩存靜態(tài)的網(wǎng)頁(yè)(例如:html文件和圖片文件等)到本地網(wǎng)絡(luò)上的一臺(tái)主機(jī)上(即代理服務(wù)器)。 2 透明代理緩沖服務(wù)器 透明代理緩沖服務(wù)和標(biāo)準(zhǔn)代理服務(wù)器的功能完全相同。但是,代理操作對(duì)客戶端的瀏覽器是透明的(即不需指明代理服務(wù)器的IP和端口)。 3 反向代理緩沖服務(wù)器 反向代理是和前兩種代理完全不同的一種代理服務(wù)。使用它可以降低原始WEB服務(wù)器的負(fù)載。反向代理服務(wù)器承擔(dān)了對(duì)原始WEB服務(wù)

40、器的靜態(tài)頁(yè)面的請(qǐng)求,防止原始服務(wù)器過載。 安全反向代理用途: 可以提供從防火墻外部代理服務(wù)器到防火墻內(nèi)部安全內(nèi)容服務(wù)器的加密連接。 可以允許客戶機(jī)安全地連接到代理服務(wù)器,從而有利于安全地傳輸信息。 安全反向代理會(huì)造成各安全連接加密數(shù)據(jù)所涉及的系統(tǒng)開銷而變慢。 SSL 提供了高速緩存機(jī)制,連接雙方重復(fù)使用先前協(xié)商的安全參數(shù),大大降低后續(xù)連接的系統(tǒng)開銷。,高可用-隔離術(shù),線程隔離: 線程隔離主要是指線程池隔離,在實(shí)際使用時(shí),我們會(huì)把請(qǐng)求分類,然后交給不同的線程池處理。當(dāng)一種業(yè)務(wù)的請(qǐng)求處理發(fā)生問題時(shí),不會(huì)將故障擴(kuò)散到其他線程池,從而保證其他服務(wù)可用。,進(jìn)程隔離 由于傳統(tǒng)的系統(tǒng)所有功能都集中在一個(gè)系統(tǒng)

41、中,為了避免系統(tǒng)其中一個(gè)模塊功能出現(xiàn)問題導(dǎo)致整個(gè)系統(tǒng)無(wú)法使用的情況發(fā)生,將其該系統(tǒng)拆分成多子系統(tǒng)實(shí)現(xiàn)物理隔離,故通過進(jìn)程隔離使得某一個(gè)子系統(tǒng)出現(xiàn)問題時(shí)不影響到其他子系統(tǒng)。,集群隔離 隨著調(diào)用方的增多,當(dāng)秒殺(并發(fā)量特別大功能)類似的服務(wù)被刷新會(huì)影響到其他服務(wù)的穩(wěn)定性時(shí),應(yīng)該考慮為秒殺(并發(fā)量特別大功能)類似的服務(wù)提供單獨(dú)的服務(wù)集群,即分服務(wù)分組,這樣當(dāng)某一個(gè)分組出現(xiàn)問題時(shí),不會(huì)影響到其他分組,從而實(shí)現(xiàn)了故障隔離愿景。,機(jī)房隔離 隨著對(duì)系統(tǒng)可用性的要求,會(huì)進(jìn)行多機(jī)房部署,每一個(gè)機(jī)房的服務(wù)都有自己的服務(wù)分組,本機(jī)房的服務(wù)應(yīng)該只調(diào)用本機(jī)房的服務(wù),不進(jìn)行跨機(jī)房調(diào)用。其中,一個(gè)機(jī)房服務(wù)發(fā)生問題時(shí),可以通

42、過DNS/負(fù)載均衡將請(qǐng)求全部切到另一個(gè)機(jī)房,或者考慮服務(wù)能自動(dòng)重試其他機(jī)房的服務(wù),從而提升系統(tǒng)可用性。,高可用-隔離術(shù),讀寫隔離 為了提高數(shù)據(jù)訪問,一般采用redis主從模式將讀和寫進(jìn)群分離,在正常情況下,當(dāng)主redis集群出現(xiàn)問題時(shí),從redis集群還是可以用的,從而不影響用戶的訪問。,動(dòng)靜隔離 例如當(dāng)用戶訪問如結(jié)算頁(yè)時(shí),如果JS/CSS等靜態(tài)資源也在結(jié)算頁(yè)系統(tǒng)中時(shí),很可能因?yàn)樵L問量太大導(dǎo)致帶寬被打滿導(dǎo)致出現(xiàn)不可用。 為了不影響結(jié)算等用戶操作的功能,將其JS/CSS等靜態(tài)資源靜態(tài)化與用戶操作功能分開部署。,資源隔離 最常見的資源如磁盤、CPU、網(wǎng)絡(luò);對(duì)于寶貴的資源都會(huì)存在競(jìng)爭(zhēng)問題。 我們可以

43、使用JIMDB數(shù)據(jù)同步時(shí)要dump數(shù)據(jù),SSD盤容量用了50%以上,dump到同一塊磁盤時(shí)遇到了容量不足的問題,我們通過單獨(dú)掛一塊SAS盤來(lái)專門同步數(shù)據(jù)。還有如使用Docker容器時(shí),有的容器寫磁盤非常頻繁,因此要考慮為不同的容器掛載不同的磁盤。,高可用-限流,在開發(fā)高并發(fā)系統(tǒng)時(shí)有三把利器用來(lái)保護(hù)系統(tǒng):緩存、降級(jí)和限流。緩存的目的是提升系統(tǒng)訪問速度和增大系統(tǒng)能處理的容量,可謂是抗高并發(fā)流量的銀彈;而降級(jí)是當(dāng)服務(wù)出問題或者影響到核心流程的性能則需要暫時(shí)屏蔽掉,待高峰或者問題解決后再打開;而有些場(chǎng)景并不能用緩存和降級(jí)來(lái)解決,比如稀缺資源(秒殺、搶購(gòu))、寫服務(wù)(如評(píng)論、下單)、頻繁的復(fù)雜查詢(評(píng)論的

44、最后幾頁(yè)),因此需有一種手段來(lái)限制這些場(chǎng)景的并發(fā)/請(qǐng)求量,即限流。 限流的目的是通過對(duì)并發(fā)訪問/請(qǐng)求進(jìn)行限速或者一個(gè)時(shí)間窗口內(nèi)的的請(qǐng)求進(jìn)行限速來(lái)保護(hù)系統(tǒng),一旦達(dá)到限制速率則可以拒絕服務(wù)(定向到錯(cuò)誤頁(yè)或告知資源沒有了)、排隊(duì)或等待(比如秒殺、評(píng)論、下單)、降級(jí)(返回兜底數(shù)據(jù)或默認(rèn)數(shù)據(jù),如商品詳情頁(yè)庫(kù)存默認(rèn)有貨)。 一般開發(fā)高并發(fā)系統(tǒng)常見的限流有:限制總并發(fā)數(shù)(比如數(shù)據(jù)庫(kù)連接池、線程池)、限制瞬時(shí)并發(fā)數(shù)(如nginx的limit_conn模塊,用來(lái)限制瞬時(shí)并發(fā)連接數(shù))、限制時(shí)間窗口內(nèi)的平均速率(如Guava的RateLimiter、nginx的limit_req模塊,限制每秒的平均速率);其他還有

45、如限制遠(yuǎn)程接口調(diào)用速率、限制MQ的消費(fèi)速率。另外還可以根據(jù)網(wǎng)絡(luò)連接數(shù)、網(wǎng)絡(luò)流量、CPU或內(nèi)存負(fù)載等來(lái)限流。,高可用-降級(jí),降級(jí)的最終目的是保證核心服務(wù)可用,即使是有損的。而且有些服務(wù)是無(wú)法降級(jí)的(如加入購(gòu)物車、結(jié)算)。 降級(jí)預(yù)案 在進(jìn)行降級(jí)之前要對(duì)系統(tǒng)進(jìn)行梳理,看看系統(tǒng)是不是可以丟卒保帥;從而梳理出哪些必須誓死保護(hù),哪些可降級(jí);比如可以參考日志級(jí)別設(shè)置預(yù)案: 一般:比如有些服務(wù)偶爾因?yàn)榫W(wǎng)絡(luò)抖動(dòng)或者服務(wù)正在上線而超時(shí),可以自動(dòng)降級(jí); 警告:有些服務(wù)在一段時(shí)間內(nèi)成功率有波動(dòng)(如在95100%之間),可以自動(dòng)降級(jí)或人工降級(jí),并發(fā)送告警; 錯(cuò)誤:比如可用率低于90%,或者數(shù)據(jù)庫(kù)連接池被打爆了,或者訪問

46、量突然猛增到系 統(tǒng)能承受的最大閥值,此時(shí)可以根據(jù)情況自動(dòng)降級(jí)或者人工降級(jí); 嚴(yán)重錯(cuò)誤:比如因?yàn)樘厥庠驍?shù)據(jù)錯(cuò)誤了,此時(shí)需要緊急人工降級(jí)。 降級(jí)按照是否自動(dòng)化可分為:自動(dòng)開關(guān)降級(jí)和人工開關(guān)降級(jí)。 降級(jí)按照功能可分為:讀服務(wù)降級(jí)、寫服務(wù)降級(jí)。 降級(jí)按照處于的系統(tǒng)層次可分為:多級(jí)降級(jí)。 降級(jí)的功能點(diǎn)主要從服務(wù)端鏈路考慮,即根據(jù)用戶訪問的服務(wù)調(diào)用鏈路來(lái)梳理哪里需要降級(jí): 頁(yè)面降級(jí)、頁(yè)面片段降級(jí)、頁(yè)面異步請(qǐng)求降級(jí)、服務(wù)功能降級(jí)、讀降級(jí)、寫降級(jí) 自動(dòng)開關(guān)降級(jí):超時(shí)降級(jí)、統(tǒng)計(jì)失敗次數(shù)降級(jí)、故障降級(jí)、限流降級(jí) 人工開關(guān)降級(jí):讀服務(wù)降級(jí)、寫服務(wù)降級(jí),高可用-超時(shí)與重試,在實(shí)際開發(fā)過程中,我們見過太多故障時(shí)因?yàn)闆]

47、有設(shè)置超時(shí)或者設(shè)置得不對(duì)而造成的,而這些故障都是因?yàn)闆]有意識(shí)到超時(shí)設(shè)置的重要性而造成的。如果應(yīng)用不設(shè)置超時(shí),則可能會(huì)導(dǎo)致請(qǐng)求響應(yīng)慢,慢請(qǐng)求積累導(dǎo)致連鎖反應(yīng),甚至造成應(yīng)用雪塌。而有些中間件或者框架在超時(shí)后進(jìn)行重試(例如dubbo默認(rèn)重試兩次),讀服務(wù)天然適合重試,但寫服務(wù)大多不能重試(如寫訂單、支付等),重試次數(shù)太多會(huì)導(dǎo)致多倍請(qǐng)求流量。 例如模擬了Ddos攻擊(分布式拒絕服務(wù)(DDoS:Distributed Denial of Service)攻擊指借助于客戶/服務(wù)器技術(shù),將多個(gè)計(jì)算機(jī)聯(lián)合起來(lái)作為攻擊平臺(tái),對(duì)一個(gè)或多個(gè)目標(biāo)發(fā)動(dòng)DDoS,通常,攻擊者使用一個(gè)偷竊帳號(hào)將DDoS主控程序安裝在一個(gè)計(jì)

48、算機(jī)上,在一個(gè)設(shè)定的時(shí)間主控程序?qū)⑴c大量代理程序通訊,代理程序已經(jīng)被安裝在網(wǎng)絡(luò)上的許多計(jì)算機(jī)上。代理程序收到指令時(shí)就發(fā)動(dòng)攻擊。利用客戶/服務(wù)器技術(shù),主控程序能在幾秒鐘內(nèi)激活成百上千次代理程序的運(yùn)行。),后果可能是災(zāi)難,因此,務(wù)必設(shè)置合理的重試機(jī)制,并且應(yīng)該和熔斷、快速失敗機(jī)制配合。所以在進(jìn)行代碼Review時(shí),一定記得Review超時(shí)與重試機(jī)制。,高可用-回滾,事務(wù)回滾 在執(zhí)行數(shù)據(jù)庫(kù)SQL時(shí),如果我們檢測(cè)到哦事務(wù)提交沖突,那么事務(wù)中所有執(zhí)行的SQL要進(jìn)行回滾,目的是防止數(shù)據(jù)庫(kù)出現(xiàn)數(shù)據(jù)不一致。,代碼庫(kù)回滾 在開發(fā)項(xiàng)目時(shí)一定要將代碼維護(hù)到代碼倉(cāng)庫(kù),從而進(jìn)行版本管理。有了版本控制系統(tǒng)后可記錄代碼的歷

49、史版本,在出現(xiàn)問題時(shí)候可以方便回滾。,部署版本回滾 代碼測(cè)試完成后,接下來(lái)要進(jìn)行系統(tǒng)部署,在部署時(shí)要考慮當(dāng)代碼邏輯出現(xiàn)錯(cuò)誤后如何快速恢復(fù),數(shù)據(jù)版本回滾 在設(shè)計(jì)消息隊(duì)列時(shí),重要業(yè)務(wù)會(huì)對(duì)消息隊(duì)列進(jìn)行副本處理,以便萬(wàn)一業(yè)務(wù)邏輯出現(xiàn)問題能進(jìn)行歷史數(shù)據(jù)回滾,從而修復(fù)問題。,靜態(tài)資源版本回滾 靜態(tài)化頁(yè)面資源后,每次內(nèi)容變更時(shí)我們都會(huì)生成一個(gè)全量新版本放到項(xiàng)目的文件目錄中,從而保證版本可追溯,出現(xiàn)問題時(shí)能及時(shí)回滾。,高可用-壓力測(cè)試,線下壓力測(cè)試 通過如Jmeter,Apac,he ab 壓力測(cè)試系統(tǒng)的某一個(gè)接口等(如登錄、查詢訂單)或者某一個(gè)組件(例如數(shù)據(jù)庫(kù)連接池),然后進(jìn)行調(diào)優(yōu)(如調(diào)優(yōu)JVM參數(shù),優(yōu)化代

50、碼等),實(shí)現(xiàn)單個(gè)接口或者組件的性能最優(yōu)。,線上壓力測(cè)試 線上壓力測(cè)試份方式非常多,按讀分為讀壓、寫壓測(cè)和混合壓測(cè),按照數(shù)據(jù)仿真度分為仿真壓力測(cè)試和引流壓力測(cè)試,按照給用戶提供服務(wù)分為隔離集群壓力測(cè)試和線上集群壓力測(cè)試。,系統(tǒng)優(yōu)化和容災(zāi) 拿到全面的壓力測(cè)試報(bào)告后,接下來(lái)就是分析報(bào)告,然后進(jìn)行一些有這對(duì)性的優(yōu)化,如硬件升級(jí)、系統(tǒng)擴(kuò)容、參數(shù)調(diào)優(yōu)、代碼優(yōu)化(代碼同步改異步)、架構(gòu)優(yōu)化(如加緩存、讀寫分離、歷史數(shù)據(jù)歸檔)等。在擴(kuò)容時(shí)也需要考慮容災(zāi),比如分組部署、跨機(jī)房部署。容災(zāi)是通過部署多組(單機(jī)房或多機(jī)房)相同系統(tǒng),當(dāng)其中一組出現(xiàn)問題時(shí),可以切換到另一個(gè)分組,保證系統(tǒng)可用,高可用-應(yīng)急預(yù)案,在系統(tǒng)壓力

51、測(cè)試之后發(fā)現(xiàn)一些系統(tǒng)瓶頸,在系統(tǒng)優(yōu)化之后會(huì)提升系統(tǒng)吐吞量并降低響應(yīng)時(shí)間,容災(zāi)之后的系統(tǒng)可用性得以保障,但還是會(huì)存在一些風(fēng)險(xiǎn),如網(wǎng)絡(luò)抖動(dòng)、某臺(tái)機(jī)器負(fù)載過高、某個(gè)服務(wù)變慢、數(shù)據(jù)庫(kù)Load值過高,為了防止因?yàn)檫@些問題而出現(xiàn)系統(tǒng)雪崩,需要針對(duì)這些情況制定應(yīng)急預(yù)案,從而在出現(xiàn)突發(fā)情況時(shí),有響應(yīng)的措施來(lái)解決掉這些問題。 應(yīng)急預(yù)案可按照如下幾步進(jìn)行:首先進(jìn)行系統(tǒng)分級(jí),然后進(jìn)行全鏈路分析、配置監(jiān)控,最后制定應(yīng)急預(yù)案。,Dubbo詳細(xì)介紹,Dubbo 是阿里巴巴公司開源的一個(gè)高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring框架無(wú)縫集成。 主要核心部件: Rem

52、oting: 網(wǎng)絡(luò)通信框架,實(shí)現(xiàn)了 sync-over-async 和 request-response 消息機(jī)制. RPC: 一個(gè)遠(yuǎn)程過程調(diào)用的抽象,支持負(fù)載均衡、容災(zāi)和集群功能 Registry: 服務(wù)目錄框架用于服務(wù)的注冊(cè)和服務(wù)事件發(fā)布和訂閱,Dubbo服務(wù)集群-集群容錯(cuò)模式,Dubbo 服務(wù)提供者集群與負(fù)載均衡,Dubbo架構(gòu)高并發(fā)高可用選型技術(shù),Dubbo大體部署圖,Spring Cloud 19個(gè)技術(shù),Spring Cloud 工具框架 1、Spring Cloud Config 配置中心,利用git集中管理程序的配置。 2、Spring Cloud Netflix 集成眾多Net

53、flix的開源軟件 3、Spring Cloud Bus 消息總線,利用分布式消息將服務(wù)和服務(wù)實(shí)例連接在一起,用于在一個(gè)集群中傳播狀態(tài)的變化 4、Spring Cloud for Cloud Foundry 利用Pivotal Cloudfoundry集成你的應(yīng)用程序 5、Spring Cloud Cloud Foundry Service Broker 為建立管理云托管服務(wù)的服務(wù)代理提供了一個(gè)起點(diǎn)。 6、Spring Cloud Cluster 基于Zookeeper, Redis, Hazelcast, Consul實(shí)現(xiàn)的領(lǐng)導(dǎo)選舉和平民狀態(tài)模式的抽象和實(shí)現(xiàn)。 7、Spring Cloud

54、Consul 基于Hashicorp Consul實(shí)現(xiàn)的服務(wù)發(fā)現(xiàn)和配置管理。 8、Spring Cloud Security 在Zuul代理中為OAuth2 rest客戶端和認(rèn)證頭轉(zhuǎn)發(fā)提供負(fù)載均衡 9、Spring Cloud Sleuth SpringCloud應(yīng)用的分布式追蹤系統(tǒng),和Zipkin,HTrace,ELK兼容。 10、Spring Cloud Data Flow 一個(gè)云本地程序和操作模型,組成數(shù)據(jù)微服務(wù)在一個(gè)結(jié)構(gòu)化的平臺(tái)上。,Spring Cloud 19個(gè)技術(shù),11、Spring Cloud Stream 基于Redis,Rabbit,Kafka實(shí)現(xiàn)的消息微服務(wù),簡(jiǎn)單聲明模型

55、用以在Spring Cloud應(yīng)用中收發(fā)消息。 12、Spring Cloud Stream App Starters 基于Spring Boot為外部系統(tǒng)提供spring的集成 13、Spring Cloud Task 短生命周期的微服務(wù),為SpringBooot應(yīng)用簡(jiǎn)單聲明添加功能和非功能特性。 14、Spring Cloud Task App Starters 15、Spring Cloud Zookeeper 服務(wù)發(fā)現(xiàn)和配置管理基于Apache Zookeeper。 16、Spring Cloud for Amazon Web Services 快速和亞馬遜網(wǎng)絡(luò)服務(wù)集成。 17、Spr

56、ing Cloud Connectors 便于PaaS應(yīng)用在各種平臺(tái)上連接到后端像數(shù)據(jù)庫(kù)和消息經(jīng)紀(jì)服務(wù)。 18、Spring Cloud Starters (項(xiàng)目已經(jīng)終止并且在Angel.SR2后的版本和其他項(xiàng)目合并) 19、Spring Cloud CLI 插件用Groovy快速的創(chuàng)建Spring Cloud組件應(yīng)用。 Spring Cloud共集成了19個(gè)子項(xiàng)目,里面都包含一個(gè)或者多個(gè)第三方的組件或者框架!,Spring Cloud和dubbo比較-背景,Dubbo,是阿里巴巴服務(wù)化治理的核心框架,并被廣泛應(yīng)用于阿里巴巴集團(tuán)的各成員站點(diǎn)(阿里巴巴現(xiàn)在使用架構(gòu)為HSF)。 于2012-10-

57、24最后版本2.5.3成為最后一版本,由當(dāng)當(dāng)接手維護(hù),命名為dubbox Spring Cloud,從命名我們就可以知道,它是Spring Source的產(chǎn)物,Spring社區(qū)的強(qiáng)大背書可以說是Java企業(yè)界最有影響力的組織了,除了Spring Source之外,還有Pivotal和Netfix是其強(qiáng)大的后盾與技術(shù)輸出。其中Netflix開源的整套微服務(wù)架構(gòu)套件是Spring Cloud的核心。 如果拿Dubbo與Netflix套件做對(duì)比,前者在國(guó)內(nèi)影響力較大,后者在國(guó)外影響力較大,在背景上可以打個(gè)平手;但是若要與Spring Cloud做對(duì)比,由于Spring Source的加入,在背書上,Spring Cloud略勝一籌,但是在高并發(fā)上dubbo曾經(jīng)在阿里的運(yùn)營(yíng)中實(shí)際承載過過億用戶同時(shí)在線的,而Netflix 并沒有實(shí)際的上線應(yīng)用中體現(xiàn)過。 Spring Cloud下面有19個(gè)子項(xiàng)目(可能還會(huì)新增)分別覆蓋了微服務(wù)架構(gòu)下的方方面面,服務(wù)治理只是其中的一個(gè)方面,一定程度來(lái)說,Dubbo只是Spring Cloud Netflix中的一個(gè)子集。但是在選擇框架上,方案完整度恰恰是一個(gè)需要重點(diǎn)關(guān)注的內(nèi)容,當(dāng)然從高可用和高并發(fā)一起考慮,Spring Cloud 無(wú)疑是最佳選擇。,Spring cloud 架構(gòu)圖,Spring clou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論