版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、路由模塊設(shè)計(jì)說明書修改記錄版本狀態(tài)擬制 人 修改 人擬制修改日期更改理由更改內(nèi)容(寫要點(diǎn)即可)新建7/431目錄1 .引言1.1, 微應(yīng)用系統(tǒng)建設(shè)背景近年來移動(dòng)互聯(lián)網(wǎng)發(fā)展迅速,每年移動(dòng)互聯(lián)網(wǎng)產(chǎn)生的流量增速達(dá)到, 越來越多的業(yè)務(wù)與應(yīng)用系統(tǒng)也開始推出支持各種移動(dòng)終端的版本,而移動(dòng) 應(yīng)用的增加反過來進(jìn)一步促進(jìn)了移動(dòng)終端數(shù)量的快速增長(zhǎng)。公司根據(jù)移動(dòng) 互聯(lián)網(wǎng)時(shí)代對(duì)業(yè)務(wù)的需求,提出了微應(yīng)用商店,通過微應(yīng)用商店提供更精 細(xì)的業(yè)務(wù)功能。隨著互聯(lián)網(wǎng)流量從桌面轉(zhuǎn)向移動(dòng)終端,以與物聯(lián)網(wǎng)浪潮的 興起,提供適配多種終端的豐富、友好的用戶體驗(yàn)對(duì)于應(yīng)用系統(tǒng)提出了更 高的要求。傳統(tǒng)的基于單一模型的應(yīng)用系統(tǒng),雖然在系統(tǒng)設(shè)計(jì)層面
2、采用了分層架 構(gòu)設(shè)計(jì),通常包括前端表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)庫(kù)訪問層、應(yīng)用集成層 等,但最終系統(tǒng)打包成一個(gè)或者單一文件形式,該文件包含了所有的系統(tǒng) 特性與功能,并通過集中部署的方式實(shí)現(xiàn)系統(tǒng)運(yùn)行,通過部署在多臺(tái)服務(wù) 器上并結(jié)合負(fù)載均衡實(shí)現(xiàn)業(yè)務(wù)的高可用性,如所示。應(yīng)用系統(tǒng)圖錯(cuò)誤!未定義書簽。單一架構(gòu)應(yīng)用系統(tǒng)這種架構(gòu)方式隨著系統(tǒng)的演進(jìn),系統(tǒng)規(guī)模越來越龐大,子系統(tǒng)與模塊 之間的關(guān)系也越來越復(fù)雜,后續(xù)的開發(fā)與維護(hù)成本也不斷提高,巳經(jīng)無法 滿足移動(dòng)互聯(lián)網(wǎng)應(yīng)用對(duì)于系統(tǒng)的快速版本迭代與上線的需求,同時(shí)也嚴(yán)重 影響了系統(tǒng)開發(fā)的效率。針對(duì)單一架構(gòu)應(yīng)用系統(tǒng)暴露的問題,基于微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)(以 下簡(jiǎn)稱微應(yīng)用系統(tǒng))應(yīng)
3、運(yùn)而生。微應(yīng)用系統(tǒng)由一組規(guī)模較小的服務(wù)構(gòu)成, 每個(gè)服務(wù)以獨(dú)立進(jìn)程的方式單獨(dú)運(yùn)行,它們之間通過輕量級(jí)的進(jìn)程間通信 機(jī)制如進(jìn)行通信,這些服務(wù)根據(jù)業(yè)務(wù)邏輯進(jìn)行劃分,每個(gè)服務(wù)有自己?jiǎn)为?dú) 的數(shù)據(jù)庫(kù),通過自動(dòng)化部署方式每個(gè)服務(wù)可以獨(dú)立進(jìn)行部署。微應(yīng)用1應(yīng)用交付層I 業(yè)務(wù)聚合層I業(yè)務(wù)服務(wù)層圖錯(cuò)誤保定義書簽。微應(yīng)用系統(tǒng)架構(gòu)在微應(yīng)用系統(tǒng)架構(gòu)中,首先在業(yè)務(wù)服務(wù)層,每個(gè)業(yè)務(wù)服務(wù)以獨(dú)立進(jìn)程 服務(wù)模式運(yùn)行,實(shí)現(xiàn)特定的業(yè)務(wù)邏輯,并有獨(dú)立的數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)存取, 與其他業(yè)務(wù)服務(wù)之間通過良好定義的接口進(jìn)行交互。業(yè)務(wù)聚合層負(fù)責(zé)對(duì)業(yè)務(wù)服務(wù)層的服務(wù)進(jìn)行聚合,對(duì)服務(wù)調(diào)用返回的數(shù) 據(jù)進(jìn)行聚合與數(shù)據(jù)協(xié)議轉(zhuǎn)換,對(duì)外提供更粗粒度的服務(wù)接口。應(yīng)
4、用交付層負(fù)責(zé)對(duì)外提供系統(tǒng)應(yīng)用層接口,對(duì)服務(wù)調(diào)用返回的結(jié)果根 據(jù)用戶終端進(jìn)行優(yōu)化,根據(jù)用戶行為分析為用戶提供定制化的展示方式。1.2, 微應(yīng)用系統(tǒng)建設(shè)面臨的挑戰(zhàn)微應(yīng)用架構(gòu)中應(yīng)用內(nèi)的各個(gè)服務(wù)可以獨(dú)立、動(dòng)態(tài)的進(jìn)行伸縮,當(dāng)服務(wù) 進(jìn)行伸縮時(shí),其他調(diào)用方服務(wù)需要能夠找到該服務(wù)的服務(wù)實(shí)例,并與之進(jìn) 行通信,使得請(qǐng)求能夠分布到所有的服務(wù)實(shí)例中,從而實(shí)現(xiàn)該服務(wù)的水平 可擴(kuò)展性。另外在服務(wù)調(diào)用過程中也需要通過負(fù)載均衡策略能夠?qū)⑨槍?duì)該 服務(wù)的請(qǐng)求均勻分布到所有的服務(wù)實(shí)例。在大規(guī)模微應(yīng)用系統(tǒng)服務(wù)化之前,應(yīng)用可以通過或者等工具,簡(jiǎn)單的 暴露和引用遠(yuǎn)程服務(wù),通過配置服務(wù)的地址進(jìn)行調(diào)用,通過等硬件進(jìn)行負(fù) 載均衡。但隨著微應(yīng)
5、用系統(tǒng)中服務(wù)越來越多,系統(tǒng)面臨著越來越多的挑戰(zhàn): 當(dāng)服務(wù)越來越多時(shí),服務(wù)配置管理變得非常困難,硬件負(fù)載均衡 器的單點(diǎn)壓力也越來越大。此時(shí)需要一個(gè)服務(wù)注冊(cè)中心,動(dòng)態(tài)的 注冊(cè)和發(fā)現(xiàn)服務(wù),使服務(wù)的位置透明。并通過在消費(fèi)方獲取服務(wù) 提供方地址列表,實(shí)現(xiàn)軟負(fù)載均衡和,降低對(duì)硬件負(fù)載均衡器的 依賴,也能減少部分成本。 微應(yīng)用中由于各個(gè)服務(wù)的獨(dú)立性,任何服務(wù)的彈性伸縮、版本升 級(jí)、系統(tǒng)故障等都可能導(dǎo)致該服務(wù)的狀態(tài)發(fā)生變化甚至不可用, 如何能夠讓服務(wù)使用者不受任何影響; 微應(yīng)用中每個(gè)服務(wù)都有自己獨(dú)立的數(shù)據(jù)庫(kù),因?yàn)槲?yīng)用拆分導(dǎo)致 的原來在一個(gè)數(shù)據(jù)庫(kù)的表被分散到了多個(gè)數(shù)據(jù)庫(kù),需要對(duì)服務(wù)屏 蔽分布式數(shù)據(jù)庫(kù)帶來的復(fù)雜
6、操作,為跨多個(gè)數(shù)據(jù)庫(kù)的操作提供統(tǒng) 一的數(shù)據(jù)訪問方法; 隨著服務(wù)的調(diào)用量越來越大,服務(wù)的容量與性能問題就暴露出來, 系統(tǒng)的擴(kuò)容與運(yùn)行優(yōu)化需要性能監(jiān)控與參數(shù)調(diào)整,所以需要監(jiān)控 服務(wù)的調(diào)用量、響應(yīng)時(shí)間等,作為容量規(guī)劃的參考指標(biāo)。其次, 要可以動(dòng)態(tài)調(diào)整權(quán)重,通過調(diào)整權(quán)重并在過程中記錄響應(yīng)時(shí)間的 變化,直到響應(yīng)時(shí)間到達(dá)閥值,記錄此時(shí)的訪問量,再以此訪問 量乘以機(jī)器數(shù)反推總?cè)萘?。所以服?wù)的動(dòng)態(tài)伸縮與調(diào)用請(qǐng)求需要統(tǒng)一的底層技術(shù)服務(wù)的支撐。包 括微應(yīng)用與業(yè)務(wù)服務(wù)的注冊(cè)與發(fā)現(xiàn)、微應(yīng)用與業(yè)務(wù)服務(wù)請(qǐng)求的路由分發(fā)、 微應(yīng)用與業(yè)務(wù)服務(wù)的運(yùn)行監(jiān)控等,從而為微應(yīng)用的運(yùn)行提供運(yùn)行支撐。這 其中微應(yīng)用與業(yè)務(wù)服務(wù)的注冊(cè)與發(fā)現(xiàn)是整
7、個(gè)微應(yīng)用的基礎(chǔ),微應(yīng)用與業(yè)務(wù) 服務(wù)請(qǐng)求的路由分發(fā)是核心,它是實(shí)現(xiàn)業(yè)務(wù)調(diào)用、負(fù)載均衡的關(guān)鍵。微應(yīng) 用與業(yè)務(wù)服務(wù)的運(yùn)行監(jiān)控為微應(yīng)用系統(tǒng)的運(yùn)行提供保障。2.微應(yīng)用智能路由模塊需求分析為支撐微應(yīng)用系統(tǒng)的改造與運(yùn)行,公司在應(yīng)用服務(wù)資源池的云應(yīng)用管 理系統(tǒng)提供的底層技術(shù)服務(wù)基礎(chǔ)上,在微應(yīng)用的分布式服務(wù)框架即智能路 由(包含服務(wù)的注冊(cè)發(fā)現(xiàn))、微應(yīng)用的使用(應(yīng)用商店)、微應(yīng)用的自動(dòng)化 部署(部署環(huán)境)、微應(yīng)用的運(yùn)行優(yōu)化(監(jiān)控統(tǒng)計(jì))等幾個(gè)方面開展了相 應(yīng)的產(chǎn)品研發(fā)工作。這其中微應(yīng)用的分布式服務(wù)框架即智能路由是實(shí)現(xiàn)服 務(wù)之間調(diào)用與負(fù)載均衡的關(guān)鍵組件。智能路由用于實(shí)現(xiàn)對(duì)應(yīng)用請(qǐng)求的統(tǒng)一路由分發(fā);提供服務(wù)智能路由機(jī) 制
8、來屏蔽因彈性伸縮、版本升級(jí)、系統(tǒng)故障等原因?qū)е碌姆?wù)的動(dòng)態(tài)變化, 讓服務(wù)使用者不受任何影響;為由于微應(yīng)用拆分導(dǎo)致的跨多個(gè)數(shù)據(jù)庫(kù)的操 作提供統(tǒng)一的數(shù)據(jù)訪問方法。應(yīng)用路由軟負(fù)載均衡眼務(wù)路由分布式服務(wù)框架數(shù)據(jù)路由分布式數(shù)據(jù)庫(kù)框架(前端展示組件軟負(fù)我均衡TomcatWARWAR通這8個(gè)伙;例為不同微應(yīng)用實(shí)現(xiàn)負(fù)載均衡服務(wù).將用戶請(qǐng)求分發(fā)到不同微應(yīng)用微應(yīng)用1衡及路由策略實(shí)現(xiàn)應(yīng)用與服務(wù) 之間、服務(wù)于埋務(wù)之間單調(diào)用分布式數(shù)據(jù)庫(kù)框架的前端代理服務(wù)將業(yè)務(wù)服務(wù)數(shù)據(jù)庫(kù)讀”的請(qǐng)求分發(fā)到后端不同數(shù)據(jù)庫(kù)服務(wù)接口調(diào)用微應(yīng)用2前端展示組件)(服務(wù)接口調(diào)用:WAR業(yè)務(wù)朦勢(shì)TomcatWAR業(yè)務(wù)城務(wù)STomcatTomcat應(yīng)用交
9、付原業(yè)務(wù)聚合層業(yè)務(wù)服務(wù)層圖錯(cuò)誤!未定義書簽。微應(yīng)用分布式框架智能路由具體內(nèi)容如所示,包括如下內(nèi)容: 應(yīng)用路由:為資源池中的所有微應(yīng)用提供統(tǒng)一請(qǐng)求入口,由統(tǒng)一 的路由分發(fā)到各個(gè)微應(yīng)用; 服務(wù)路由:服務(wù)使用者從提供者地址列表中,基于負(fù)載均衡算法, 選擇一個(gè)提供者進(jìn)行調(diào)用,如果調(diào)用失敗就再選另一個(gè)調(diào)用; 數(shù)據(jù)路由:為跨多個(gè)數(shù)據(jù)庫(kù)的操作提供統(tǒng)一的數(shù)據(jù)訪問方法,屏蔽因?yàn)槲?yīng)用拆分導(dǎo)致的原來在一個(gè)數(shù)據(jù)庫(kù)的表被分散到了多個(gè) 數(shù)據(jù)庫(kù)中帶來的復(fù)雜操作;2.1 ,應(yīng)用路由需求應(yīng)用路由要求為資源池中的所有微應(yīng)用提供統(tǒng)一請(qǐng)求入口,由統(tǒng)一的路由分發(fā)到各個(gè)微應(yīng)用,所以應(yīng)用路由要求提供高可靠性與高可用性,以 8/43確保微
10、應(yīng)用的高可用性。傳統(tǒng)的硬件負(fù)載均衡設(shè)備如等可實(shí)現(xiàn)應(yīng)用路由分發(fā)工作,但在微應(yīng)用 架構(gòu)中其也存在明顯的缺陷:集中式的負(fù)載均衡方案存在單點(diǎn)問題,由于所有服務(wù)調(diào)用流量都 要經(jīng)過負(fù)載均衡,所以當(dāng)服務(wù)量和調(diào)用量大的時(shí)候,集中負(fù)載均 衡容易成為瓶頸,而且一旦發(fā)生故障對(duì)整個(gè)系統(tǒng)的影響是災(zāi)難性 的;基于硬件的集中式負(fù)載均衡方案其高可用依賴于硬件與網(wǎng)絡(luò)配置, 成本高且缺乏靈活性,不適宜彈性伸縮;微應(yīng)用架構(gòu)下,資源池中的不同微應(yīng)用在服務(wù)訪問量與訪問流量方面 可能存在巨大差別,而且同一個(gè)微應(yīng)用在不同時(shí)段負(fù)載變化也可能差異很 大,所以要求負(fù)載均衡能夠靈活的伸縮,能夠通過集群的方式實(shí)現(xiàn)負(fù)載均 衡本身的高可用性和可靠性,而
11、且集群本身可動(dòng)態(tài)伸縮。2.2 .服務(wù)路由需求服務(wù)路由是指服務(wù)使用者在獲取服務(wù)提供方列表后,從提供者地址列 表中,基于負(fù)載均衡算法或者路由策略,選擇一個(gè)提供者進(jìn)行調(diào)用,如果 調(diào)用失敗就再選另一個(gè)調(diào)用。具體需求如下:2.3 21.服務(wù)負(fù)載均衡當(dāng)服務(wù)提供方有多個(gè)服務(wù)實(shí)例時(shí),通過靈活的負(fù)載均衡策略選擇一個(gè) 實(shí)例進(jìn)行服務(wù)調(diào)用: 支持多種負(fù)載均衡策略,并且可自行擴(kuò)展; 支持隨機(jī)負(fù)載均衡策略,并且可以按照權(quán)重設(shè)置隨機(jī)概率; 支持負(fù)載均衡策略; 支持最少活躍調(diào)用數(shù)負(fù)載均衡策略,相同活躍數(shù)的采用隨機(jī)策略; 支持一致性策略負(fù)載均衡,保證相同參數(shù)的請(qǐng)求總是發(fā)送到同一 提供者,并且能夠保證當(dāng)某一個(gè)提供者不可用時(shí),原本
12、發(fā)往該提 供者的請(qǐng)求,基于虛擬節(jié)點(diǎn),平均調(diào)度到其他提供者;2 2 2.集群擴(kuò)展與容錯(cuò)當(dāng)服務(wù)提供方有多個(gè)服務(wù)實(shí)例時(shí),可以將多個(gè)服務(wù)實(shí)例組織成一個(gè)集 群,并對(duì)外偽裝成一個(gè)服務(wù)實(shí)例,對(duì)調(diào)用方透明: 支持多種集群容錯(cuò)方案,并支持自行擴(kuò)展; 支持集群方案,調(diào)用失敗時(shí)自動(dòng)切換,重試其他服務(wù)實(shí)例,并且 可以設(shè)置重試次數(shù)上限; 支持集群方案,一旦調(diào)用失敗,立即報(bào)錯(cuò); 支持集群方案,失敗安全,出現(xiàn)異常時(shí),直接忽略; 支持集群方案,失敗自動(dòng)恢復(fù),后臺(tái)記錄失敗請(qǐng)求,定時(shí)重發(fā); 支持集群方案,并行調(diào)用多個(gè)服務(wù)實(shí)例,只要一個(gè)成功即返回, 可以設(shè)置最大并行數(shù); 支持集群方案,廣播調(diào)用所有提供者,逐個(gè)調(diào)用,任意一個(gè)服務(wù) 實(shí)
13、例報(bào)錯(cuò)則報(bào)錯(cuò);3 .2.3,服務(wù)路由擴(kuò)展與規(guī)則當(dāng)服務(wù)提供方有多個(gè)服務(wù)實(shí)例時(shí),可以根據(jù)請(qǐng)求本身的信息(如參數(shù)、 等)、服務(wù)調(diào)用方的信息(如地址等)、服務(wù)提供方的信息(如地址等)等 進(jìn)行路由過濾,最后過濾出一個(gè)或多個(gè)實(shí)例提供服務(wù): 可根據(jù)條件設(shè)置路由規(guī)則或者通過腳本定義路由規(guī)則; 可以只針對(duì)特定服務(wù)或者特定服務(wù)實(shí)例地址設(shè)置路由規(guī)則; 對(duì)于條件路由規(guī)則,支持條件表達(dá)式定義,條件表達(dá)式可以采用 本身的字段與中的所有參數(shù),并且支持匹配、不匹配等條件,另 外支持多值、通配等方式; 對(duì)于腳本路由規(guī)則,支持引擎的所有腳本語(yǔ)言,如、等; 當(dāng)有多條路由規(guī)則時(shí),可以設(shè)置優(yōu)先級(jí);2 2 4.多協(xié)議支持根據(jù)不同服務(wù)實(shí)現(xiàn)
14、情況與不同服務(wù)調(diào)用方的實(shí)現(xiàn)方式,服務(wù)支持以不 同協(xié)議來暴露服務(wù):不同服務(wù)使用不同協(xié)議同一服務(wù)可以同時(shí)使用多種協(xié)議2.2.5.多版本支持當(dāng)一個(gè)接口實(shí)現(xiàn),出現(xiàn)不兼容升級(jí)時(shí),可以用版本號(hào)過渡,版本號(hào)不 同的服務(wù)相互間不引用。例如在針對(duì)某個(gè)服務(wù)進(jìn)行升級(jí)時(shí),為不影響服務(wù) 的可用性,可以選擇在低壓力時(shí)間段,先升級(jí)一半提供者為新版本,再將所有消費(fèi)者升級(jí)為新版本,然后將剩下的一半提供者升級(jí)為新版本。2 2 6,并發(fā)控制需求可以針對(duì)某個(gè)類的所有方法或者某個(gè)特定方法設(shè)置服務(wù)器端并發(fā) 執(zhí)行數(shù)量(或者占用線程池線程數(shù))??梢葬槍?duì)某個(gè)類的所有方法或者某個(gè)特定方法設(shè)置每客戶端并發(fā) 執(zhí)行數(shù)量(或者占用連接的請(qǐng)求數(shù)量)。2
15、2 7.連接控制需求可以針對(duì)服務(wù)器端接受的連接數(shù)設(shè)置最大值;可以針對(duì)服務(wù)設(shè)置客戶端使用的最大連接數(shù)(如果是長(zhǎng)連接,表 示該服務(wù)對(duì)每個(gè)提供者建立的長(zhǎng)連接數(shù))2 2 8.令牌驗(yàn)證與權(quán)限擴(kuò)展在微應(yīng)用中,針對(duì)不同調(diào)用方,調(diào)用前,需要通過用戶鑒權(quán),確定用 戶身份。微應(yīng)用中,對(duì)于服務(wù)方,需要按照調(diào)用方提供的鑒權(quán)信息,完成用戶 身份鑒定,并且通過系統(tǒng)中設(shè)置的用戶權(quán)限,完成用戶授權(quán),確定用戶是 否具有調(diào)用該服務(wù)的權(quán)限。 防止服務(wù)調(diào)用方不經(jīng)過鑒權(quán)、授權(quán)直接訪問服務(wù)提供方; 統(tǒng)一進(jìn)行鑒權(quán)控制,完成服務(wù)調(diào)用方身份確定;12 / 43 可以和巳經(jīng)存在的第三方鑒權(quán)系統(tǒng)對(duì)接; 統(tǒng)一進(jìn)行授權(quán)控制,完成服務(wù)調(diào)用者授權(quán); 可以
16、和巳經(jīng)存在的第三方授權(quán)系統(tǒng)對(duì)接;2.3 .數(shù)據(jù)路由需求微應(yīng)用架構(gòu)中每個(gè)服務(wù)由于可以獨(dú)立開發(fā)、部署與升級(jí),所以為避免 不同服務(wù)之間的相互影響,每個(gè)服務(wù)都可以有自己獨(dú)立的數(shù)據(jù)庫(kù)。不同服 務(wù)對(duì)數(shù)據(jù)庫(kù)的性能要求不同,所以要求數(shù)據(jù)庫(kù)能夠支持良好的伸縮性,以 能夠滿足不同服務(wù)的性能要求,比如對(duì)于訪問量較大的服務(wù)需要實(shí)現(xiàn)讀寫 分離,但這種數(shù)據(jù)庫(kù)層面的伸縮性與讀寫分離需要對(duì)應(yīng)用層進(jìn)行屏蔽。數(shù)據(jù)路由要求能夠?qū)崿F(xiàn)數(shù)據(jù)庫(kù)服務(wù)的可伸縮性,并且對(duì)服務(wù)透明。另 外采用數(shù)據(jù)路由后,對(duì)原有業(yè)務(wù)代碼無侵入,不需要對(duì)代碼進(jìn)行修改。3.微應(yīng)用智能路由模塊設(shè)計(jì)原則 可靠性對(duì)于應(yīng)用路由、服務(wù)路由與數(shù)據(jù)路由,都要提供高可用性解決 方案,
17、以確保微應(yīng)用的可用性;對(duì)于應(yīng)用路由,需要負(fù)載均衡通過集群模式實(shí)現(xiàn)應(yīng)用請(qǐng)求分發(fā) 的高可靠性;對(duì)于服務(wù)路由,即使服務(wù)注冊(cè)與發(fā)現(xiàn)功能不可用后,服務(wù)提供 方和服務(wù)調(diào)用方仍能通過本地緩存通訊;服務(wù)提供方無狀態(tài),任意一臺(tái)宕掉后,不影響使用;13 / 43服務(wù)提供方全部宕掉后,服務(wù)調(diào)用方應(yīng)用將無法使用,并無限 次重連等待服務(wù)提供方恢復(fù);對(duì)于數(shù)據(jù)路由,某臺(tái)后端數(shù)據(jù)庫(kù)的異常不應(yīng)影響后續(xù)的所有數(shù) 據(jù)庫(kù)讀寫訪問,并且通過數(shù)據(jù)庫(kù)同步技術(shù)能夠盡快恢復(fù)發(fā)生異 常的數(shù)據(jù)庫(kù); 伸縮性對(duì)于應(yīng)用路由、服務(wù)路由與數(shù)據(jù)路由,都要求能夠根據(jù)負(fù)載情 況進(jìn)行動(dòng)態(tài)伸縮;對(duì)于應(yīng)用路由,軟負(fù)載均衡要求能夠動(dòng)態(tài)增加或減少服務(wù)實(shí)例 來適應(yīng)負(fù)載的變化
18、;對(duì)于服務(wù)路由,服務(wù)提供方無狀態(tài),可動(dòng)態(tài)增加機(jī)器部署服務(wù) 實(shí)例,并會(huì)推送新的服務(wù)提供方信息給服務(wù)調(diào)用方;對(duì)于數(shù)據(jù)路由,后端可以動(dòng)態(tài)增加數(shù)據(jù)庫(kù),而對(duì)服務(wù)透明; 可管理性必須保證對(duì)智能路由系統(tǒng)中的每個(gè)模塊進(jìn)行統(tǒng)一管理與監(jiān)控, 維護(hù)和管理的操作要簡(jiǎn)單方便,并且能夠從中收集到統(tǒng)計(jì)信息 為系統(tǒng)優(yōu)化與參數(shù)調(diào)整提供依據(jù)。4微應(yīng)用智能路由模塊設(shè)計(jì)方案4.1, 應(yīng)用架構(gòu)設(shè)計(jì)軟負(fù)載均衡分布式數(shù)據(jù)庫(kù)框架圖錯(cuò)誤!未定義書簽,應(yīng)用架構(gòu)圖 軟負(fù)載均衡:負(fù)責(zé)客戶端到微應(yīng)用的路由處理,詳細(xì)介紹見章節(jié)。 分布式服務(wù)框架:負(fù)責(zé)微應(yīng)用到聚合服務(wù)業(yè)務(wù)服務(wù)的路由處理,以與聚合服務(wù)到業(yè)務(wù)服務(wù)的路由處理,詳細(xì)介紹見章節(jié)。 分布式數(shù)據(jù)庫(kù)框架
19、:負(fù)責(zé)業(yè)務(wù)服務(wù)到數(shù)據(jù)庫(kù)的路由處理,詳細(xì)介紹見章節(jié)。4.2, 技術(shù)架構(gòu)設(shè)計(jì) .2.1.軟負(fù)載均衡設(shè)計(jì)待補(bǔ)充。 .2.2.分布式服務(wù)框架設(shè)計(jì)4.2.2.1. 分布式服務(wù)框架模型初始化 異步 同步注冊(cè)中心1.注冊(cè)2.訂閱3 .通知0.開始5.訪問計(jì)數(shù)監(jiān)控中心圖錯(cuò)誤!未定義書簽,分布式服務(wù)框架模型 節(jié)點(diǎn)角色說明 服務(wù)提供方:暴露服務(wù)的服務(wù)提供方。 服務(wù)調(diào)用方:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)調(diào)用方。 注冊(cè)中心:服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心。 監(jiān)控中心:統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心。 服務(wù)容器:作為單獨(dú)進(jìn)程運(yùn)行或者運(yùn)行在容器中,在服務(wù)容器開始運(yùn) 行時(shí)加載和運(yùn)行所有服務(wù)提供方,供服務(wù)調(diào)用方調(diào)用服務(wù),當(dāng)服務(wù)容器停
20、止后相關(guān)服務(wù)不再可用。 調(diào)用關(guān)系說明.服務(wù)容器加載和運(yùn)行服務(wù)提供方。.服務(wù)提供方在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。.服務(wù)調(diào)用方在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。.注冊(cè)中心返回服務(wù)提供方地址列表給消費(fèi)者,如果有變更,注冊(cè)中 心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者。.服務(wù)調(diào)用方,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái) 提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。.服務(wù)調(diào)用方和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每 分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。422.2.注冊(cè)中心Web控制臺(tái)服務(wù)提供方查詢服務(wù)調(diào)用方查詢服務(wù)通知服務(wù)授權(quán)27 / 43Zookeeper 集群圖錯(cuò)誤!未定義
21、書簽。注冊(cè)中心架構(gòu)圖注冊(cè)中心分為控制臺(tái)和后端(集群)兩部分。1 .后端集群是注冊(cè)中心的關(guān)鍵部分,負(fù)責(zé)接收服務(wù)提供方的服務(wù)注冊(cè)、保存 服務(wù)提供方信息,接收服務(wù)調(diào)用方的訂閱并通知服務(wù)列表給服務(wù)調(diào)用方, 其具體工作原理如下圖所示:圖錯(cuò)誤!未定義書簽.注冊(cè)中心功能設(shè)計(jì) 基于的目錄節(jié)點(diǎn)實(shí)現(xiàn)服務(wù)提供方的注冊(cè),將服務(wù)提供方信息保存在節(jié)點(diǎn)上 基于目錄節(jié)點(diǎn)上的監(jiān)聽和事件通知功能實(shí)現(xiàn)服務(wù)調(diào)用方對(duì)服務(wù)提 供方的訂閱和發(fā)布通知 基于集群的主節(jié)點(diǎn)選舉、數(shù)據(jù)同步功能實(shí)現(xiàn)注冊(cè)中心的。2 .控制臺(tái)服務(wù)提供方查詢需能通過調(diào)用的獲取到巳經(jīng)注冊(cè)的所有服務(wù)提 供方,以與訂閱了該服務(wù)的服務(wù)調(diào)用方。服務(wù)調(diào)用方查詢需能通用通過的獲取巳經(jīng)訂
22、閱服務(wù)的所有服務(wù) 調(diào)用方,以與其訂閱的服務(wù)提供方。服務(wù)通知模塊需能夠接收的服務(wù)提供方變更通知,結(jié)合服務(wù)調(diào)用 方對(duì)服務(wù)提供方的訂閱信息以與服務(wù)授權(quán)情況,將服務(wù)方信息發(fā)送給 服務(wù)調(diào)用方。服務(wù)授權(quán)模塊需能接收用戶在控制臺(tái)前端頁(yè)面配置并由控制臺(tái) 后端保存在節(jié)點(diǎn)中,同時(shí)提供授權(quán)情況的查詢接口供服務(wù)通知模塊引 用O4223監(jiān)控?cái)?shù)據(jù)上報(bào)協(xié)議與傳輸眼務(wù)容器圖錯(cuò)誤味定義書簽。服務(wù)提供方功能模塊設(shè)計(jì)圖服務(wù)提供方由服務(wù)容器與運(yùn)行在其上的各子模塊組成,具體設(shè)計(jì)見以 下各子章節(jié)。4.2.23.1. 服務(wù)容器服務(wù)容器需能夠以獨(dú)立進(jìn)程方式持續(xù)運(yùn)行,服務(wù)容器啟動(dòng)后需完成以 下初始化處理,以確保服務(wù)調(diào)用方可以調(diào)用服務(wù)提供方:1
23、 .讀取服務(wù)提供方的配置文件獲取服務(wù)信息保存在緩存中2 .根據(jù)服務(wù)信息將服務(wù)注冊(cè)到注冊(cè)中心3 .根據(jù)服務(wù)的協(xié)議類型開放相應(yīng)協(xié)議的訪問接口4 .生成服務(wù)對(duì)應(yīng)的代理服務(wù)對(duì)象5 .為代理服務(wù)對(duì)象添加附加服務(wù)鏈,服務(wù)鏈中的服務(wù)需要根據(jù)服務(wù) 配置信息生成。4.2.23.2. 服務(wù)配置以文件的方式配置所有的服務(wù)提供方與注冊(cè)中心。服務(wù)提供方配置項(xiàng)包含對(duì)應(yīng)的名字、注冊(cè)中心、協(xié)議名稱、最大并 發(fā)數(shù)、最大連接數(shù)、令脾。注冊(cè)中心配置項(xiàng)包含的和,以與服務(wù)容器與通信的。服務(wù)配置還需提供服務(wù)查詢接口供服務(wù)容器初始化服務(wù)。4.2.23.3. 服務(wù)注冊(cè)服務(wù)被容器加載后需要注冊(cè)到注冊(cè)中心。服務(wù)注冊(cè)模塊先讀取服務(wù)配置獲取的信息,
24、再通過調(diào)用的將服務(wù)名稱、 服務(wù)協(xié)議、令牌、版本號(hào)發(fā)送到上。4.2.23.4. 協(xié)議與傳輸協(xié)議與傳輸模塊負(fù)責(zé)建立服務(wù)方的通信服務(wù)端、等待調(diào)用方的連接和 請(qǐng)求,并在處理完畢后響應(yīng)調(diào)用方。支持和協(xié)議如果協(xié)議是,則通過框架創(chuàng)建通信服務(wù)端,調(diào)用方使用框架創(chuàng)建通信 客戶端,并相互通信。如果協(xié)議是,則通過框架礦建通信服務(wù)端,調(diào)用方使用框架創(chuàng)建通信 客戶端,并相互通信。4.2.23.5. 代理服務(wù)基于技術(shù)在容器中產(chǎn)生代理服務(wù)類,在代理原生服務(wù)的功能基礎(chǔ)上還 要完成令牌校驗(yàn)、訪問統(tǒng)計(jì)、并發(fā)控制、連接控制等功能,各附加功能需 要調(diào)用附加服務(wù)鏈完成。4.2.23.6. 附加服務(wù)鏈每個(gè)代理服務(wù)都包含一個(gè)附加服務(wù)鏈,由
25、一系列附加服務(wù)組成,附加 服務(wù)包含令牌校驗(yàn)、訪問統(tǒng)計(jì)、并發(fā)控制、連接控制。代理服務(wù)類在處理服務(wù)請(qǐng)求時(shí),先順序執(zhí)行附加服務(wù)鏈中的附加服務(wù), 然后再調(diào)用原生服務(wù)的處理邏輯。若附加服務(wù)產(chǎn)生異常,則終止處理立即 響應(yīng)異常給調(diào)用方。當(dāng)請(qǐng)求處理完畢返回給調(diào)用方的時(shí)候,依然要經(jīng)過附加服務(wù)鏈,僅處 理訪問統(tǒng)計(jì)和并發(fā)控制。令牌校驗(yàn):從請(qǐng)求中獲取服務(wù)令牌,與緩存中的服務(wù)令牌比較,若相 同則校驗(yàn)通過繼續(xù)處理,否則響應(yīng)鑒權(quán)失敗。訪問統(tǒng)計(jì):在本地緩存中保存各服務(wù)的訪問統(tǒng)計(jì)數(shù),當(dāng)處理新的請(qǐng)求 時(shí)根據(jù)服務(wù)名讀取緩存中的統(tǒng)計(jì)數(shù),并進(jìn)行累加,同時(shí)記錄請(qǐng)求到來時(shí)間, 當(dāng)請(qǐng)求處理完畢后還要經(jīng)過訪問統(tǒng)計(jì),此時(shí)再用當(dāng)前時(shí)間減去請(qǐng)求到來
26、時(shí) 間計(jì)算出本次請(qǐng)求處理時(shí)長(zhǎng),并保存在緩存中。并發(fā)控制:在本地緩存中保存各服務(wù)當(dāng)前并發(fā)數(shù),當(dāng)處理新的請(qǐng)求時(shí) 根據(jù)服務(wù)名讀取當(dāng)前并發(fā)數(shù),計(jì)算并發(fā)數(shù)加是否超過服務(wù)的最大并發(fā)數(shù), 如果超出則響應(yīng)異常,否則繼續(xù)執(zhí)行下一個(gè)附加服務(wù)。當(dāng)請(qǐng)求響應(yīng)階段再 次經(jīng)過并發(fā)控制時(shí),將對(duì)應(yīng)并發(fā)數(shù)減。連接控制:在本地緩存中保存各服務(wù)巳建立的連接,當(dāng)處理新的請(qǐng)求 時(shí)根據(jù)服務(wù)名和客戶端判斷巳建立連接數(shù)是否超過最大連接數(shù),如果超出 則響應(yīng)異常、斷開連接并刪除緩存中的連接記錄,否則繼續(xù)執(zhí)行下一個(gè)附 加服務(wù)。4.2.23.7. 監(jiān)控?cái)?shù)據(jù)上報(bào)監(jiān)控?cái)?shù)據(jù)上報(bào)需要每分鐘觸發(fā)一次,完成以下處理:1 .從緩存中讀取所有服務(wù)的調(diào)用統(tǒng)計(jì)數(shù)與每次訪
27、問處理時(shí)長(zhǎng)。2 .清空緩存中服務(wù)調(diào)用統(tǒng)計(jì)數(shù)和訪問處理時(shí)長(zhǎng)。3 .用訪問處理總時(shí)長(zhǎng)除以訪問次數(shù)得出平均處理時(shí)長(zhǎng)。4 .將調(diào)用統(tǒng)計(jì)書和平均處理時(shí)長(zhǎng)發(fā)送給監(jiān)控中心。4.2.2.4.服務(wù)調(diào)用方調(diào)川方配汽訂閱與接收監(jiān)控?cái)?shù)據(jù)上報(bào)附加服務(wù)鏈 容錯(cuò)集群協(xié)議與傳輸圖錯(cuò)誤!未定義書整。服務(wù)調(diào)用方功能模塊設(shè)計(jì)圖服務(wù)調(diào)用方由上圖中的各子模塊組成,具體設(shè)計(jì)見以下各子章節(jié)。4.2.2.4.1, 服務(wù)調(diào)用方配置以文件的方式配置所有的服務(wù)提供方與注冊(cè)中心。服務(wù)提供方配置項(xiàng)包含對(duì)應(yīng)的名字、注冊(cè)中心、協(xié)議名稱、最大并發(fā) 數(shù)、最大連接數(shù)、令牌。注冊(cè)中心配置項(xiàng)包含的和,以與服務(wù)容器與通信的。服務(wù)配置還需提供服務(wù)查詢接口供服務(wù)容器初始
28、化服務(wù)。42242.訂閱與接收?qǐng)D錯(cuò)誤味定義書簽服務(wù)訂閱與接收令訂閱服務(wù)調(diào)用方啟動(dòng)時(shí),在引用服務(wù)前首先將自身需要引用的服務(wù)注冊(cè)到 注冊(cè)中心(),然后訂閱系統(tǒng)需要的服務(wù)。如果同時(shí)引用多個(gè)接口,則上面的過程會(huì)重復(fù)執(zhí)行多次。令接收完成了服務(wù)訂閱以后,服務(wù)調(diào)用方會(huì)與注冊(cè)中心建立一個(gè)長(zhǎng)連接,隨 后,會(huì)接收到注冊(cè)中心主動(dòng)發(fā)送的訂閱信息。注冊(cè)中心主動(dòng)推送訂閱信息 的的條件如下:1 .新的服務(wù)調(diào)用方注冊(cè)2 .服務(wù)調(diào)用方訂閱的服務(wù)發(fā)生變化(如:新服務(wù)上線、下線等)例如:一個(gè)消費(fèi)者注冊(cè)了一個(gè),系統(tǒng)在啟動(dòng)時(shí),首先聲明自己是的一 個(gè)消費(fèi)者,然后再向注冊(cè)中心聲明自己需要訂閱,最后,接收注冊(cè)中心推 送訂閱的服務(wù),緩存到本地
29、。如果服務(wù)提供方發(fā)生任何變化,也會(huì)接收到 注冊(cè)中心推送的更新信息。4.2.2.43,監(jiān)控?cái)?shù)據(jù)上報(bào)監(jiān)控?cái)?shù)據(jù)上報(bào)需要每分鐘觸發(fā)一次,完成以下處理:1 .從緩存中讀取所有服務(wù)的調(diào)用統(tǒng)計(jì)數(shù)與每次訪問處理時(shí)長(zhǎng)。2 .清空緩存中服務(wù)調(diào)用統(tǒng)計(jì)數(shù)和訪問處理時(shí)長(zhǎng)。3 .用訪問處理總時(shí)長(zhǎng)除以訪問次數(shù)得出平均處理時(shí)長(zhǎng)。4 .將調(diào)用統(tǒng)計(jì)和平均處理時(shí)長(zhǎng)發(fā)送給監(jiān)控中心。42244.附加服務(wù)鏈每個(gè)代理服務(wù)都包含一個(gè)附加服務(wù)鏈,由一系列附加控制組成,附加 控制包含令牌校驗(yàn)、訪問統(tǒng)計(jì)、并發(fā)控制、連接控制。代理服務(wù)類在處理服務(wù)請(qǐng)求時(shí),先順序執(zhí)行附加服務(wù)鏈中的附加服務(wù), 然后再調(diào)用原生服務(wù)的處理邏輯。若附加服務(wù)產(chǎn)生異常,則終止處理
30、立即 響應(yīng)異常給調(diào)用方。當(dāng)請(qǐng)求處理完畢返回給調(diào)用方的時(shí)候,依然要經(jīng)過附加服務(wù)鏈,僅處 理訪問統(tǒng)計(jì)和并發(fā)控制。令牌校驗(yàn):從本地獲取服務(wù)令牌,附加在請(qǐng)求中一并上傳。訪問統(tǒng)計(jì):在本地緩存中保存各服務(wù)的訪問統(tǒng)計(jì)數(shù),當(dāng)處理新的請(qǐng)求 時(shí)根據(jù)服務(wù)名讀取緩存中的統(tǒng)計(jì)數(shù),并進(jìn)行累加,同時(shí)記錄請(qǐng)求到來時(shí)間, 當(dāng)請(qǐng)求處理完畢后還要經(jīng)過訪問統(tǒng)計(jì),此時(shí)再用當(dāng)前時(shí)間減去請(qǐng)求到來時(shí) 間計(jì)算出本次請(qǐng)求處理時(shí)長(zhǎng),并保存在緩存中。并發(fā)控制:在本地緩存中保存各服務(wù)當(dāng)前并發(fā)數(shù),當(dāng)處理新的請(qǐng)求時(shí) 根據(jù)服務(wù)名讀取當(dāng)前并發(fā)數(shù),計(jì)算并發(fā)數(shù)加是否超過服務(wù)的最大并發(fā)數(shù), 如果超出則響應(yīng)異常,否則繼續(xù)執(zhí)行下一個(gè)附加服務(wù)。當(dāng)請(qǐng)求響應(yīng)階段再 次經(jīng)過并
31、發(fā)控制時(shí),將對(duì)應(yīng)并發(fā)數(shù)減。連接控制:在本地緩存中保存各服務(wù)巳建立的連接,當(dāng)處理新的請(qǐng)求 時(shí)根據(jù)服務(wù)名和客戶端判斷巳建立連接數(shù)是否超過最大連接數(shù),如果超出 則響應(yīng)異常、斷開連接并刪除緩存中的連接記錄,否則繼續(xù)執(zhí)行下一個(gè)附 加服務(wù)。4.2.245容錯(cuò)集群圖錯(cuò)誤味定義書簽。容錯(cuò)集群結(jié)構(gòu)圖令容錯(cuò)容錯(cuò)的主要功能是在服務(wù)調(diào)用方實(shí)現(xiàn)的。調(diào)用代理之后,是容錯(cuò)處理 模塊,它根據(jù)不同的容錯(cuò)模式,處理調(diào)用時(shí)產(chǎn)生的錯(cuò)誤。具體支持的容錯(cuò) 模式包括:/ (缺省模式)失敗自動(dòng)切換,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器。增加配置項(xiàng)設(shè)置重試次數(shù)??焖偈?,只發(fā)起一次調(diào)用,失敗立即報(bào)錯(cuò)。失敗安全,出現(xiàn)異常時(shí),直接忽略。失敗自動(dòng)恢復(fù),后臺(tái)記
32、錄失敗請(qǐng)求,定時(shí)重發(fā)。令路由規(guī)則需要支持的路由規(guī)則包含:按條件規(guī)則過濾服務(wù),以條件表達(dá)式形式配置,路由時(shí)解析實(shí)際 是否符合條件表達(dá)式。條件表達(dá)式支持匹配、不匹配,匹配規(guī)則 需支持多值和統(tǒng)配。令負(fù)載均衡負(fù)載均衡的主要功能是在服務(wù)調(diào)用方實(shí)現(xiàn)的。容錯(cuò)處理模塊在完成條 件過濾以后,選擇出合適的服務(wù)提供方列表,然后根據(jù)不同的負(fù)載均衡模 式,確定具體的服務(wù)提供方。具體支持的負(fù)載均衡模式包括:/隨機(jī),按權(quán)重設(shè)置隨機(jī)概率。輪循,按公約后的權(quán)重設(shè)置輪循比率。/最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計(jì)數(shù) 差。42246.協(xié)議與傳輸協(xié)議與傳輸模塊負(fù)責(zé)建立服務(wù)方的通信服務(wù)端、等待調(diào)用方的連接和 請(qǐng)求,并在
33、處理完畢后響應(yīng)調(diào)用方。支持和協(xié)議如果協(xié)議是,則通過框架創(chuàng)建通信服務(wù)端,調(diào)用方使用框架創(chuàng)建通信28 / 43請(qǐng)求舉響應(yīng)問個(gè)蜜務(wù)的兩個(gè)不同實(shí)例服務(wù)調(diào)用方客戶端,并相互通信。如果協(xié)議是,則通過框架礦建通信服務(wù)端,調(diào)用方使用框架創(chuàng)建通信 客戶端,并相互通信。4.2.2.I服務(wù)調(diào)用服務(wù)提供方圖錯(cuò)誤!未定義書簽,服務(wù)調(diào)用流程調(diào)用流程中各處理模塊的設(shè)計(jì)見和章節(jié)。4.2.2, 6.監(jiān)控中心數(shù)據(jù)接收監(jiān)控?cái)?shù)據(jù)查詢監(jiān)控圖表處理服務(wù)調(diào)用方服務(wù)提供方監(jiān)控中心圖錯(cuò)誤味定義書簽。監(jiān)控中心架構(gòu)圖監(jiān)控中心負(fù)責(zé)獲取各服務(wù)調(diào)用方對(duì)各服務(wù)的累計(jì)訪問次數(shù)和處理時(shí)間,以與服務(wù)提供方響應(yīng)服務(wù)調(diào)用方的累計(jì)訪問次數(shù)和響應(yīng)時(shí)間,并能夠 提供頁(yè)面
34、展示監(jiān)控?cái)?shù)據(jù)。監(jiān)控中心需按下圖方式獲取監(jiān)控?cái)?shù)據(jù)。7.服務(wù)提供者被調(diào)用計(jì)數(shù)9服務(wù)提供者被調(diào)用計(jì)數(shù)圖錯(cuò)誤!未定義書簽。監(jiān)控中心活動(dòng)圖4.2.3, 分布式數(shù)據(jù)庫(kù)框架設(shè)計(jì)4.2.3.1. 系統(tǒng)架構(gòu)簡(jiǎn)介整個(gè)分布式數(shù)據(jù)庫(kù)框架如下圖。它分為通信層、處理層、數(shù)據(jù)庫(kù)通信 層和系統(tǒng)監(jiān)控模塊。30 / 43應(yīng)用1應(yīng)用1OracleMySQL圖錯(cuò)誤味定義書簽。分布式數(shù)據(jù)庫(kù)框架通信層指的是的二進(jìn)制適配層,他將整個(gè)分布式數(shù)據(jù)庫(kù)框架偽裝成一 個(gè)的數(shù)據(jù)庫(kù),兼容所有的客戶端,如:、等。為了能夠得到更高的性能, 系統(tǒng)設(shè)置了前端的應(yīng)用連接池。處理層主要完成語(yǔ)句的解析和路由分發(fā),并且將語(yǔ)句在數(shù)據(jù)庫(kù)中執(zhí)行 的結(jié)果返回給用戶。數(shù)據(jù)庫(kù)通信
35、層是一數(shù)據(jù)庫(kù)連接池,通過二進(jìn)制協(xié)議連 接數(shù)據(jù)庫(kù);或者通過,連接其他兼容數(shù)據(jù)庫(kù)。監(jiān)控模塊的主要功能是對(duì)分布式數(shù)據(jù)庫(kù)框架的工作狀態(tài)進(jìn)行全面的 管理和監(jiān)控。423.2.讀寫分離數(shù)據(jù)庫(kù)讀寫分離對(duì)于大型系統(tǒng)或者訪問量很高的互聯(lián)網(wǎng)應(yīng)用來說,是 必不可少的一個(gè)重要功能。從數(shù)據(jù)庫(kù)的角度來說,對(duì)于大多數(shù)應(yīng)用來說,從集中到分布,最基本 31 / 43的一個(gè)需求不是數(shù)據(jù)存儲(chǔ)的瓶頸,而是在于計(jì)算的瓶頸,即查詢的瓶頸, 我們知道,正常情況下,就是幾十個(gè)亳秒的時(shí)間內(nèi)寫入完成,而系統(tǒng)中的 大多數(shù)則要幾秒到幾分鐘才能有結(jié)果,很多復(fù)雜的,其消耗服務(wù)器的能力 超強(qiáng),不亞于死循環(huán)的威力。在沒有讀寫分離的系統(tǒng)上,很可能高峰時(shí)段 的一
36、些復(fù)雜查詢就導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)器爆表,系統(tǒng)陷入癱瘓,嚴(yán)重情況下可 能導(dǎo)致數(shù)據(jù)庫(kù)崩潰。因此,從保護(hù)數(shù)據(jù)庫(kù)的角度來說,我們應(yīng)該盡量避免 沒有主從復(fù)制機(jī)制的單節(jié)點(diǎn)數(shù)據(jù)庫(kù)。分布式數(shù)據(jù)庫(kù)框架就是自動(dòng)完成語(yǔ)句讀寫分離的高性能代理。4.23.2.1. 分布式數(shù)據(jù)庫(kù)框架支持的讀寫分離圖錯(cuò)誤床定義書簽。分布式數(shù)據(jù)庫(kù)框架讀寫分離當(dāng)數(shù)據(jù)庫(kù)按照主從復(fù)制方式配置好集群以后,就可以通過分布式數(shù)據(jù) 庫(kù)框架實(shí)現(xiàn)讀寫分離機(jī)制。數(shù)據(jù)庫(kù)訪問客戶端直接連接在分布式數(shù)據(jù)庫(kù)框架上。框架通過對(duì)語(yǔ)句的解析,分辨出數(shù)據(jù)查詢語(yǔ)0句和數(shù)據(jù)操作語(yǔ)句(),然后將數(shù)據(jù)查詢 32 / 43語(yǔ)句發(fā)送到從庫(kù)集群上實(shí)現(xiàn)數(shù)據(jù)查詢,將數(shù)據(jù)操作語(yǔ)句發(fā)送到主庫(kù)上實(shí)現(xiàn) 數(shù)據(jù)
37、操作。所有的數(shù)據(jù)庫(kù)操作通過主從復(fù)制的方式,將所有的數(shù)據(jù)修改發(fā)送到從 庫(kù)上,實(shí)現(xiàn)主庫(kù)和從庫(kù)的數(shù)據(jù)同步。分布式數(shù)據(jù)庫(kù)框架還會(huì)和所有的數(shù)據(jù)庫(kù)定時(shí)握手,當(dāng)發(fā)現(xiàn)數(shù)據(jù)庫(kù)出現(xiàn) 故障時(shí),會(huì)自動(dòng)將故障服務(wù)器剔除出集群。如果主庫(kù)出現(xiàn)故障,則涉與到 分布式數(shù)據(jù)庫(kù)框架高可用,請(qǐng)參見“分布式數(shù)據(jù)庫(kù)框架高可用”章節(jié)。4.23.2.2. 數(shù)據(jù)庫(kù)主從復(fù)制方案主從復(fù)制對(duì)于數(shù)據(jù)庫(kù)來說,標(biāo)準(zhǔn)的讀寫分離是主從模式,一個(gè)主庫(kù)后面跟著多 個(gè)從庫(kù),從庫(kù)的數(shù)量取決于系統(tǒng)的壓力,通常是個(gè)從庫(kù)的配置,如下圖所 示:主庫(kù)Write Host圖錯(cuò)誤!未定義書簽。數(shù)據(jù)庫(kù)主從復(fù)制配置除了一主多從,數(shù)據(jù)庫(kù)還支持更多的主從復(fù)制的拓?fù)潢P(guān)系,如下圖所 示,但通
38、常我們不會(huì)采用雙向主從同步以與環(huán)狀的拓?fù)洌?3 / 43圖錯(cuò)誤!未定義書簽。數(shù)據(jù)庫(kù)主從復(fù)制拓?fù)?.23.2.3. 數(shù)據(jù)庫(kù)主從復(fù)制原理第一步是在主庫(kù)上記錄二進(jìn)制日志(稍后介紹如何設(shè)置)。在每次準(zhǔn) 備提交事務(wù)完成數(shù)據(jù)更新前,主庫(kù)將數(shù)據(jù)更新的事件記錄到二進(jìn)制日志中。 數(shù)據(jù)庫(kù)會(huì)按事務(wù)提交的順序而非每條語(yǔ)句的執(zhí)行順序來記錄二進(jìn)制日志。 在記錄二進(jìn)制日志后,主庫(kù)會(huì)告訴存儲(chǔ)引擎可以提交事務(wù)了。下一步,從 庫(kù)將主庫(kù)的二進(jìn)制日志復(fù)制到其本地的中繼日志中。首先,從庫(kù)會(huì)啟動(dòng)一 個(gè)工作線程,稱為線程,線程跟主庫(kù)建立一個(gè)普通的客戶端連接,然后在 主庫(kù)上啟動(dòng)一個(gè)特殊的二進(jìn)制轉(zhuǎn)儲(chǔ)()線程,這個(gè)二進(jìn)制轉(zhuǎn)儲(chǔ)線程會(huì)讀取主 庫(kù)上二
39、進(jìn)制日志中的事件。如果該線程追趕上了主庫(kù),它將進(jìn)入睡眠狀態(tài), 直到主庫(kù)發(fā)送信號(hào)量通知其有新的事件產(chǎn)生時(shí)才會(huì)被喚醒,從庫(kù)線程會(huì)將 接收到的事件記錄到中繼日志中。從庫(kù)的線程執(zhí)行最后一步,該線程從中繼日志中讀取事件并在備庫(kù)執(zhí)行,從而實(shí)現(xiàn)備庫(kù)數(shù)據(jù)的更新。當(dāng)線程追趕上線程時(shí),中繼日志通常巳經(jīng) 34 / 43在系統(tǒng)緩存中,所以中繼日志的開銷很低。線程執(zhí)行的事件也可以通過配 置選項(xiàng)來決定是否寫入其自己的二進(jìn)制日志中。這種復(fù)制架構(gòu)實(shí)現(xiàn)了獲取 事件和重放事件的解耦,允許這兩個(gè)過程異步進(jìn)行。也就是說線程能夠獨(dú) 立于線程之外工作。但這種架構(gòu)也限制了復(fù)制的過程,其中最重要的一點(diǎn) 是在主庫(kù)上并發(fā)運(yùn)行的在備庫(kù)只能串行化執(zhí)
40、行,因?yàn)橹挥幸粋€(gè)線程來重放 中繼日志中的事件。這是很多工作負(fù)載的性能瓶頸所在。雖然有一些針對(duì) 該問題的解決方案,但大多數(shù)用戶仍然受制于單線程。4.233.高可用4.23.3.1. 分布式數(shù)據(jù)庫(kù)框架支持的高可用分布式數(shù)據(jù)庫(kù)框架作為一個(gè)代理層中間件,分布式數(shù)據(jù)庫(kù)框架系統(tǒng)的 高可用涉與到分布式數(shù)據(jù)庫(kù)框架本身的高可用以與后端數(shù)據(jù)庫(kù)的高可用。 本章節(jié)首先討論分布式數(shù)據(jù)庫(kù)框架自身的高可用,下面的章節(jié)討論分布式 數(shù)據(jù)庫(kù)框架所連接的后端數(shù)據(jù)庫(kù)服務(wù)的高可用性。在大多數(shù)情況下,建議 采用標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)主從復(fù)制高可用性配置并交付給分布式數(shù)據(jù)庫(kù)框架來 完成后端數(shù)據(jù)庫(kù)節(jié)點(diǎn)的主從自動(dòng)切換。圖錯(cuò)誤味定義書簽。分布式數(shù)據(jù)庫(kù)框架
41、讀寫分離如圖所示,數(shù)據(jù)庫(kù)節(jié)點(diǎn)開啟主從復(fù)制的配置方案,并將主節(jié)點(diǎn)配置為 分布式數(shù)據(jù)庫(kù)框架的主庫(kù),從節(jié)點(diǎn)配置為從庫(kù),同時(shí)分布式數(shù)據(jù)庫(kù)框架內(nèi) 部定期對(duì)所有主庫(kù)與從庫(kù)節(jié)點(diǎn)發(fā)起心跳檢測(cè)。圖錯(cuò)誤床定義書簽,分布式數(shù)據(jù)庫(kù)框架故障恢復(fù)正常情況下,分布式數(shù)據(jù)庫(kù)框架會(huì)將第一個(gè)主庫(kù)作為寫節(jié)點(diǎn),所有的 數(shù)據(jù)操作語(yǔ)句會(huì)發(fā)送給此節(jié)點(diǎn),若分布式數(shù)據(jù)庫(kù)框架開啟了讀寫分離,則 分布式數(shù)據(jù)庫(kù)框架會(huì)根據(jù)讀寫分離的策略發(fā)往從庫(kù)執(zhí)行,當(dāng)配置了兩個(gè)或 多個(gè)主庫(kù)的情況下,如果第一個(gè)主庫(kù)宕機(jī),則分布式數(shù)據(jù)庫(kù)框架會(huì)在默認(rèn) 的次心跳檢查失敗后,自動(dòng)切換到下一個(gè)可用的主庫(kù)執(zhí)行數(shù)據(jù)操作語(yǔ)句O當(dāng)原來配置的數(shù)據(jù)庫(kù)主庫(kù)宕機(jī)恢復(fù)以后,為了保證數(shù)據(jù)庫(kù)系統(tǒng)中的
42、數(shù) 據(jù)一致性,恢復(fù)的節(jié)點(diǎn)不會(huì)自動(dòng)加入集群。需要重新配置同步源,手工完 成數(shù)據(jù)庫(kù)數(shù)據(jù)同步以后,再加入分布式數(shù)據(jù)庫(kù)框架里。這個(gè)過程里,可以 先修改數(shù)據(jù)庫(kù)的密碼,讓分布式數(shù)據(jù)庫(kù)框架無法鏈接故障服務(wù)器,等同步 完成以后,恢復(fù)密碼,這樣分布式數(shù)據(jù)庫(kù)框架就自動(dòng)重新將修復(fù)好的分布 式數(shù)據(jù)庫(kù)框架納管進(jìn)來了。說完了數(shù)據(jù)庫(kù)部分,接下來我們看看分布式數(shù)據(jù)庫(kù)框架自身的高可用 性,由于分布式數(shù)據(jù)庫(kù)框架自身是屬于無狀態(tài)的中間件,因此分布式數(shù)據(jù) 庫(kù)框架很容易部署為集群方式,提供高可用方案。建議采用基于硬件的負(fù) 載均衡器或者軟件方式的負(fù)載均衡器。下圖是軟件負(fù)載均衡器分布式數(shù)據(jù) 庫(kù)框架集群數(shù)據(jù)庫(kù)主從復(fù)制所組成的高可用性方案:負(fù)載均衡器圖錯(cuò)誤床定義書簽。分布式數(shù)據(jù)庫(kù)框架高可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課件獲取網(wǎng)站教學(xué)課件
- 籃球社團(tuán)教案
- 極地安全課件教學(xué)課件
- 企業(yè)勞動(dòng)合同管理要點(diǎn)解析
- 二手紡織機(jī)械買賣協(xié)議
- 倉(cāng)儲(chǔ)物流消防安全管理辦法
- 個(gè)人與銀行貸款合同范本
- 人力資源專員勞務(wù)合同電子版
- 產(chǎn)品檢測(cè)認(rèn)證委托協(xié)議
- 二手潤(rùn)滑油轉(zhuǎn)讓協(xié)議
- GB/T 21633-2020摻混肥料(BB肥)
- GB/T 21435-2008相變加熱爐
- 河南省洛陽(yáng)市《綜合能力測(cè)試》事業(yè)單位國(guó)考真題
- 智慧消防整體解決方案消防大數(shù)據(jù)一體化管理平臺(tái)解課件
- 《推窗風(fēng)來》中考語(yǔ)文作文優(yōu)秀6篇
- 腹部血管疾病的超聲診斷課件整理
- 《客源國(guó)概論》期末考試題
- 公司吸煙管理規(guī)定范文
- 《江蘇省建筑業(yè)10項(xiàng)新技術(shù)(2021)》
- 建立高效護(hù)理團(tuán)隊(duì)課件
- DBJ51 014-2021 四川省建筑地基基礎(chǔ)檢測(cè)技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論