當咱們準備作先後端分離項目時,咱們在考慮什麼?

幾年前作先後端分離項目的緣由,是node剛剛橫空出世,業界開始考慮如何真正的用js去寫後端服務,因而就借鑑阿里中途島項目去嘗試,主要仍是用到了node的密集io場景下的轉發。前端

咱們的新項目是採用先後端分離的方式進行開發,這一點主要是基於產品特色考慮而來,產品自己會有很強的富客戶端的特色。node

咱們後端服務面向的客戶端包含:iOSAndroidiPadH5,還有一些遊戲場景。因此最好的方式就是後端提供通用的restapi進行數據傳輸,而前端展現邏輯則交由不一樣客戶端本身實現。sql

先後端分離項目主要基於微服務架構開發,既然是微服務,因此分佈式系統所應該面對的問題一個也漏不掉。數據庫

JAVA微服務開發場景下,SpringBoot可謂神器,咱們基於SpringBoot開發了一個能夠快速開發的腳手架,腳手架自己包含了經常使用及通用的基本功能,如auth驗證功能鑑權MysqlMqRedis通用配置的依賴,這樣開發工程師在須要開發新功能時,直接從對應的代碼庫拉下來,編譯以後即可跑起來一個hello worldrestapi項目。剩下的工做就是圍繞業務邏輯去寫repository,service,controller代碼了。後端

通訊

服務之間的通訊主要能夠經過HTTP,RPC方式,衆所周知RPC調用的效率要高HTTP好幾個等級,因此推薦使用RPC,可是綜合考慮系統性能及可用性,快速開發等因素,咱們也大量使用HTTP進行服務調用,同時咱們也經過Golang對一些核心api,好比支付,交易類接口進行了重寫,因此須要在系統效率及開發效率之間作好平衡。api

接口規範

雖然是先後端分離項目,大部分是經過restapi方式給客戶端暴露數據,可是也不可避免在系統中會存在本身的view頁面,因此在api及controller命名上會創建:AuthApi,AuthController,約定大於配置,能夠幫助咱們後端對不一樣的請求作隔離和控制。緩存

任務類系統

項目中不可避免存在大量的任務程序,主要須要作好數據備份,考慮分佈式場景下的任務調度,資源分配問題,主要根據場景不一樣進行開發。
咱們採用Zk+定時任務自研的調度系統,也能夠採用開源的Elastic-Job方案。架構

依賴梳理

這個是一個項目開發過程當中最重要的一點,梳理好系統上下游所依賴的服務,同時梳理好服務之間的等級關係。前後端分離

依賴關係主要分爲兩部分:依賴別人,被別人依賴分佈式

依賴別人的服務,包含其餘系統API及底層的數據庫,Redis,MQ等服務,須要作好對方服務不可用的準備,隨時作好降級,限流及開關功能,最好作成可配置,自動化。
被別人依賴的服務作成高可用,冪等性,響應數據的可讀性好等特色。

同時對服務依賴性梳理,哪些系統屬於強依賴,哪些屬於若依賴。

不一樣依賴的標準作好開關,降級,重試等功能,強依賴好比DB掛了,能夠寫日誌,寫到MQ。弱依賴能夠作成柔性降級,好比寫日誌到ES中,ES不可用,能夠直接降級便可。

對於黃金等級服務,則必定保證服務高可用,能夠作災備,好比依賴集羣,多個機房,也就是這個服務是不可降級的,必須準備多套方案保證服務可用。

關於依賴降級可使用Hystrix作。

用戶友好性

作好最壞的打算,若是後端服務所有不可用,前端轉發問題等,必定不要給用戶一個錯誤頁面,必定創建多級緩存,有數據託底,不管如何保證頁面上有內容的。

總結

綜上所述,作好工具,梳理好服務依賴,對服務作等級劃分,弱依賴能夠經過降級,限流方式處理。強依賴則必須經過多種災備手段保證高可用,不要給用戶感到恐慌的頁面,要有數據託底。

相關文章
相關標籤/搜索