400-638-8808
|
微信公眾號




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

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

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

超大郵件 超級功能

智能反垃圾郵件技術
易管理 免維護

簡單談一談高并發(fā)服務器框架設計的基本思路
基本的服務器框架都是C/S結構的,請求和相應流程是這樣的:

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

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

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

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

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

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

到目前為止,這個框架可以適用于大部分服務器邏輯。為保證數(shù)據(jù)庫的響應速度和處理效率,可以對數(shù)據(jù)庫進行分區(qū)。
數(shù)據(jù)庫分區(qū)有兩種形式(分庫、分表)
分庫:數(shù)據(jù)庫可以按照一定的邏輯把表分散到不同的數(shù)據(jù)庫。這叫做垂直分區(qū),就是所每個庫的表不同,功能不同。
這樣做不常見,因為很大情況下,數(shù)據(jù)庫中各個表是關聯(lián)的,如果將不同的表分配到不同的數(shù)據(jù)庫中,會存在很多不便。
分表:將一個表的不同數(shù)據(jù)分配到各個數(shù)據(jù)庫,這樣每個數(shù)據(jù)庫的表結構是一樣的,只是存儲的用戶數(shù)據(jù)不同而已,叫做水平
分區(qū)。分表的方式很常見,如果數(shù)據(jù)庫的壓力增加,我們就采取分表的方式減少數(shù)據(jù)庫的壓力。
另外服務器開發(fā)的幾個性能殺手:
到此為止,服務器框架介紹完畢。
天下數(shù)據(jù)在全球超過120個國家部署數(shù)據(jù)中心,提供海外全球多個國家服務器租用,所有服務器均可根據(jù)需求配置大帶寬大流量,美國G口獨享大帶寬服務器,從此告別網(wǎng)絡擁堵。詳詢天下數(shù)據(jù)客服電話400-6388-808。
天下數(shù)據(jù)手機站 關于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務器、美國服務器、海外云主機、海外vps主機租用托管以及服務器解決方案-做天下最好的IDC服務商
《中華人民共和國增值電信業(yè)務經營許可證》 ISP證:粵ICP備07026347號
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運營)聯(lián)合版權
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號建安商業(yè)大廈7樓
7×24小時服務熱線:4006388808香港服務電話:+852 67031102
本網(wǎng)站的域名注冊業(yè)務代理北京新網(wǎng)數(shù)碼信息技術有限公司的產品