一、網站的高併發,大流量訪問怎麼解決?web
1)HTML頁面靜態化數據庫
訪問頻率較高但內容變更較小,使用網站HTML靜態化方案來優化訪問速度。將社區內的帖子、文章進行實時的靜態化,有更新的時候再從新靜態化也是大量使用的策略。緩存
優點:安全
2)圖片服務器和應用服務器相分離服務器
如今不少的網站上都會用到大量的圖片,而圖片是網頁傳輸中佔主要的數據量,也是影響網站性能的主要因素。所以不少網站都會將圖片存儲從網站中分離出來,另外架構一個或多個服務器來存儲圖片,將圖片放到一個虛擬目錄中,而網頁上的圖片都用一個URL地址來指向這些服務器上的圖片的地址,這樣的話網站的性能就明顯提升了。架構
優點:併發
3)緩存負載均衡
儘可能使用緩存,包括用戶緩存,信息緩存等,多花點內存來作緩存,能夠大量減小與數據庫的交互,提升性能。高併發
假如咱們能減小數據庫頻繁的訪問,那對系統確定大大有利的。好比一個點子商務系統的商品搜索,若是某個關鍵字的商品常常被搜,那就能夠考慮這部分商品列表存放到緩存(內存中去),這樣不用每次訪問數據庫,性能大大增長。性能
4)鏡像
鏡像是冗餘的一種類型,一個磁盤上的數據在另外一個磁盤上存在一個徹底相同的副本即爲鏡像。
5)負載均衡
在網站高併發訪問的場景下,使用負載均衡技術(負載均衡服務器)爲一個應用構建一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢,使用戶請求具備更好的響應延遲特性。
6)併發控制
加鎖,如樂觀鎖和悲觀鎖
7)消息隊列
經過mq一個一個排隊方式,跟12306同樣。
二、訂票系統,某車次只有一張火車票,假定有1w我的同時打開12306網站來訂票,如何解決併發問題?(可擴展到任何高併發網站要考慮的併發讀寫問題)
不但要保證1w我的能同時看到有票(數據的可讀性),還要保證最終只能有一我的買到票(數據的排他性)。
使用數據庫層面的併發訪問控制機制。採用樂觀鎖便可解決此問題。樂觀鎖意思是不鎖定表的狀況下,利用業務的控制來解決併發問題,這樣既保證數據的併發可讀性,又保證保存數據的排他性,保證性能的同時解決了併發帶來的髒數據問題。hibernate中實現樂觀鎖。
銀行兩操做員同時操做同一帳戶就是典型的例子。好比A,B操做員同時讀取一餘額爲1000元的帳戶,A操做員爲該帳戶增長100元,B操做員同時爲該帳戶減去50元,A先提交,B後提交。最後實際帳戶餘額爲1000-50=950元,單本該爲1000+100-50=1050。這就是單行的併發問題。如何解決?能夠用鎖。