高并發(fā)解決方案

什么是高并發(fā)?

多個(gè)進(jìn)程或線程同時(shí)(或著說(shuō)在同一段時(shí)間內(nèi))訪問(wèn)同一資源會(huì)產(chǎn)生并發(fā)問(wèn)題。

要想解決高并發(fā),就要先了解高并發(fā)產(chǎn)生的位置.

高并發(fā)一般發(fā)生在兩個(gè)位置,一:訪問(wèn)服務(wù)器時(shí);二:訪問(wèn)數(shù)據(jù)庫(kù)時(shí);

1.1初期解決方案

1.1.1系統(tǒng)或服務(wù)器級(jí)別的解決方案

1)增大服務(wù)器的CPU

2)增加內(nèi)存條。

3)增加硬盤個(gè)數(shù),對(duì)硬盤做Raid5。

4)換掉免費(fèi)的Tomcat,使用商用weblogic(美國(guó)Oracle公司出品的)

5)增加到二塊網(wǎng)卡。

6)聘請(qǐng)系統(tǒng)架構(gòu)師優(yōu)化Linux內(nèi)核

7)甚至花高價(jià)直接購(gòu)買高性能服務(wù)器

隨著業(yè)務(wù)的不斷增加,服務(wù)器性能很快又到達(dá)瓶頸

1.1.2應(yīng)用級(jí)別的解決方案

1)網(wǎng)頁(yè)HTML靜態(tài)化(需要CMS項(xiàng)目支持)

2)圖片服務(wù)器分離(常用解決方案)

3)緩存(常用解決方案)上上策為分布式緩存

4)鏡像(下載較多)

隨著業(yè)務(wù)的不斷增加,服務(wù)器性能很快又到達(dá)瓶頸

這時(shí)考慮增加服務(wù)器,增加服務(wù)器就會(huì)出現(xiàn)以下問(wèn)題

問(wèn)題1:用戶訪問(wèn)IP多了怎么解決?

問(wèn)題2:數(shù)據(jù)庫(kù)出現(xiàn)瓶頸怎么辦?

解決用戶IP多了的辦法是?

1.1開始:準(zhǔn)備采用DNS

什么是DNS

DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。通過(guò)主機(jī)名,最終得到該主機(jī)名對(duì)應(yīng)的IP地址的過(guò)程叫做域名解析(或主機(jī)名解析)。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53。

解決IP—DNS

DNS服務(wù)器可以解決IP多了的問(wèn)題

http://www.itcast.cn: ?192.168.1.100

192.168.1.101

192.168.1.102

……更多

缺點(diǎn):雖然循環(huán)復(fù)用DNS是一個(gè)普遍使用的在Web服務(wù)器上負(fù)載平衡的解決方案,但是,該方式有它自身的缺陷。循環(huán)復(fù)用DNS將傳入的IP請(qǐng)求映射到定義的一系列循環(huán)形式的服務(wù)器。一旦發(fā)生服務(wù)器故障,循環(huán)復(fù)用DNS繼續(xù)把請(qǐng)求發(fā)送到這個(gè)故障服務(wù)器,一直到把該服務(wù)器從DNS中移走為止。這樣許多用戶必須等到DNS連接超時(shí)以后才能成功地訪問(wèn)目標(biāo)網(wǎng)站

1.2采用負(fù)載均衡技術(shù)

由于目前現(xiàn)有網(wǎng)絡(luò)的各個(gè)核心部分隨著業(yè)務(wù)量的提高,訪問(wèn)量和數(shù)據(jù)流量的快速增長(zhǎng),其處理能力和計(jì)算強(qiáng)度也相應(yīng)地增大,使得單一的服務(wù)器設(shè)備根本無(wú)法承擔(dān)。在此情況下,如果扔掉現(xiàn)有設(shè)備去做大量的硬件升級(jí),這樣將造成現(xiàn)有資源的浪費(fèi),而且如果再面臨下一次業(yè)務(wù)量的提升時(shí),這又將導(dǎo)致再一次硬件升級(jí)的高額成本投入,甚至性能再卓越的設(shè)備也不能滿足當(dāng)前業(yè)務(wù)量增長(zhǎng)的需求。

針對(duì)此情況而衍生出來(lái)的一種廉價(jià)有效透明的方法以擴(kuò)展現(xiàn)有網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性的技術(shù)就是負(fù)載均衡(Load Balance)。


問(wèn)題2:數(shù)據(jù)庫(kù)出現(xiàn)瓶頸怎么辦?

以Mysql為例:

1:對(duì)Mysql進(jìn)行優(yōu)化(重點(diǎn)講解)

2:緩存,主流緩存Memcached,redis…

3: ?mysql讀寫分離+主從復(fù)制 ? ?


4:Oracle

5:Oracle讀寫分離+主從復(fù)制

6:Oracle Partition分區(qū)

7:Oracle RAC集群(終級(jí)解決方案)

此方案:非常貴,即使是淘寶,京東這樣的大公司,也是很難受的。

主要方案:水平拆分,庫(kù)表散列(分庫(kù)分表)

此方案已經(jīng)在阿里運(yùn)行長(zhǎng)達(dá)3年以上? 可以說(shuō)是非常成熟的解決方案

待續(xù)…

備選方案:Mysql主從復(fù)制與讀寫分離

優(yōu)化:解決了高并發(fā)問(wèn)題

缺點(diǎn):沒(méi)有解決高可用問(wèn)題;Mysql-Proxy存在一個(gè)單點(diǎn)問(wèn)題;Mysql主機(jī)是單點(diǎn)問(wèn)題

Tomcat與Mysql-proxy 搭建在一臺(tái)服務(wù)器上就可以 了;

MySQL主從復(fù)制(Master-Slave)與讀寫分離(MySQL-Proxy)實(shí)踐

Mysql作為目前世界上使用最廣泛的免費(fèi)數(shù)據(jù)庫(kù),相信所有從事系統(tǒng)運(yùn)維的工程師都一定接觸過(guò)。但在實(shí)際的生產(chǎn)環(huán)境中,由單臺(tái)Mysql作為獨(dú)立的數(shù)據(jù)庫(kù)是完全不能滿足實(shí)際需求的,無(wú)論是在安全性,高可用性以及高并發(fā)等各個(gè)方面。

因此,一般來(lái)說(shuō)都是通過(guò)主從復(fù)制(Master-Slave)的方式來(lái)同步數(shù)據(jù),再通過(guò)讀寫分離(MySQL-Proxy)來(lái)提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力這樣的方案來(lái)進(jìn)行部署與實(shí)施的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容