1、能不能通過
增加機群(應用機群,服務機群)的方式去解決?
好比一台機器能抗200qps, 然后你就40000qps的業務,那你最少需要200台機器,如果考慮到有機器down掉的情況,還要加備用服務器,這個具體加多少台就得去評估了。 防止出現有機器down掉,還得在每台機器上更新列表的情況,我們最好訪問服務名(類似於域名),這樣的話的好處就是,如果出現有機器down掉的情況,我只需要更新服務名和機器列表的關系表就可以了。
2、能不能把
CDN或者NDN用到我們的系統?假設能用,如何把靜態的圖片、JS文件、HTML文件放在用戶最近的一個節點?
3、用戶大規模連接請求上來的時候,我們如何去均衡用戶的請求(如何把這些請求放到后台的應用機群里面均衡的做處理)?
Nginx負載均衡 + 自己設計的負載均衡策略(比如說把IP轉換成整數后,mod取模、hash等)
4、那么在應用機群內部,應用機群和服務機群之間,如何均衡的處理它的訪問請求?
Nginx負載均衡 + 自己設計的負載均衡策略(比如說mod取模、hash等)
5、何時應該用
LAMP(Linux+Apache+Mysql+PHP)架構,盜圖一張

6、這里還有一個比較關鍵的問題,用戶的登錄狀態你怎么去記錄?用戶的每一次請求,分配處理請求的服務器可能是不一樣的,它不可能記錄每個人的狀態,那么這個狀態如何同步?
數據庫集群Oracle/mysql+非關系型數據庫Redis/Memcache,
拿mysql和redis來舉例子,
mysql 是關系型數據庫,並發量上限默認是100,想要調整並發效果1)自個可以修改my.ini中的max_connections,但是最大也就能設到 1000 2)用mysql調用數據庫時,每次執行語句時,會做一個臨時變量用來打開數據庫,所以在用完數據庫后及時關閉mysql臨時變量 3)如果還是解決不了,表被鎖死的現象很嚴重,就需要增加數據庫機群或者用其它並發連接數上限較高的數據庫,比如關系型oracle(貴,公司會不會用不 一定)和非關系型redis和memcache等;
redis 是非關系型數據庫,並發量上限默認是1-2w左右,如果並發量特別大可以考慮用redis來做緩存。比如說用戶請求訪問量比較高的新聞網內容或者博客,可 以用redis來做緩存,有用戶請求,就直接給他,如果博主對博客本身的內容做了更新,更新redis和mysql即可。 但是redis這種非關系型數據庫,雖然並發量比較高,但是缺點也很明顯:1)比較廢內存 2)不能像mysql等關系型數據庫那樣能夠處理事務、回滾等 3)沒有1NF,2NF,3NF這種類似的類型,只有key-value,無法處理交易記錄等這種類型的操作。
7、服務器,就是你的核心服務和數據庫之間,如何去交互?如何平均的分攤壓力?
數據庫集群Oracle/mysql+非關系型數據庫Redis/Memcache
8、防火牆的規則是不是需要調整?高並發訪問來的時候,可以適當的調整
防火牆的規則,防止由於防火牆的故障造成網絡擁塞。等高峰期過后,再把防火牆規則調回來。
9、每一層只做一件事,不容易出錯。
借鑒網絡分層的思想,拿服務器來說,有專門的應用服務器,有專門的服務服務器,有專門的數據庫服務器等等。在這些服務器上,可以部署Docker這種類似的虛擬機,每個虛擬機監聽一個端口,只做一件事,不容易出錯,還能減少成本。
10、可靠的軟件開發:
1)
網頁代碼大小, 所有靜態頁面、動態查詢頁面的代碼要盡可能短,圖片盡可能少,以減少對帶寬的需求。盡量頁面大小控制在
5K之內。
2)
網頁壓縮傳輸, 采用網頁壓縮存儲,可以大大減少網頁傳輸數據量的大小,僅為原數據量的1/3。不僅可以減少對網站帶寬的占用,而且因為傳輸網頁時間短,可大大減少負載均衡、防火牆的並發連接數和負載。缺點:
應用服務器的CPU負載增加。
3)
網頁編程安全, 因為並發量大的時候,防火牆會關閉部分網絡攻擊檢測功能,所以在網頁編程時做一些必要的防攻擊檢測:
a)防止
SQL注入式攻擊: 對查詢的SQL字符串進行
合法性檢驗,防止被SQL注入攻擊后真個數據庫被下載。
b)防止
人工F5刷新式攻擊:在主頁面、查詢頁面的客戶端代碼
禁止F5按鍵,防止客戶端惡意刷新。
c)防止
人工頻繁打開頁面刷新式攻擊:設置
Cookie,判斷客戶端打開頁面的時間間隔,低於2秒的認為是人工頻繁打開頁面刷新式攻擊。程序控制暫停數秒后,客戶端才能跳到查詢首頁。
d)防止
程序自動刷新式攻擊:檢測HTTP_REFERER變量,減少程序自動刷新式攻擊的可能性。
e)隱藏查詢代碼頁面的地址:設置Web服務器,隱藏查詢代碼頁面的地址,可有效防止各類程序自動刷新式攻擊。
f)
圖片驗證碼:采用圖片驗證碼,可有效防止程序自動刷新等方式的攻擊,將圖片分散於各查詢服務器,避免在高並發連接數的環境中稱為瓶頸。
4)后端采用
“epoll+線程池”或者“boost+線程池”來提高並發處理能力。注:業務放在線程池內。