隨着公司業務的拓展,隨之而來就是各類系統橫向和縱向的增長,PV、UV也都隨之增長,原有的系統架構和模式慢慢趕上了瓶頸,須要逐步的對系統從總體上進行改造升級,經過一段時間的整理思路,作一個簡單的總結與分享。同時因爲能力等方面的不足,若是有什麼說的很差之處,還請各位大神多多指點。css
本次調整提示主要從如下幾個點進行入手html
項目架構改進,主線就是面向微服務化。主要思路是:先後端分離、業務系統與管理系統橫向拆分、服務接口根據業務流向進行橫向拆分、服務接口根據功能單元進行縱向分層。前端
系統分割的總體架構及其組成單元,以及其各個單元間的數據交互關係以下圖:web
先後端分離,通俗的說就是:將界面顯示和後端業務邏輯處理分割成獨立的項目,分割後,兩種的數據交互是,前端經過ajax調用後端暴露的數據交互接口,數據交互格式採用(json)。ajax
先後端分離可以起到很好的先後端解耦,各自分工,提升開發效率,提升代碼的複用性,便於資源的橫向擴展部署。數據庫
系統橫向拆分,主要是隻,根據不一樣的業務角色,獨立搭建對應的UI系統,避免一個平臺大單點站點,只要一個模塊出問題,致使整個系統平臺都不能使用。系統拆分後,不一樣的系統獨立部署,互不影響。這樣適當系統職責功能單一,便於後期維護和管理,同時可以提升平臺的總體可用性。json
好比,系統橫向可拆分爲:平臺總後臺管理系統、合做商管理後臺、店鋪管理後臺、PC商城、H5商城、APP。後端
接口橫向拆分:橫向拆分,主要是指根據不一樣的功能模塊將取拆分爲獨立的服務。通常拆分標準,是按照大的功能模塊點來拆分。好比:商品、訂單、帳單、用戶、公共數據。緩存
這樣拆分的好處是:單點項目功能職責單一便於後期維護管理;不一樣服務獨立部署,互不影響,提升系統的可用性;資源部署,可根據服務使用頻率動態增長單點的硬件資源,提升資源的利用率。服務器
接口縱向分割:這個就是軟件上的一個分層思想,其做用主要表如今:
數據交互上的改進主要採用多級緩存+消息隊列機制,來提升相應效率,同時也能提升系統的吞吐量和併發數。下面將簡要說明緩存及其消息隊列的使用機制。
多級緩存效果圖,借用一張博客園的圖,以爲解釋的很到位,以下:
客戶端緩存:客戶端緩存主要緩存用戶的登陸狀態消息,非敏感、變動頻率及其小、使用頻換(入地理位置信息)。
因爲客戶端緩存在相應速度是最快的方式,可是也會有一個很致命的缺點,若是須要強制清理緩存比較麻煩,服務器端提供一個接口配置強制清緩存策略,這樣可以提升客戶端緩存的可控性。
服務器緩存:服務器緩存主要存儲一些登陸用戶相關信息,以及配置信息等。
分佈式緩存:分佈式緩存主要用於緩存一些變化頻率低的數據,好比:商品信息、店鋪信息等等。
運維級緩存:運維緩存主要緩存一些文件資源,如js、css、html等,這樣用戶可以快速的獲取到資源信息。
消息隊列:使用消息隊列異步處理用戶請求,可以將用戶請求和邏輯操做解耦,提升用戶相應速度。
數據存儲的主要改進方案是:數據庫讀寫分離+主從備份,縱向分表+橫向分區存儲
根據業務線和功能模塊橫向分庫、在具體表上,根據實際業務採用橫向拆表縱向分表存儲
業務線和功能模塊橫向分庫:好比,訂單數據、帳單數據、商品相關的數據,採用獨立的庫存儲
橫向拆表:主要是針對數據量比較大的表,按照某一規則,分表存儲(是否分表的規則是保持單標數據不要超出百萬),
好比訂單表,因爲數據量比較大,能夠按照月分表;用戶表能夠按照哈希分表存儲。
縱向分表:主要是針對表字段比較多的表,拆分爲多表存儲,通常拆分規則爲:
對於一張表若是業務上分兩次訪問某一張表其中一部分數據,那麼就能夠根據每次訪問列的不一樣來作拆分;
另外還能夠根據列更新的頻率來拆分,例如某些列天天要更新3次,有些列從建立開始基本上不多更新。
經過先後端分離+系統拆分:獨立部署,提升系統的可以使用性,提升資源的使用效率
經過多級緩存+消息隊列:提升系統相應時間、系統的吞吐量、併發數
數據庫讀寫分離+主從備份,縱向分表+橫向分區存儲:提升數據庫的處理效率,和下降處理壓力。
原文出處:https://www.cnblogs.com/xiaoXuZhi/p/web_Framework_Design.html