高併發web系統設計

轉載自:http://blog.csdn.net/qq_26562641/article/details/53170913php

1、通常高併發web系統
這裏的通常指的是秒殺之類的電子商務系統,好比說小米搶購、淘寶雙11、秒殺活動等等,12306訂票網站與其有本質區別,下面會有說到。

系統架構圖
下圖是我調查衆多資料總結出的系統架構圖,固然這也不能做爲通用的解決方案,首先像淘寶等企業公佈的資料確定不是最早進或者是性能最好的,其次具體狀況還需具體分析。

核心技術點
html

  • 前端優化  前端優化主要包括動態內容靜態化,增長前端緩存。頁面靜態化是指將指含有大量動態元素的動態網頁,如jsp、php等,轉換爲html靜態頁面,靜態頁面因爲不用加載動態元素,其訪問速度要比動態頁面快得多,能夠增長訪問速度,減少數據庫壓力;前端頁面緩存在系統前端對Web服務器上的頁面進行緩存。
  • CDN技術  CDN即內容分發網絡,其基本思路是儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。經過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統可以實時地根據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。
  • 負載均衡  負載均衡的基本思想是把高併發的訪問平均分配到每個服務器節點上,從而減少分佈式數據庫中每個節點的壓力。
  • 中間件     數據庫的中間件技術是指把應用層與數據庫層分離,在中間增長一個部分,避免應用直接訪問數據庫。由於系統可能採用讀寫分離的技術,於是會使用不一樣的數據庫,中間件能夠屏蔽數據庫直接的不一樣,提供統一的接口。中間件還負責事務的協調處理,起到數據鏈接管理的做用,多個客戶端鏈接經過中間件能夠共用一個數據庫鏈接。
  • memcached  memcached是一個高性能的分佈式內存對象緩存系統,經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升動態、數據庫驅動網站的速度,它是基於一個存儲鍵/值對的hashmap。
  • 併發控制   數據庫限流,達到數據庫的最大併發數,進入行鎖狀態。如不進行控制,一旦其中一個鏈接卡住,會引起雪崩效應,從而影響整個系統
  • 排隊系統   鎖機制致使排隊
  • 並行複製   採用並行複製的技術能夠解決主備庫複製延遲問題
  • 數據庫拆分  分爲水平拆分和垂直拆分,垂直拆分即按列拆分,把數據按應用分離,下降單個事務的數據處理量;水平拆分即按行拆分,下降節點的併發量
  • 讀寫分離   有些系統讀操做頻繁,而有些系統寫操做頻繁,讀寫分離能有效提升訪問速度



2、12306網站與淘寶的不一樣

12306的特殊性就在於其複雜性:
前端

  • 頻繁的混合讀寫操做   
  • 座位實時複用   訂單之間關聯度較大,每賣出一張票,都須要調整整個車次全部可能區間的餘票數量

調查以前,我也很簡單的認爲,只要不停地增長節點數量,必然能解決搶票尖峯時刻的問題,其實否則,訪問速度主要受限於兩個方面,一個是CPU處理速度,另外一個是磁盤I/O。而簡單的增長機器並不能解決這兩個瓶頸,相反,節點越多,數據同步的代價越大。爲了更好的解釋其特殊性,須要引入一些基本概念。
web

  • 事務

淘寶、12306等電子商務系統都屬於面向交易的處理系統,即OLTP。數據庫中事務(Transaction)是訪問並可能更新數據庫中各類數據項的一個程序執行單元(unit),具備四個屬性:原子性、一致性、隔離性、持久性,簡稱爲ACID。
數據庫

  •         原子性(Atomicity)  一個事務是一個不可分割的工做單位,事務中包括的諸操做要麼都作,要麼都不作。
  •         致性(Consistency)  事務必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。一致性與原子性是密切相關的。
  •         隔離性(Isolation)  一個事務的執行不能被其餘事務干擾。即一個事務內部的操做及使用的數據對併發的其餘事務是隔離的,併發執行的各個事務之間不能互相干擾。
  •         持久性(Durability)  持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其餘操做或故障不該該對其有任何影響。

並行處理的核心就是隔離性,即不一樣的事務不能互相影響,一個用戶訂票行爲不能影響其餘用戶,不然會出現看到票卻買不到票的現象。隔離要處理三個問題:髒讀、不可重複讀和幻讀保證隔離性就要對數據加鎖,而鎖會致使排隊,排隊必然會產生時延,面對千萬級別的併發,問題就產生了。全部關鍵的問題仍是要提升單個事務的處理速度,即CPU,以及減少磁盤I/O的時間。12306從12年就開始進行技術改革,核心採用了Vmware Gemfire 內存數據庫技術,即把多個X86服務器虛擬成一個具備超大內存和處理速度的機器,把數據所有放在內存中計算,由內存與磁盤的I/O速度能夠看出這種技術必然能大幅度提升性能。緩存

相關文章
相關標籤/搜索