大數據和高並發的解決方案匯總
阿新 • • 發佈:2018-06-25
表結構 特定 大數據 之前 主從 代理服 數據分層 完整性 讀寫
1.3海量數據解決方案
1.使用緩存: 使用方式:1,使用程序直接保存到內存中。主要使用Map,尤其ConcurrentHashMap。 2,使用緩存框架。常用的框架:Ehcache,Memcache,Redis等。 最關鍵的問題是:什麽時候創建緩存,以及其失效機制。 對於空數據的緩沖:最好用一個特定的類型值來保存,以區別空數據和未緩存的兩種狀態。 2.數據庫優化: 1,表結構優化。 2,SQL語句優化,語法優化和處理邏輯優化。可記錄各語句執行時間,有針對性的分析。 3,分區 4,分表 5,索引優化 6,使用存儲過程代替直接操作 3.分離活躍數據 例如用戶,可以分為活躍用戶和不活躍用戶。 4.批量讀取和延遲修改 高並發情況可以將多個查詢請求合並到一個。 高並發且頻繁修改的可以暫存緩存中。 5.讀寫分離 上圖,數據庫服務器配置多個,配置主從數據庫。寫用主數據庫,讀用從數據庫。 6.分布式數據庫 將不同的表存放到不同的數據庫中,然後再放到不同的服務器中。有些復雜問題,如:事務處理,多表查詢。 7.NoSql和Hadoop NoSql,not only SQL。沒有關系型數據庫那麽多限制,比較靈活高效。 Hadoop,將一個表中的數據分層多塊,保存到多個節點(分布式)。每一塊數據都有多個節點保存(集群)。集群可以並行處理相同的數據,還可以保證數據的完整性。 1.4高並發的解決方案。 1.應用和靜態資源分離。 將靜態資源(js,css,圖片等)放到專門的服務器中。 2.頁面緩存 將應用生成的頁面緩存起來可以節省大量cpu資源。 對於部分頁面經常變換數據的,可以使用ajax來處理。 3.集群和分布式 集群,多臺服務器具有相同的功能,主要起分流的作用。 分布式,將不同的業務放到不同的服務器中,處理一個請求可能需要多臺服務器,進而提高一個請求的處理速度。 又分為靜態資源集群和應用程序集群。後者較復雜,經常要考慮session同步等問題。 4.反向代理 客戶端直接訪問的服務器並不是直接提供服務的服務器,它從別的服務器獲取資源,然後將結果返回給用戶。 代理服務器和反向代理服務器: 代理服務器是代我們訪獲取資源,然後將結果返回。例如,訪問外網的代理服務器。反向代理服務器是我們正常訪問一臺服務器的時候,服務器自己調用了別的服務器。 代理服務器我們主動使用,是為我們服務的,不需要有自己的域名;反向代理是服務器自己使用的,我們並不知道,有自己的域名。 5,CDN CDN是一種特殊的集群頁面緩沖服務器,和普通的集群的多臺頁面緩沖服務器相比主要區別是:其存放位置和分配請求方式不同。 CDN的服務器分布在全國各地,接收到請求後會將請求分配到最合適的CDN服務器節點來獲取數據。其每一個CDN節點就是一個頁面緩存服務器。 分配方式:並不是普通的負載均衡,而是專門的CDN域名解析服務器在解析域名的時候就分配好的,一般的做飯是:ISP那裏使用CNAME將域名解析到一個特定的域名,然後再將解析到的那個域名用專門的CDN服務器解析(返回給瀏覽器,再訪問)到相應的CDN節點。每個節點可能也集群了多臺服務器。 你可以知道處理高並發的業務邏輯是:- 前端:異步請求+資源靜態化+cdn
- 後端:請求隊列+輪詢分發+負載均衡+共享緩存
- 數據層:redis緩存+數據分表+寫隊列
- 存儲:raid陣列+熱備
- 網絡:dns輪詢+DDOS攻擊防護
大數據和高並發的解決方案匯總