幾年前作先後端分離項目的緣由,是node剛剛橫空出世,業界開始考慮如何真正的用js去寫後端服務
,因而就借鑑阿里中途島
項目去嘗試,主要仍是用到了node的密集io場景下的轉發。前端
咱們的新項目是採用先後端分離的方式進行開發,這一點主要是基於產品特色考慮而來,產品自己會有很強的富客戶端
的特色。node
咱們後端服務面向的客戶端包含:iOS
,Android
,iPad
,H5
,還有一些遊戲場景
。因此最好的方式就是後端提供通用的restapi
進行數據傳輸,而前端展現邏輯則交由不一樣客戶端本身實現。sql
先後端分離項目主要基於微服務架構
開發,既然是微服務
,因此分佈式系統
所應該面對的問題一個也漏不掉。數據庫
JAVA微服務開發場景下,SpringBoot
可謂神器,咱們基於SpringBoot
開發了一個能夠快速開發的腳手架,腳手架自己包含了經常使用及通用的基本功能,如auth驗證
,功能鑑權
,Mysql
,Mq
,Redis
及通用配置
的依賴,這樣開發工程師在須要開發新功能時,直接從對應的代碼庫拉下來,編譯以後即可跑起來一個hello world
的restapi
項目。剩下的工做就是圍繞業務邏輯去寫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
作。
作好最壞的打算,若是後端服務所有不可用,前端轉發問題等,必定不要給用戶一個錯誤頁面,必定創建多級緩存,有數據託底
,不管如何保證頁面上有內容的。
綜上所述,作好工具,梳理好服務依賴,對服務作等級劃分,弱依賴能夠經過降級,限流方式處理。強依賴則必須經過多種災備手段保證高可用,不要給用戶感到恐慌
的頁面,要有數據託底。