分析:網(wǎng)站的分布式架構(gòu)_第1頁
分析:網(wǎng)站的分布式架構(gòu)_第2頁
分析:網(wǎng)站的分布式架構(gòu)_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

分析:網(wǎng)站的分布式架構(gòu)

不管是B/S架構(gòu)的企業(yè)管理系統(tǒng)還是網(wǎng)站技術(shù)架構(gòu)可以抽象為如下簡(jiǎn)圖:在傳統(tǒng)B/S架構(gòu)的企業(yè)管理系統(tǒng)里,技術(shù)架構(gòu)往往就是一個(gè)工程項(xiàng)目,各個(gè)邏輯分層都是該工程的業(yè)務(wù)邏輯模塊。但是作為提供公共服務(wù)的網(wǎng)站,由于用戶群比較龐大,網(wǎng)站并發(fā)量高,需求變化大,變更頻繁以及網(wǎng)站出于對(duì)安全的考慮,以上的邏輯分層在技術(shù)架構(gòu)上的實(shí)現(xiàn)也就會(huì)復(fù)雜的多。本人前不久做一個(gè)網(wǎng)站,我設(shè)計(jì)的技術(shù)架構(gòu)簡(jiǎn)圖如下:我把網(wǎng)站項(xiàng)目拆分為三個(gè)子項(xiàng)目:前端項(xiàng)目、服務(wù)端項(xiàng)目和memcache項(xiàng)目,前端項(xiàng)目包含頁面、靜態(tài)資源和控制層;服務(wù)端項(xiàng)目包含業(yè)務(wù)層和數(shù)據(jù)庫操作層;memcache項(xiàng)目緩存前端項(xiàng)目和服務(wù)端項(xiàng)目公用的數(shù)據(jù)。在系統(tǒng)部署上,前端項(xiàng)目和服務(wù)端項(xiàng)目都采用分布式方式(我們的網(wǎng)站前端是4臺(tái)服務(wù)器,服務(wù)端是4臺(tái)服務(wù)器),用戶請(qǐng)求進(jìn)入前先通過負(fù)載均衡設(shè)備進(jìn)行請(qǐng)求分發(fā),前端和服務(wù)端之間以及服務(wù)端和數(shù)據(jù)庫之間有防火墻保證系統(tǒng)的安全性,前端的集群和服務(wù)端集群分屬到不同網(wǎng)絡(luò)環(huán)境里,前端集群可以訪問外網(wǎng),服務(wù)端集群和數(shù)據(jù)庫所在網(wǎng)絡(luò)不能直接訪問外網(wǎng),但是前端網(wǎng)絡(luò)環(huán)境和服務(wù)端網(wǎng)絡(luò)環(huán)境之間可以進(jìn)行通信。服務(wù)端和客戶端用我們自定義的報(bào)文進(jìn)行通訊,傳輸協(xié)議時(shí)http,由于本人所在的網(wǎng)站安全性要求比較高,用戶傳輸?shù)恼?qǐng)求協(xié)議使用https。為了保證服務(wù)端和客戶端通訊的效率,客戶端和服務(wù)端通訊我們使用長(zhǎng)連接(我們網(wǎng)站服務(wù)端語言選擇的是java,通訊層使用netty框架開發(fā)的),為了保證長(zhǎng)連接,我們寫了一個(gè)心跳檢測(cè)服務(wù),該服務(wù)在后臺(tái)線程里運(yùn)行,每個(gè)5分鐘檢測(cè)一次心跳,當(dāng)然檢測(cè)的間隔時(shí)間是可以配置的。此外,我們事先估計(jì)過網(wǎng)站的最大并發(fā)量,在網(wǎng)站啟動(dòng)時(shí)候,我們構(gòu)建了一個(gè)線程池(我們使用的服務(wù)器是8核處理器,每核最大線程數(shù)256,所以我們線程池里總共的最大線程總數(shù)數(shù)是8*256*4=8196),每個(gè)線程處理一個(gè)用戶的請(qǐng)求。由于客戶端項(xiàng)目采取分布式部署,因此存在session共享的問題,我們網(wǎng)站的session共享沒有使用web容器自帶的session共享機(jī)制,而是我們自己研發(fā)了一套session機(jī)制,原理很簡(jiǎn)單,具體是我們會(huì)對(duì)每個(gè)用戶會(huì)話生成一個(gè)唯一標(biāo)示,我們的唯一標(biāo)示是這么設(shè)計(jì):當(dāng)前用戶的session的id值+隨機(jī)16位數(shù)字和字母組合+當(dāng)前的納秒值,然后將該值哈希算出一個(gè)key,原有保存在session里的值保存在memcache集群里,這些數(shù)據(jù)的key就是我們算出的用戶唯一標(biāo)示。最終我們網(wǎng)站前端不在使用session對(duì)象,而是我們自己設(shè)計(jì)的session機(jī)制,對(duì)此我們還封裝了一套自定義標(biāo)簽,在頁面上操作我們自定義的session。服務(wù)端也有類似的共享機(jī)制,但是有所不同,當(dāng)客戶端請(qǐng)求服務(wù)端時(shí)候,請(qǐng)求會(huì)具體落到服務(wù)端的某一臺(tái)服務(wù)器,因?yàn)楸揪W(wǎng)站有些請(qǐng)求處理時(shí)異步的,也就是說客戶某些請(qǐng)求不是立即返回給用戶,而是現(xiàn)將請(qǐng)求分發(fā)給服務(wù)端,此時(shí)客戶端會(huì)返回用戶一個(gè)相應(yīng)標(biāo)示,說明該請(qǐng)求已經(jīng)被受理,正在處理中,而服務(wù)端的某個(gè)線程此時(shí)已經(jīng)開始處理了該請(qǐng)求,客戶端按一定時(shí)間間隔發(fā)送請(qǐng)求給服務(wù)端,問詢請(qǐng)求是否處理完成,但是服務(wù)端也是分布式,請(qǐng)求時(shí)隨機(jī)發(fā)送,客戶端的問詢可能會(huì)分發(fā)到別的服務(wù)器,因此這樣的請(qǐng)求,我會(huì)在客戶端記錄下處理的服務(wù)端ip地址和線程id,在問詢的時(shí)候就會(huì)訪問指定好的服務(wù)器和線程,直到請(qǐng)求處理完畢,最后關(guān)閉詢問,將結(jié)果返回給用戶。由于我們把一個(gè)網(wǎng)站項(xiàng)目拆分成了三個(gè)獨(dú)立項(xiàng)目,因此在項(xiàng)目管理和協(xié)調(diào)上增加了難度,所以我們引入maven框架對(duì)工程進(jìn)行了管理和構(gòu)建,同時(shí)構(gòu)建一個(gè)common工程,專門負(fù)責(zé)服務(wù)端和前端公共程序的開發(fā)。本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論