當我們准備做前后端分離項目時,我們在考慮什么?


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

我們的新項目是采用前后端分離的方式進行開發,這一點主要是基於產品特點考慮而來,產品本身會有很強的富客戶端的特點。

我們后端服務面向的客戶端包含:iOSAndroidiPadH5,還有一些游戲場景。所以最好的方式就是后端提供通用的restapi進行數據傳輸,而前端展示邏輯則交由不同客戶端自己實現。

前后端分離項目主要基於微服務架構開發,既然是微服務,所以分布式系統所應該面對的問題一個也漏不掉。

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

通信

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

接口規范

雖然是前后端分離項目,大部分是通過restapi方式給客戶端暴露數據,但是也不可避免在系統中會存在自己的view頁面,所以在api及controller命名上會建立:AuthApi,AuthController,約定大於配置,可以幫助我們后端對不同的請求做隔離和控制。

任務類系統

項目中不可避免存在大量的任務程序,主要需要做好數據備份,考慮分布式場景下的任務調度,資源分配問題,主要根據場景不同進行開發。
我們采用Zk+定時任務自研的調度系統,也可以采用開源的Elastic-Job方案。

依賴梳理

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

依賴關系主要分為兩部分:依賴別人,被別人依賴

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

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

不同依賴的標准做好開關,降級,重試等功能,強依賴比如DB掛了,可以寫日志,寫到MQ。弱依賴可以做成柔性降級,比如寫日志到ES中,ES不可用,可以直接降級即可。

對於黃金等級服務,則一定保證服務高可用,可以做災備,比如依賴集群,多個機房,也就是這個服務是不可降級的,必須准備多套方案保證服務可用。

關於依賴降級可以使用Hystrix做。

用戶友好性

做好最壞的打算,如果后端服務全部不可用,前端轉發問題等,一定不要給用戶一個錯誤頁面,一定建立多級緩存,有數據托底,無論如何保證頁面上有內容的。

總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM