400-638-8808
|
微信公眾號(hào)





穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級(jí)功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

微信掃一掃 關(guān)注"天下數(shù)據(jù)"商品一律九折
![]()
搜索"朗玥科技"關(guān)注,了解最新優(yōu)惠

簡(jiǎn)單談一談高并發(fā)服務(wù)器框架設(shè)計(jì)的基本思路
基本的服務(wù)器框架都是C/S結(jié)構(gòu)的,請(qǐng)求和相應(yīng)流程是這樣的:

這樣的框架存在一個(gè)很嚴(yán)重的問題,當(dāng)客戶端高并發(fā)請(qǐng)求到來,服務(wù)器需要進(jìn)行大量的數(shù)據(jù)庫操作,假設(shè)數(shù)據(jù)庫最大連接數(shù)為
1000個(gè),此時(shí)有10000個(gè)請(qǐng)求訪問應(yīng)用服務(wù)器,那么應(yīng)用服務(wù)器只能處理1000個(gè)請(qǐng)求,剩下99000個(gè)等待1000個(gè)請(qǐng)求處理好后
再進(jìn)行訪問數(shù)據(jù)庫處理?梢栽趹(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器中間增加中間層DAL,DAL采用緩沖隊(duì)列和連接池設(shè)計(jì)。

DAL設(shè)計(jì)緩沖隊(duì)列,存儲(chǔ)等待的請(qǐng)求,并且DAL中設(shè)計(jì)數(shù)據(jù)庫連接池,當(dāng)數(shù)據(jù)庫連接池中有空閑連接,
那么從緩沖隊(duì)列中取出一個(gè)請(qǐng)求處理,以此類推。這種做法有效的降低了服務(wù)器的壓力,但是沒有提高處理速度,
僅僅保證了請(qǐng)求被緩存,處理效率仍受限于數(shù)據(jù)庫的并發(fā)數(shù)。那么可以再增加一層緩存,將常用的數(shù)據(jù)加載如緩存,
有請(qǐng)求到來時(shí),應(yīng)用服務(wù)器先從緩存中獲取數(shù)據(jù),如果緩存中有數(shù)據(jù),那么不需要訪問數(shù)據(jù)庫,如果緩存中沒有,
在訪問數(shù)據(jù)庫取出數(shù)據(jù),并更新緩存。

緩存如何同步?
有兩種手段:
第一種方法: 緩存是具有時(shí)效的,在一定時(shí)間過后會(huì)超時(shí)timeout,如果緩存失效,那么重新去數(shù)據(jù)庫查詢,
查詢后更新緩存,這種方法不是實(shí)時(shí)的,實(shí)時(shí)性比較差。
第二種方法:當(dāng)有請(qǐng)求修改數(shù)據(jù)時(shí),更新緩存,并且將要修改的數(shù)據(jù)投入DAL層,當(dāng)數(shù)據(jù)庫有空閑連接時(shí),再持久化
存盤。
緩存的不足之處:
當(dāng)緩存足夠多時(shí),需要將不活躍緩存數(shù)據(jù)換出內(nèi)存,叫做緩存換頁。緩存換出算法和操作系統(tǒng)換頁算法類似,F(xiàn)IFO,LRU(least recently used),
LFU(least frequently used)等。實(shí)際緩存的實(shí)現(xiàn)不需要自己去實(shí)現(xiàn),有很多開源技術(shù),nosql技術(shù)就是非關(guān)系型數(shù)據(jù)庫的意思。
非關(guān)系型數(shù)據(jù)庫如redis,memcatched等。緩存可以跟應(yīng)用服務(wù)器部署在同一臺(tái)機(jī)器上,也可以部署在單獨(dú)機(jī)器上。我推薦將緩存服務(wù)器部署在
單獨(dú)機(jī)器上,假設(shè)有兩臺(tái)應(yīng)用服務(wù)器,如果將緩存部署在不同的應(yīng)用服務(wù)器上,那么不同的應(yīng)用服務(wù)器很難訪問彼此的緩存,非常不方便。將緩存
部署在單獨(dú)服務(wù)器上,各個(gè)應(yīng)用服務(wù)器都能訪問該緩存服務(wù)器。

如果有大量的業(yè)務(wù)請(qǐng)求到來,雖然設(shè)計(jì)了多個(gè)應(yīng)用服務(wù)器,也架設(shè)了緩存服務(wù)器,完善了中間層的緩沖隊(duì)列和數(shù)據(jù)庫連接池,
但是數(shù)據(jù)庫服務(wù)器仍然會(huì)出現(xiàn)瓶頸。比如當(dāng)有大量復(fù)雜的寫操作數(shù)據(jù)庫,很多讀數(shù)據(jù)庫的操作就被阻塞了,為解決這個(gè)問題可
將數(shù)據(jù)庫實(shí)現(xiàn)讀寫分離。由于數(shù)據(jù)庫讀操作會(huì)比寫操作多,那么可以對(duì)數(shù)據(jù)庫執(zhí)行負(fù)載均衡。主流數(shù)據(jù)庫都有replication機(jī)制,
采用replication機(jī)制可以實(shí)現(xiàn)負(fù)載均衡。中間層的寫數(shù)據(jù)庫操作投遞到master數(shù)據(jù)庫中,讀操作從slave數(shù)據(jù)庫中讀取,
當(dāng)master數(shù)據(jù)庫中數(shù)據(jù)被修改后,數(shù)據(jù)庫采用replication機(jī)制將數(shù)據(jù)同步給slave服務(wù)器。

同樣的道理,應(yīng)用服務(wù)器也可以實(shí)現(xiàn)負(fù)載均衡,架設(shè)多個(gè)應(yīng)用服務(wù)器,不同的請(qǐng)求分配給不同的應(yīng)用服務(wù)器。
可單獨(dú)設(shè)計(jì)一個(gè)任務(wù)服務(wù)器監(jiān)控各個(gè)應(yīng)用服務(wù)器的負(fù)載情況,合理的分配任務(wù)給各個(gè)應(yīng)用服務(wù)器。這種方式
是任務(wù)服務(wù)器主動(dòng)地分配任務(wù)給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器被動(dòng)的接受任務(wù),這種方式在任務(wù)請(qǐng)求類型相近的
情況下,分配方式非常合理。但是假設(shè)應(yīng)用服務(wù)器A接受了3個(gè)任務(wù),應(yīng)用服務(wù)器B接受了5個(gè)任務(wù),按照負(fù)載均衡的
權(quán)重法或最小連接法,肯定會(huì)分配給A任務(wù),但是如果這3個(gè)任務(wù)都是復(fù)雜的寫操作,而B的5個(gè)任務(wù)都是簡(jiǎn)單的
讀操作,那么這就存在分配的不合理性,如何解決這個(gè)問題呢?

可以換一種思路去解決這個(gè)問題,讓應(yīng)用服務(wù)器主動(dòng)去請(qǐng)求任務(wù)服務(wù)器,主動(dòng)獲取任務(wù)處理,如果應(yīng)用服務(wù)器處于忙碌狀態(tài)就不需要
請(qǐng)求新的任務(wù),空閑的應(yīng)用服務(wù)器會(huì)去請(qǐng)求任務(wù)服務(wù)器中的任務(wù),這是最合理的負(fù)載均衡。如果所有應(yīng)用服務(wù)器都處于忙碌狀態(tài),
那么任務(wù)服務(wù)器將任務(wù)緩存至自己的任務(wù)隊(duì)列,當(dāng)應(yīng)用服務(wù)器空閑時(shí)會(huì)來取任務(wù)。
考慮這樣一個(gè)問題,如果任務(wù)服務(wù)器出現(xiàn)故障怎么辦?
任務(wù)服務(wù)器需要有多臺(tái),并且實(shí)現(xiàn)failover機(jī)制,多臺(tái)任務(wù)服務(wù)器之間實(shí)現(xiàn)心跳,如果檢測(cè)不到對(duì)方心跳,則使自己成為主任務(wù)服務(wù)器。

到目前為止,這個(gè)框架可以適用于大部分服務(wù)器邏輯。為保證數(shù)據(jù)庫的響應(yīng)速度和處理效率,可以對(duì)數(shù)據(jù)庫進(jìn)行分區(qū)。
數(shù)據(jù)庫分區(qū)有兩種形式(分庫、分表)
分庫:數(shù)據(jù)庫可以按照一定的邏輯把表分散到不同的數(shù)據(jù)庫。這叫做垂直分區(qū),就是所每個(gè)庫的表不同,功能不同。
這樣做不常見,因?yàn)楹艽笄闆r下,數(shù)據(jù)庫中各個(gè)表是關(guān)聯(lián)的,如果將不同的表分配到不同的數(shù)據(jù)庫中,會(huì)存在很多不便。
分表:將一個(gè)表的不同數(shù)據(jù)分配到各個(gè)數(shù)據(jù)庫,這樣每個(gè)數(shù)據(jù)庫的表結(jié)構(gòu)是一樣的,只是存儲(chǔ)的用戶數(shù)據(jù)不同而已,叫做水平
分區(qū)。分表的方式很常見,如果數(shù)據(jù)庫的壓力增加,我們就采取分表的方式減少數(shù)據(jù)庫的壓力。
另外服務(wù)器開發(fā)的幾個(gè)性能殺手:
到此為止,服務(wù)器框架介紹完畢。
天下數(shù)據(jù)在全球超過120個(gè)國家部署數(shù)據(jù)中心,提供海外全球多個(gè)國家服務(wù)器租用,所有服務(wù)器均可根據(jù)需求配置大帶寬大流量,美國G口獨(dú)享大帶寬服務(wù)器,從此告別網(wǎng)絡(luò)擁堵。詳詢天下數(shù)據(jù)客服電話400-6388-808。
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國服務(wù)器 韓國服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺(tái)灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國云主機(jī) 韓國云主機(jī) 新加坡云主機(jī) 臺(tái)灣云主機(jī) 日本云主機(jī) 德國云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無限防御 SSL證書 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號(hào)
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊(cè) 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國增值電信業(yè)務(wù)經(jīng)營(yíng)許可證》 ISP證:粵ICP備07026347號(hào)
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營(yíng))聯(lián)合版權(quán)
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號(hào)建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊(cè)業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品