前后端分离微服务架构如何设计?
一、職責(zé)劃分
前端
前端工作專注業(yè)務(wù)的頁(yè)面呈現(xiàn),非常注重用戶體驗(yàn)度,也是與各種角色打交道最多的。
比如:
前端開發(fā)人員會(huì)經(jīng)常與產(chǎn)品經(jīng)理或者客戶討論頁(yè)面樣式、視覺效果,頁(yè)面布局等各種頁(yè)面渲染效果
前端開發(fā)人員要與UI設(shè)計(jì)師對(duì)接:字體大小、顏色、頁(yè)面布局、樣式等
前端開發(fā)人員與多個(gè)后端開發(fā)人員接口對(duì)接
前端開發(fā)人員與測(cè)試人員基于bug修復(fù)討論
一般前端工作包括六個(gè)部分:
1、UI設(shè)計(jì)師與產(chǎn)品經(jīng)理對(duì)接需求
2、UI設(shè)計(jì):UI設(shè)計(jì)師設(shè)計(jì)高保真圖,給前端開發(fā)人員設(shè)計(jì)真實(shí)頁(yè)面
3、頁(yè)面開發(fā):根據(jù)UI設(shè)計(jì)師提供的高保真圖,進(jìn)行頁(yè)面模塊開發(fā)
4、前后端接口對(duì)接:與后端開發(fā)人員對(duì)接API接口
5、前后端聯(lián)調(diào)測(cè)試:包括頁(yè)面展示以及接口數(shù)據(jù)
6、bug修復(fù)
后端
如果前后端職責(zé)劃分很清楚的話,后端更多開發(fā)工作在于業(yè)務(wù)接口設(shè)計(jì)、業(yè)務(wù)邏輯處理以及數(shù)據(jù)的持久化存儲(chǔ),并提供詳細(xì)的接口設(shè)計(jì)文檔給前端開發(fā)人員使用。
一般后端工作包括五個(gè)部分:
1、與產(chǎn)品經(jīng)理對(duì)接需求
2、業(yè)務(wù)API接口開發(fā):根據(jù)根據(jù)需求文檔進(jìn)行業(yè)務(wù)接口開發(fā)
4、接口對(duì)接:與前端開發(fā)人員接口對(duì)接
5、前后端聯(lián)調(diào)測(cè)試:包括頁(yè)面展示以及接口數(shù)據(jù)
6、bug修復(fù)
二、技術(shù)劃分
前端開發(fā)技術(shù)棧
h5、css、nodejs/vue/angular/react、webpack、hbuilder/vscode等
后端開發(fā)技術(shù)棧
后端更注重業(yè)務(wù)邏輯處理,以數(shù)據(jù)為中心,關(guān)注數(shù)據(jù)存儲(chǔ)及高并發(fā)請(qǐng)求等。
SpringCloud/Springboot、SpringMVC、ORM框架、數(shù)據(jù)庫(kù)、緩存框架(Redis,Codis\Memcached等),大數(shù)據(jù)框架(Hadoop/Spark/hive/Hbase/Storm/ES/Kafka等)等等
三、我們約定
技術(shù)選型
最好選擇成熟穩(wěn)定,易上手、開發(fā)效率高的技術(shù),因?yàn)閷?shí)際項(xiàng)目開發(fā)時(shí)間是有限的,開發(fā)人員沒有多少精力放在學(xué)習(xí)和深度研究技術(shù)上。
數(shù)據(jù)格式
后端開發(fā)提供接口設(shè)計(jì)文檔,詳細(xì)寫明每個(gè)接口的請(qǐng)求地址、請(qǐng)求參數(shù)、響應(yīng)參數(shù)等等;一般采用REST風(fēng)格以JSON格式提供數(shù)據(jù)。
接口設(shè)計(jì)
一個(gè)接口設(shè)計(jì)的好壞,直接影響到前后端一些溝通協(xié)調(diào)問題。
依筆者經(jīng)驗(yàn)來(lái)看,如果后端接口不穩(wěn)定,會(huì)導(dǎo)致前端開發(fā)人員反復(fù)修改頁(yè)面數(shù)據(jù)呈現(xiàn)。常常出現(xiàn)后端開發(fā)說(shuō)這是前端問題,前端開發(fā)說(shuō)是后端問題,來(lái)回扯皮,溝通效率低下。
從前端開發(fā)的角度來(lái)說(shuō),他們更關(guān)注用戶體驗(yàn)效果, 因?yàn)榭蛻艨吹降氖亲罱K頁(yè)面,頁(yè)面效果以及數(shù)據(jù)呈現(xiàn)效果的好壞最能反映客戶的滿意度的。客戶不關(guān)注你用了什么牛逼的技術(shù),有什么牛逼的人。
從后端開發(fā)角度來(lái)說(shuō),他們更關(guān)注程序的可靠性、穩(wěn)定性、安全性以及是數(shù)據(jù)完整性、一致性等。
所以前后端雙方關(guān)注點(diǎn)不同,難免會(huì)涉及到一些工作量大小問題。例如接口粒度問題
接口容量問題
一個(gè)接口的業(yè)務(wù)容量大小,往往代表前后端工作量的大小。
如果一個(gè)接口的業(yè)務(wù)容量太小,前端需要分階段處理的事情就多,尤其是對(duì)多個(gè)接口Ajax異步處理;如果一個(gè)接口的業(yè)務(wù)容量太大,那么業(yè)務(wù)耦合性高,萬(wàn)一需求變更,后端程序改動(dòng)大,不利于程序的擴(kuò)展。
四、分離帶來(lái)的優(yōu)勢(shì)
前后端職責(zé)分明,分工明細(xì)
局部變化,不會(huì)影響所有業(yè)務(wù)功能;也不會(huì)因?yàn)槟尘植抗δ苄薷?#xff0c;而導(dǎo)致所有程序重啟服務(wù)。
開發(fā)效率高,在不涉及接口聯(lián)調(diào)時(shí),前后端互不干擾
聯(lián)調(diào)簡(jiǎn)單,前后端保證API接口規(guī)范穩(wěn)定就行
問題責(zé)任清晰,聯(lián)調(diào)/測(cè)試/預(yù)發(fā)/上線/bug,都能馬上定位是哪方的問題。
自動(dòng)化部署:容器化部署:docker+k8s
五、分離帶來(lái)的問題
一、前后端分離思想要轉(zhuǎn)變
不能老是按照傳統(tǒng)WEB(js/h5/css/后端代碼放在一個(gè)工程)開發(fā)思維去看待前后端分離
二、溝通成本問題
以前傳統(tǒng)WEB開發(fā),開發(fā)人員從需求到設(shè)計(jì)到開發(fā)基本上是一個(gè)人。而前后端分離后,前端只負(fù)責(zé)頁(yè)面呈現(xiàn),后端更注重業(yè)務(wù)邏輯處理以及數(shù)據(jù)的持久化,雙發(fā)都有自己的側(cè)重點(diǎn),工作量上有私心。
三、組織結(jié)構(gòu)問題
康威定律
第一定律:Communication dictates design(組織溝通方式會(huì)通過系統(tǒng)設(shè)計(jì)表達(dá)出來(lái))
第二定律:There is never enough time to do something right, but there is always enough time to do it over(時(shí)間再多一件事情也不可能做的完美,但總有時(shí)間做完一件事情)
第三定律:There is a homomorphism from the linear graph of a system to the linear graph of its design organization(線型系統(tǒng)和線型組織架構(gòu)間有潛在的異質(zhì)同態(tài)特性)
第四定律:?The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems(大的系統(tǒng)組織總是比小系統(tǒng)更傾向于分解)
康威定律說(shuō)明以下幾點(diǎn)
人與人的溝通是非常復(fù)雜的,一個(gè)人的溝通精力是有限的,所以當(dāng)問題太復(fù)雜需要很多人解決的時(shí)候,我們需要做拆分組織來(lái)達(dá)成對(duì)溝通效率的管理
組織內(nèi)人與人的溝通方式?jīng)Q定了他們參與的系統(tǒng)設(shè)計(jì),管理者可以通過不同的拆分方式帶來(lái)不同的團(tuán)隊(duì)間溝通方式,從而影響系統(tǒng)設(shè)計(jì)
如果子系統(tǒng)是內(nèi)聚的,和外部的溝通邊界是明確的,能降低溝通成本,對(duì)應(yīng)的設(shè)計(jì)也會(huì)更合理高效
復(fù)雜的系統(tǒng)需要通過容錯(cuò)彈性的方式持續(xù)優(yōu)化,不要指望一個(gè)大而全的設(shè)計(jì)或架構(gòu),好的架構(gòu)和設(shè)計(jì)都是慢慢迭代出來(lái)的
四、部署及監(jiān)控運(yùn)維
前后端分離后,拆分的服務(wù)會(huì)帶來(lái)線上部署以及如何監(jiān)控運(yùn)維的復(fù)雜性。
六、總結(jié)
總體來(lái)說(shuō),前后分離所帶來(lái)的好處還是更明顯的。一個(gè)成熟的前后端分離的團(tuán)隊(duì),文檔化約定,前后端職責(zé)分離、接口約定都是做的比較好的
總結(jié)
以上是生活随笔為你收集整理的前后端分离微服务架构如何设计?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据中台模型设计系列(一):维度建模初探
- 下一篇: 如果张东升是个程序员