相信很多5年以上作業經驗的同學在面試的時候經常會被問道:現在有一個很大量的秒殺場景,應該怎么處理?
很多同學的第一反應回答80%都是: 用Redis來做快取,防止超賣也能保證一定的性能...
當你說出這個回答的時候恭喜你你已經成功入坑了,大多數面試官會直接跳過這個問題不在深入追問(因為你連第一個問題都沒回答到面試官心坎里,面試官已經放棄問你這個問題了)
那么我們應該怎么回答才能讓偉大的面試官滿意呢?
需要同學門深思熟慮下面試官的意圖,秒殺場景 == redis??顯然不是這樣的(太多同學的思維被百度文章固話了,認為秒殺只需要一個redis就能解決了....),經歷過大公司秒殺系統的同學就會知道其實秒殺涉及到的東西非常多,綜合來看就是一個高并發系統的架構設計問題...看到這里小伙伴應該知道面試官想要問的是什么了吧(其實想問你一套高并發系統的架構設計可能要考慮的東西),單單一個Redis根本不可能支撐得住高并發系統
一、關于高并發
1 高并發會來帶的后果
服務端:導致站點服務器/DB服務器資源被占滿崩潰,資料的存盤和更新結果和理想的設計是不一樣的,比如:出現重復的資料記錄,多次添加了用戶積分等,
用戶角度:網站打不開
服務器雪崩:
2 并發下的資料處理
通過表設計,如:記錄表添加唯一約束,資料處理邏輯使用事物防止并發下的資料錯亂問題,通過服務端鎖行程防止包并發下的資料錯亂問題,
這里主要講述的是在并發請求下的資料邏輯處理的介面,如何保證資料的一致性和完整性,這里的并發可能是大量用戶發起的,也可能攻擊者通過并發工具發起的并發請求,
二、高并發系統架構主要關注點
1 服務器架構(應用服務器、資料庫、中間件...)
業務從發展的初期到逐漸成熟,服務器架構也是從相對單一到集群,再到分布式服務,
一個可以支持高并發的服務少不了好的服務器架構,需要有均衡負載,資料庫需要主從集群,NoSQL快取需要主從集群,靜態檔案需要上傳CDN,這些都是能讓業務程式流暢運行的強大后盾
2 并發測驗
高并發相關的業務,需要進行并發的測驗,通過大量的資料分析評估出整個架構可以支撐的并發量,
測驗高并發可以使用第三方服務器或者自己測驗服務器,利用測驗工具進行并發請求測驗,分析測驗資料得到可以支撐并發數量的評估,這個可以作為一個預警參考,俗話說知己自彼百戰不殆
3 MQ緩沖佇列(削峰填谷、系統解耦)
大量需要處理的各種請求涌入到服務端,無論是nosql還是sql都支撐不住,那么就要考慮如何解決這些請求,讓他們不會搞垮我們的服務端應用甚至搞垮我們的資料庫
4 網關(令牌桶)
解決前端到服務端的不確定流量以及瞬時的超大流量,防止服務器血崩
5 快取(靜態快取、動態快取)
快取不單單只是Redis,還需要考慮靜態CDN快取以及應用內部的一級快取等等
6 應用內的代碼設計(多執行緒、鎖等等)
7 例外流量的抵御(快取攻擊、資料庫攻擊...)
布隆過濾器
其實高并發系統涉及到的知識點還有很多很多,網路抖動?災備?動態伸縮?等等等等等等...
如果同學們回答道了上面的這些點,我相信面試官對于這個問題的回答是認可的,至少知道你對于高并發系統的全貌考慮是對的,當然接下去他會和你繼續深入暢聊高并發系統的人生...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/261365.html
標籤:其他
