前端與后端的思維專注點(diǎn)很不相同,前端聚焦在如何把內(nèi)容以可視化的方式展現(xiàn)給用戶,后端聚焦在如何利用IT基礎(chǔ)設(shè)施實(shí)現(xiàn)業(yè)務(wù)邏輯。所以前端參與后端開(kāi)發(fā)時(shí)(全棧工程師必備!)首先需要理解后端會(huì)做哪些事,其次才是如何才能做好這些事。
所謂“利用IT基礎(chǔ)設(shè)施實(shí)現(xiàn)業(yè)務(wù)邏輯”,意味著以下幾個(gè)概念:
IT基礎(chǔ)設(shè)施有哪些?
數(shù)據(jù)庫(kù)一定是最重要的,這里特指關(guān)系數(shù)據(jù)庫(kù),例如mysql。因?yàn)榍岸怂玫臄?shù)據(jù)庫(kù)往往非常簡(jiǎn)單,瀏覽器或者APP畢竟只服務(wù)于一位用戶,而后端的數(shù)據(jù)庫(kù)需要服務(wù)于全部用戶,這不是一個(gè)量級(jí)。在現(xiàn)實(shí)世界中,一旦量級(jí)發(fā)生改變,需要用到的技術(shù)就完全不一樣了。數(shù)據(jù)庫(kù)的基本操作ACID、事務(wù)、關(guān)聯(lián)查詢、索引都是完成業(yè)務(wù)邏輯的必備品。
緩存也是前端必須理解的概念。后端可以直接操作SATA磁盤,SSD磁盤,內(nèi)存等不同的存儲(chǔ)介質(zhì),而這些介質(zhì)的存取速度差異巨大。CPU操作L1和L2緩存只有3個(gè)納秒以內(nèi),到了L3緩存(可以以MB為單位計(jì)量了)就得10納秒以上了,而到了內(nèi)存就得100納秒以上,通過(guò)網(wǎng)卡訪問(wèn)遠(yuǎn)端則需要數(shù)百微秒,訪問(wèn)機(jī)械硬盤則要幾十毫秒。為了能夠讓用戶的請(qǐng)求盡快獲得響應(yīng),必須使用緩存。很少的場(chǎng)景下才會(huì)直接編寫緩存,通常后端都在使用的緩存服務(wù)包括redis、memcached等,其中前者使用更多。
如何正確的分析業(yè)務(wù)邏輯?
UML圖是一個(gè)非常好的手段!類圖、時(shí)序圖、狀態(tài)圖可以幫助后端理清先做什么、再做什么、不會(huì)漏掉什么。這是因?yàn)楹蠖说某绦蛐枰甑倪\(yùn)行不能宕機(jī),而前端是沒(méi)有這種要求的。因此,后端必須全面的考慮各種異常情況,防止一個(gè)用戶(請(qǐng)求)引起的意外把整個(gè)服務(wù)宕機(jī),影響了全部用戶。
業(yè)務(wù)邏輯如何與IT設(shè)施結(jié)合?
了解MVC模型!前端有許多模型,例如MVVM等,這些名詞不重要,因?yàn)樗鼈兊年P(guān)注點(diǎn)各不相同。對(duì)于后端,通常M意味著關(guān)系數(shù)據(jù)庫(kù),所以后端的WEB框架一定圍繞著M進(jìn)行。我們分析任何一個(gè)WEB框架,一定先要看它的數(shù)據(jù)庫(kù)模型,即如何將數(shù)據(jù)庫(kù)中的表、行映射到編程語(yǔ)言中。另一方面,HTTP協(xié)議有許多特性,它會(huì)導(dǎo)致MVC框架試圖以此解耦,將URL的配置與業(yè)務(wù)處理代碼分開(kāi)。最后,WEB框架由于處理場(chǎng)景的復(fù)雜,通常以可插拔的方式將許多插件串行的組合起來(lái)處理一個(gè)請(qǐng)求。前端在學(xué)習(xí)WEB框架時(shí),把握這三點(diǎn)即可快速掌握。
前端做后端時(shí)最容易犯2個(gè)錯(cuò)誤:
日志打得很少
后端的復(fù)雜場(chǎng)景會(huì)導(dǎo)致bug難以復(fù)現(xiàn)(相比前端更難),且一個(gè)應(yīng)用服務(wù)可能跑在多個(gè)服務(wù)器上,所以error、info、debug等級(jí)日志的輸出顯得尤為重要!沒(méi)有日志,問(wèn)題很難定位!
資源沒(méi)有即用即放!
因?yàn)榉?wù)是7*24小時(shí)運(yùn)行的,所以一點(diǎn)點(diǎn)資源泄露(如打開(kāi)了句柄卻未關(guān)閉)都會(huì)被時(shí)間放大!最后導(dǎo)致嚴(yán)重后果。
后端的代碼如何更高效?答案一定是算法!
好的算法在我看來(lái)就是3點(diǎn):
不做重復(fù)的事;
充分利用已知信息或者中間計(jì)算結(jié)果;
充分利用IT基礎(chǔ)設(shè)施的特性。比如多核、CPU親和性、存儲(chǔ)介質(zhì)的性價(jià)比、網(wǎng)絡(luò)報(bào)文的收發(fā)等。
為了達(dá)到這一點(diǎn),我們必須學(xué)習(xí):
算法復(fù)雜度;
分而治之的思想,這可能是所有算法思想中最有用的了;
計(jì)算機(jī)體系的特點(diǎn),如CPU架構(gòu)、網(wǎng)絡(luò)通訊成本等;
常用數(shù)據(jù)結(jié)構(gòu),如樹(shù)、哈希表、圖等。
本文出現(xiàn)的原因是團(tuán)隊(duì)中有前端同事想在后端試試水,我當(dāng)然非常歡迎,于是盡量從我對(duì)前端的理解上闡述后端開(kāi)發(fā)的要點(diǎn),或者更準(zhǔn)確的說(shuō),是后端WEB應(yīng)用開(kāi)發(fā)工程師的開(kāi)發(fā)要點(diǎn)。全棧工程師的要求高得多,這里雖然有些標(biāo)題黨嫌疑,但好在標(biāo)明了基礎(chǔ)版,進(jìn)階版在好好談?wù)勄岸宿D(zhuǎn)全棧工程師的其他要求。
-
前端
+關(guān)注
關(guān)注
1文章
194瀏覽量
17789 -
程序員
+關(guān)注
關(guān)注
4文章
953瀏覽量
29822
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論