關於web系統總體優化提速總結

關於web系統總體優化提速總結

1、背景

  隨着公司業務的拓展,隨之而來就是各類系統橫向和縱向的增長,PVUV也都隨之增長,原有的系統架構和模式慢慢趕上了瓶頸,須要逐步的對系統從總體上進行改造升級,經過一段時間的整理思路,作一個簡單的總結與分享。同時因爲能力等方面的不足,若是有什麼說的很差之處,還請各位大神多多指點。css

2、總體思路

  本次調整提示主要從如下幾個點進行入手html

  • 項目自己架構上:先後端分離、業務系統與管理系統橫向拆分、服務接口根據業務流向進行橫向拆分、服務接口根據功能單元進行縱向分割;
  • 數據交互上:採用多級緩存、消息隊列機制;
  • 數據存儲上:根據業務線和功能模塊橫向分庫、在具體表上,根據實際業務採用橫向拆表縱向分表存儲

3、具體每個點的細分

1、項目自己架構改進

  項目架構改進,主線就是面向微服務化。主要思路是:先後端分離、業務系統與管理系統橫向拆分、服務接口根據業務流向進行橫向拆分、服務接口根據功能單元進行縱向分層。前端

  系統分割的總體架構及其組成單元,以及其各個單元間的數據交互關係以下圖:web

 

 

先後端分離:

  先後端分離,通俗的說就是:將界面顯示和後端業務邏輯處理分割成獨立的項目,分割後,兩種的數據交互是,前端經過ajax調用後端暴露的數據交互接口,數據交互格式採用(json)。ajax

  先後端分離可以起到很好的先後端解耦,各自分工,提升開發效率,提升代碼的複用性,便於資源的橫向擴展部署。數據庫

系統橫向拆分:

  系統橫向拆分,主要是隻,根據不一樣的業務角色,獨立搭建對應的UI系統,避免一個平臺大單點站點,只要一個模塊出問題,致使整個系統平臺都不能使用。系統拆分後,不一樣的系統獨立部署,互不影響。這樣適當系統職責功能單一,便於後期維護和管理,同時可以提升平臺的總體可用性。json

  好比,系統橫向可拆分爲:平臺總後臺管理系統、合做商管理後臺、店鋪管理後臺、PC商城、H5商城、APP後端

接口進行橫向拆分、縱向分層:

  接口橫向拆分:橫向拆分,主要是指根據不一樣的功能模塊將取拆分爲獨立的服務。通常拆分標準,是按照大的功能模塊點來拆分。好比:商品、訂單、帳單、用戶、公共數據。緩存

    這樣拆分的好處是:單點項目功能職責單一便於後期維護管理;不一樣服務獨立部署,互不影響,提升系統的可用性;資源部署,可根據服務使用頻率動態增長單點的硬件資源,提升資源的利用率。服務器

  接口縱向分割:這個就是軟件上的一個分層思想,其做用主要表如今:

  •     可維護性、靈活性,好比當需求發生變化時,只須要修改軟件的一部分,不會影響到其餘部分的代碼,下降了層與層之間的耦合度
  •     可擴展性,能夠很方便的在現有系統中新功能可重用性,能夠減小程序代碼冗餘,每一層均可以多種用途,知足於多種需求
  •     可管理性,程序分層後能夠下降系統管理的難易程序,將程序分爲多層後,能夠將工做分解給不一樣的開發小組,從而便於管理,系統越複雜、規模越大,分的層數就需越多。

二、數據交互方式上改進

  數據交互上的改進主要採用多級緩存+消息隊列機制,來提升相應效率,同時也能提升系統的吞吐量和併發數。下面將簡要說明緩存及其消息隊列的使用機制。

 

   多級緩存效果圖,借用一張博客園的圖,以爲解釋的很到位,以下:

 

 

   客戶端緩存:客戶端緩存主要緩存用戶的登陸狀態消息,非敏感、變動頻率及其小、使用頻換(入地理位置信息)。

    因爲客戶端緩存在相應速度是最快的方式,可是也會有一個很致命的缺點,若是須要強制清理緩存比較麻煩,服務器端提供一個接口配置強制清緩存策略,這樣可以提升客戶端緩存的可控性。

  服務器緩存:服務器緩存主要存儲一些登陸用戶相關信息,以及配置信息等。

  分佈式緩存:分佈式緩存主要用於緩存一些變化頻率低的數據,好比:商品信息、店鋪信息等等。

  運維級緩存:運維緩存主要緩存一些文件資源,如jscsshtml等,這樣用戶可以快速的獲取到資源信息。

 

  消息隊列:使用消息隊列異步處理用戶請求,可以將用戶請求和邏輯操做解耦,提升用戶相應速度。

三、數據存儲上改進

  數據存儲的主要改進方案是:數據庫讀寫分離+主從備份,縱向分表+橫向分區存儲

  根據業務線和功能模塊橫向分庫、在具體表上,根據實際業務採用橫向拆表縱向分表存儲

  業務線和功能模塊橫向分庫:好比,訂單數據、帳單數據、商品相關的數據,採用獨立的庫存儲

  橫向拆表:主要是針對數據量比較大的表,按照某一規則,分表存儲(是否分表的規則是保持單標數據不要超出百萬),

         好比訂單表,因爲數據量比較大,能夠按照月分表;用戶表能夠按照哈希分表存儲。

  縱向分表:主要是針對表字段比較多的表,拆分爲多表存儲,通常拆分規則爲:

       對於一張表若是業務上分兩次訪問某一張表其中一部分數據,那麼就能夠根據每次訪問列的不一樣來作拆分;

         另外還能夠根據列更新的頻率來拆分,例如某些列天天要更新3次,有些列從建立開始基本上不多更新。

4、總結

  經過先後端分離+系統拆分:獨立部署,提升系統的可以使用性,提升資源的使用效率

  經過多級緩存+消息隊列:提升系統相應時間、系統的吞吐量、併發數

  數據庫讀寫分離+主從備份,縱向分表+橫向分區存儲:提升數據庫的處理效率,和下降處理壓力。

 

原文出處:https://www.cnblogs.com/xiaoXuZhi/p/web_Framework_Design.html

相關文章
相關標籤/搜索