1. 程式人生 > >[轉][知乎]高效能後臺架構摘要

[轉][知乎]高效能後臺架構摘要

來源:https://zhuanlan.zhihu.com/p/28817489

高效能的網路和硬體

CDN加速技術。CDN加速將網站的內容快取在網路邊緣(離使用者接入網路最近的地方),然後在使用者訪問網站內容的時候,通過排程系統將使用者的請求路由或者引導到離使用者接入網路最近或者訪問效果最佳的快取伺服器上,由該快取伺服器為使用者提供內容服務;相對於直接訪問源站,這種方式縮短了使用者和內容之間的網路距離,從而達到加速的效果。 

後臺服務高效能設計

 

要素1:分散式快取 

分散式快取系統可以Set化部署,比如商品資料快取到Set1,使用者資料快取到Set2,或者一類使用者的資料快取到Set1,另一類的使用者快取到Set2

 

此外,也可以按叢集化部署,每一個快取服務儲存的資料都是對等的,可以對外提供同等的服務,所以外部請求需要負載均衡到不同有快取伺服器

Set化部署的目的主要在於將不同型別的資料路由到不同的地方,好處就是可以 

  • 減少不同業務資料的耦合
  • 可以針對不同業務進行不同的優化,從而提升整體效能。

 叢集式部署的目的在於,提高快取系統的對外服務能力, 

  • 上層業務的路由策略簡單靈活
  • 擴縮容比較容易。

要素2:服務分層 

在經典的三層(接入層、邏輯層和儲存層)後臺服務架構中,三層的劃分的

原則就是同層次的系統專注處理自己的事情。

  • 接入層專注於處理前端和後臺服務的接入連通、安全認證和資料轉發
  • 邏輯層專注於處理不同業務的無狀態邏輯服務
  • 儲存層專注於處理業務資料的儲存。這樣分層的好處在於各個層次能夠依據業務特點專注於自己的事情,提高系統複用性,降低業務間的耦合性。

要素3:操作非同步化 

前大型系統中普遍使用訊息佇列來將呼叫非同步化,不僅可以提升系統性能還可以提升系統的擴充套件性。對於大量的資料庫寫請求,對於資料庫的壓力很大,同時也會造成資料庫響應不及時。可以考慮使用訊息佇列,資料庫的寫請求可以直接寫入到訊息佇列,然後通過多執行緒或多程序從訊息佇列中讀取資料慢慢寫入到資料庫

。訊息佇列伺服器的處理速度會遠遠快於資料庫,所以使用者在寫入操作時會感覺到很快的寫入速度

此外,訊息佇列對於請求不均衡的系統,還具有削峰填谷的作用,將短時間內的高峰請求,逐步平攤到更長的時間裡去,從而避免短時間內大量請求壓跨系統。

要素4:服務拆分

服務拆分一般來說有以下原則:

a)高內聚、低耦合: 將耦合性低的業務邏輯劃分為不同系統,將聚合性高的業務邏輯劃分為同一個系統。

b)單一職責原則:對於一個層次或者一個模組應該保持相對單一的職責,專注於自己的服務。

c)故障隔離:不同系統必須相對獨立設計和執行,能夠獨立處理自己的故障,而不至於影響全域性。

d)獨立運維和持續互動:對於不同的系統可以隨時迭代更新,而不至於影響其他服務。

對於服務拆分主要有縱向拆分和水平拆分兩種方法。三層架構就是典型的縱向拆分模式。對於不同的業務模組,針對業務邏輯和儲存服務可以按水平拆分的方法將拆分為不同的系統。比如商品系統邏輯層、訂單系統邏輯層、商品系統儲存層、訂單系統儲存層。

要素5:分散式叢集化

每個服務支援多臺機器部署?