高併發解決方案

什麼是高併發?

多個進程或線程同時(或着說在同一段時間內)訪問同一資源會產生併發問題。

要想解決高併發,就要先了解高併發產生的位置.

高併發一般發生在兩個位置,一:訪問服務器時;二:訪問數據庫時;

1.1初期解決方案

1.1.1系統或服務器級別的解決方案

1)增大服務器的CPU。

2)增加內存條。

3)增加硬盤個數,對硬盤做Raid5。

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

5)增加到二塊網卡。

6)聘請系統架構師優化Linux內核

7)甚至花高價直接購買高性能服務器

隨着業務的不斷增加,服務器性能很快又到達瓶頸

1.1.2應用級別的解決方案

1)網頁HTML靜態化(需要CMS項目支持)

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

3)緩存(常用解決方案)上上策爲分佈式緩存

4)鏡像(下載較多)

隨着業務的不斷增加,服務器性能很快又到達瓶頸

這時考慮增加服務器,增加服務器就會出現以下問題

問題1:用戶訪問IP多了怎麼解決?

問題2:數據庫出現瓶頸怎麼辦?

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

1.1開始:準備採用DNS

什麼是DNS

DNS(Domain Name System,域名系統),因特網上作爲域名和IP地址相互映射的一個分佈式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行在UDP協議之上,使用端口號53。

解決IP多—DNS

DNS服務器可以解決IP多了的問題

http://www.itcast.cn:  192.168.1.100

192.168.1.101

192.168.1.102

……更多

缺點:雖然循環複用DNS是一個普遍使用的在Web服務器上負載平衡的解決方案,但是,該方式有它自身的缺陷。循環複用DNS將傳入的IP請求映射到定義的一系列循環形式的服務器。一旦發生服務器故障,循環複用DNS繼續把請求發送到這個故障服務器,一直到把該服務器從DNS中移走爲止。這樣許多用戶必須等到DNS連接超時以後才能成功地訪問目標網站

1.2採用負載均衡技術

由於目前現有網絡的各個核心部分隨着業務量的提高,訪問量和數據流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的服務器設備根本無法承擔。在此情況下,如果扔掉現有設備去做大量的硬件升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提升時,這又將導致再一次硬件升級的高額成本投入,甚至性能再卓越的設備也不能滿足當前業務量增長的需求。

針對此情況而衍生出來的一種廉價有效透明的方法以擴展現有網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性的技術就是負載均衡(Load Balance)。


問題2:數據庫出現瓶頸怎麼辦?

以Mysql爲例:

1:對Mysql進行優化(重點講解)

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

3:  mysql讀寫分離+主從複製    


4:Oracle

5:Oracle讀寫分離+主從複製

6:Oracle Partition分區

7:Oracle RAC集羣(終級解決方案)

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

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

此方案已經在阿里運行長達3年以上  可以說是非常成熟的解決方案

待續…

備選方案:Mysql主從複製與讀寫分離

優化:解決了高併發問題

缺點:沒有解決高可用問題;Mysql-Proxy存在一個單點問題;Mysql主機是單點問題

Tomcat與Mysql-proxy 搭建在一臺服務器上就可以 了;

MySQL主從複製(Master-Slave)與讀寫分離(MySQL-Proxy)實踐

Mysql作爲目前世界上使用最廣泛的免費數據庫,相信所有從事系統運維的工程師都一定接觸過。但在實際的生產環境中,由單臺Mysql作爲獨立的數據庫是完全不能滿足實際需求的,無論是在安全性,高可用性以及高併發等各個方面。

因此,一般來說都是通過主從複製(Master-Slave)的方式來同步數據,再通過讀寫分離(MySQL-Proxy)來提升數據庫的併發負載能力這樣的方案來進行部署與實施的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章