大數據和高併發的解決方案彙總

    大數據和高併發的解決方案彙總

 

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,多網絡。能夠單個資源處理一個請求,也能夠多個。
  使用複雜框架以前必定要將項目的業務優化好,基礎中的基礎,重中之重!
 
  架構和協議並非神聖不可侵犯的東西。
 
------名白
http://www.cnblogs.com/mingbai/p/7049458.html
相關文章
相關標籤/搜索