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


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

 

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,多網絡。可以單個資源處理一個請求,也可以多個。
  使用復雜框架之前一定要將項目的業務優化好,基礎中的基礎,重中之重!
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM