標籤:

海量數據和高並發的解決方案

海量數據的解決方案

一、緩存和頁面靜態化

緩存

緩存的使用方式可以分為通過程序直接保存到內存中和使用緩存框架兩種方式。程序直接主要是使用Map,尤其是ConcurrentHashMap;而常用的緩存框架有Ehcache、Memcache和Redis等。

頁面靜態化

緩存是將從資料庫中獲取到的數據保存起來,而頁面靜態化是將程序最後生成的頁面保存起來,使用頁面靜態化後就不需要每次調用都重新生成頁面了,不但不需要查詢資料庫,而且連應用程序處理都省了。

所以,頁面靜態化同時對數據量大和並發量高兩大問題都有好處。

頁面靜態化可以在程序中使用模板技術生成,如Freemarker和Velocity都可以根據模板生成靜態頁面,另外也可以使用緩存伺服器在應用伺服器的上一層緩存生成的頁面,如可以使用Squid,另外Nginx也提供了相應的功能。

二、資料庫優化

資料庫的優化方法非常多,常用的有如下:

表結構優化

SQL語句優化

分區和分表

索引優化

使用存儲過程代替直接操作

使用合理的冗餘

三、分離活躍數據

通過一個定期處理的任務,將不活躍的用戶轉移到別的數據表中

四、批量讀取和延遲修改

批量讀取和延遲修改的原理是通過減少操作的次數來提高效率,如果使用得恰當,效率將會呈數量級提升。

批量讀取是將多次查詢合併到一次中進行。有效的減少查詢資料庫的次數,這種類型可以用非同步請求來處理。

延遲個性主要針對高並發而且頻繁修改的數據,如一些統計數據。這種情況可以先將需要修改的數據暫時保存到緩存中,然後定時將緩存中的數據保存到資料庫中,程序在讀取數據時可以同時讀取資料庫中和緩存中的數據。通常用於保存不那麼重要的數據。

五、讀寫分離

讀寫分離的本質是對資料庫進行集群,這樣就可以在高並發的情況下將資料庫的操作分配到多個資料庫伺服器去處理,從而降低單台伺服器的壓力。但需要保證每台伺服器所保存的數據都需要一致,數據同步。

六、分散式資料庫

分散式資料庫是將不同的表存放到不同的資料庫中,然後再放到不同的伺服器。這樣在處理請求時,如果需要調用多個表,則可以讓多台伺服器同時處理,從而提高處理速度。

分散式與集群的區別:

1.分散式需要調用多台伺服器協同工作,處理單個請求;而集群是應用高並發,將多個請求分攤到不同的伺服器進行處理。

2.集群是每個節點都有處理一個請求有一完整的方法和機制,而分散式是把一個請求的不同業務,不同業務邏輯方法放到不同的節點,任何一個節點不能處理一個完整的請求任務。

七、NoSQL和Hadoop

高並發的解決方案

  • 前端:非同步請求+資源靜態化+cdn

  • 後端:請求隊列+輪詢分發+負載均衡+共享緩存
  • 數據層:redis緩存+數據分表+寫隊列
  • 存儲:raid陣列+熱備
  • 網路:dns輪詢+DDOS攻擊防護

推薦閱讀:

英特爾? 至強? Xeon處理器 科普
[網站搭建·2] Vultr 海外 VPS 主機購買中文教程
node.js構建靜態伺服器
伺服器開發中網路故障排查經驗漫談

TAG:伺服器 |