1、網站的高并發,大流量訪問怎么解決?
1)HTML頁面靜態化
訪問頻率較高但內容變動較小,使用網站HTML靜態化方案來優化訪問速度,將社區內的帖子、文章進行實時的靜態化,有更新的時候再重新靜態化也是大量使用的策略,
優勢:
- 減輕服務器負擔,
- 加快頁面打開速度,靜態頁面無需訪問資料庫,打開速度較動態頁面有明顯提高;
- 很多搜索引擎都會優先收錄靜態頁面,不僅被收錄的快,還收錄的全,容易被搜索引擎找到;
- HTML靜態頁面不會受程式相關漏洞的影響,減少攻擊,提高安全性,
2)圖片服務器和應用服務器相分離
現在很多的網站上都會用到大量的圖片,而圖片是網頁傳輸中占主要的資料量,也是影響網站性能的主要因素,因此很多網站都會將圖片存盤從網站中分離出來,另外架構一個或多個服務器來存盤圖片,將圖片放到一個虛擬目錄中,而網頁上的圖片都用一個URL地址來指向這些服務器上的圖片的地址,這樣的話網站的性能就明顯提高了,
優勢:
- 分擔web服務器的I/O負載-將耗費資源的圖片服務分離出來,提高服務器的性能和穩定性,
- 能夠專門對圖片服務器進行優化-為圖片服務設定有針對性的快取方案,減少帶寬成本,提高訪問速度,
- 提高網站的可擴展性-通過增加圖片服務器,提高圖片吞吐能力,
3)快取
盡量使用快取,包括用戶快取,資訊快取等,多花點記憶體來做快取,可以大量減少與資料庫的互動,提高性能,
假如我們能減少資料庫頻繁的訪問,那對系統肯定大大有利的,比如一個點子商務系統的商品搜索,如果某個關鍵字的商品經常被搜,那就可以考慮這部分商品串列存放到快取(記憶體中去),這樣不用每次訪問資料庫,性能大大增加,
4)鏡像
鏡像是冗余的一種型別,一個磁盤上的資料在另一個磁盤上存在一個完全相同的副本即為鏡像,
5)負載均衡
在網站高并發訪問的場景下,使用負載均衡技術(負載均衡服務器)為一個應用構建一個由多臺服務器組成的服務器集群,將并發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而回應緩慢,使用戶請求具有更好的回應延遲特性,
6)并發控制
加鎖,如樂觀鎖和悲觀鎖
7)訊息佇列
通過mq一個一個排隊方式,跟12306一樣,
2、訂票系統,某車次只有一張火車票,假定有1w個人同時打開12306網站來訂票,如何解決并發問題?(可擴展到任何高并發網站要考慮的并發讀寫問題)
不但要保證1w個人能同時看到有票(資料的可讀性),還要保證最終只能有一個人買到票(資料的排他性),
使用資料庫層面的并發訪問控制機制,采用樂觀鎖即可解決此問題,樂觀鎖意思是不鎖定表的情況下,利用業務的控制來解決并發問題,這樣既保證資料的并發可讀性,又保證保存資料的排他性,保證性能的同時解決了并發帶來的臟資料問題,hibernate中實作樂觀鎖,
銀行兩操作員同時操作同一賬戶就是典型的例子,比如A,B操作員同時讀取一余額為1000元的賬戶,A操作員為該賬戶增加100元,B操作員同時為該賬戶減去50元,A先提交,B后提交,最后實際賬戶余額為1000-50=950元,單本該為1000+100-50=1050,這就是單行的并發問題,如何解決?可以用鎖,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/24688.html
標籤:其他
上一篇:面試之多執行緒與并發
