公司最近在研發電商品7.0產品,重新設計了商城的整體架構。一款產品要滿足三高(高性能、高可用、高擴展)的要求,除了優秀的后端架構還得有優秀的數據庫部署設計來做支撐。后端架構設計不在此篇博客描述范圍內,主要說一下數據庫的部署設計。
數據分類
整個商城系統可以拆分幾大模塊:用戶、店鋪、商品、訂單、支付、物流,針對這些模塊所存儲的數據大致可以分為高價值數據、普通數據,具體根據業務來區分。譬如:訂單、支付模塊的數據為高價值數據,用戶、店鋪、商品、物流模塊為普通數據。高價值數據嚴格要求數據強一致性,而普通數據對一致性要求可以稍微第一點兒,因為在數據庫層面要求強一致性就必然會犧牲高性能,CAP理論中也闡述了“三選二”原理。普通數據中可能有一部分是熱點數據,那么就會要求高性能(高可用)同樣也會犧牲部分一致性,為了盡量滿足性能會用到一部分緩存和NoSQL數據庫來支撐。
集群部署
MySQL數據庫集群部署方案常用的有兩種:PXC方案和Replication方案。這兩套方案中PXC方案支持雙向數據同步要求強一致性,Replication方案支持單向數據同步(不支持雙向數據同步)不要求強一致性。
數據切分
MySQL數據庫單表容量超過5000萬性能就會急速下降,需要水平切分數據表了。常用的方案就是業界有名MyCat中間件,根據自定義邏輯表規則切分數據表。
部署方案
綜上所述,整理了一個能滿足以上場景的方案。PXC集群用來做強一致性存儲高價值數據,Replication集群則用來支撐高可用存儲普通數據,上層用MyCat做一個數據表水平切分,每個分片為一個集群。最終架構圖如下: