什么是高并發(fā)?
多個進程或線程同時(或著說在同一段時間內(nèi))訪問同一資源會產(chǎn)生并發(fā)問題串远。
要想解決高并發(fā),就要先了解高并發(fā)產(chǎn)生的位置.
高并發(fā)一般發(fā)生在兩個位置,一:訪問服務器時;二:訪問數(shù)據(jù)庫時;
1.1初期解決方案
1.1.1系統(tǒng)或服務器級別的解決方案
1)增大服務器的CPU纲刀。
2)增加內(nèi)存條。
3)增加硬盤個數(shù)腻扇,對硬盤做Raid5。
4)換掉免費的Tomcat,使用商用weblogic(美國Oracle公司出品的)
5)增加到二塊網(wǎng)卡痊末。
6)聘請系統(tǒng)架構(gòu)師優(yōu)化Linux內(nèi)核
7)甚至花高價直接購買高性能服務器
隨著業(yè)務的不斷增加唁盏,服務器性能很快又到達瓶頸
1.1.2應用級別的解決方案
1)網(wǎng)頁HTML靜態(tài)化(需要CMS項目支持)
2)圖片服務器分離(常用解決方案)
3)緩存(常用解決方案)上上策為分布式緩存
4)鏡像(下載較多)
隨著業(yè)務的不斷增加内狸,服務器性能很快又到達瓶頸
這時考慮增加服務器,增加服務器就會出現(xiàn)以下問題
問題1:用戶訪問IP多了怎么解決检眯?
問題2:數(shù)據(jù)庫出現(xiàn)瓶頸怎么辦?
解決用戶IP多了的辦法是?
1.1開始:準備采用DNS
什么是DNS
DNS(Domain Name System昆淡,域名系統(tǒng))锰瘸,因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互聯(lián)網(wǎng)昂灵,而不用去記住能夠被機器直接讀取的IP數(shù)串避凝。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)眨补。DNS協(xié)議運行在UDP協(xié)議之上管削,使用端口號53。
解決IP多—DNS
DNS服務器可以解決IP多了的問題
http://www.itcast.cn: ?192.168.1.100
192.168.1.101
192.168.1.102
……更多
缺點:雖然循環(huán)復用DNS是一個普遍使用的在Web服務器上負載平衡的解決方案渤涌,但是佩谣,該方式有它自身的缺陷。循環(huán)復用DNS將傳入的IP請求映射到定義的一系列循環(huán)形式的服務器实蓬。一旦發(fā)生服務器故障茸俭,循環(huán)復用DNS繼續(xù)把請求發(fā)送到這個故障服務器,一直到把該服務器從DNS中移走為止安皱。這樣許多用戶必須等到DNS連接超時以后才能成功地訪問目標網(wǎng)站
1.2采用負載均衡技術(shù)
由于目前現(xiàn)有網(wǎng)絡的各個核心部分隨著業(yè)務量的提高调鬓,訪問量和數(shù)據(jù)流量的快速增長,其處理能力和計算強度也相應地增大酌伊,使得單一的服務器設備根本無法承擔腾窝。在此情況下,如果扔掉現(xiàn)有設備去做大量的硬件升級居砖,這樣將造成現(xiàn)有資源的浪費虹脯,而且如果再面臨下一次業(yè)務量的提升時,這又將導致再一次硬件升級的高額成本投入奏候,甚至性能再卓越的設備也不能滿足當前業(yè)務量增長的需求循集。
針對此情況而衍生出來的一種廉價有效透明的方法以擴展現(xiàn)有網(wǎng)絡設備和服務器的帶寬、增加吞吐量蔗草、加強網(wǎng)絡數(shù)據(jù)處理能力咒彤、提高網(wǎng)絡的靈活性和可用性的技術(shù)就是負載均衡(Load Balance)。
問題2:數(shù)據(jù)庫出現(xiàn)瓶頸怎么辦咒精?
以Mysql為例:
1:對Mysql進行優(yōu)化(重點講解)
2:緩存,主流緩存Memcached镶柱,redis…
3: ?mysql讀寫分離+主從復制 ? ?
4:Oracle
5:Oracle讀寫分離+主從復制
6:Oracle Partition分區(qū)
7:Oracle RAC集群(終級解決方案)
此方案:非常貴,即使是淘寶模叙,京東這樣的大公司歇拆,也是很難受的。
主要方案:水平拆分,庫表散列(分庫分表)
此方案已經(jīng)在阿里運行長達3年以上? 可以說是非常成熟的解決方案
待續(xù)…
備選方案:Mysql主從復制與讀寫分離
優(yōu)化:解決了高并發(fā)問題
缺點:沒有解決高可用問題;Mysql-Proxy存在一個單點問題;Mysql主機是單點問題
Tomcat與Mysql-proxy 搭建在一臺服務器上就可以 了;
MySQL主從復制(Master-Slave)與讀寫分離(MySQL-Proxy)實踐
Mysql作為目前世界上使用最廣泛的免費數(shù)據(jù)庫,相信所有從事系統(tǒng)運維的工程師都一定接觸過查吊。但在實際的生產(chǎn)環(huán)境中谐区,由單臺Mysql作為獨立的數(shù)據(jù)庫是完全不能滿足實際需求的,無論是在安全性逻卖,高可用性以及高并發(fā)等各個方面宋列。
因此,一般來說都是通過主從復制(Master-Slave)的方式來同步數(shù)據(jù)评也,再通過讀寫分離(MySQL-Proxy)來提升數(shù)據(jù)庫的并發(fā)負載能力這樣的方案來進行部署與實施的炼杖。