1. 程式人生 > >大數據和高並發的解決方案匯總

大數據和高並發的解決方案匯總

表結構 特定 大數據 之前 主從 代理服 數據分層 完整性 讀寫

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攻擊防護
     網站架構的整個演變主要圍繞大數據和高並發而展開。解決的方案主要是使用緩存和多資源兩種類型。多資源:多存儲,多CPU,多網絡。可以單個資源處理一個請求,也可以多個。   使用復雜框架之前一定要將項目的業務優化好,基礎中的基礎,重中之重!

大數據和高並發的解決方案匯總