天天看點

前後端分離項目實踐_擴充

####一、前言

>前段時間寫了《前後端分離項目實踐》收到一些建議,又經過兩個月的項目實踐、整理,和大家再分享下,統一回複下疑問。

>其它相關文章可參考<http://www.upopen.cn>

####二、新的架構圖

前後端分離項目實踐_擴充

>标紅線部分,由前端完成,相對于之前的結構,web服務端多了mobile 和 app,資料服務端在非敏感資料處也使用了mongo做資料庫存儲,按圖的序号簡單說下每塊的職能。

>1、nginx – 作為項目的入口,主要用于代理 及 負載。

>>偏前端的朋友問既然nodejs可以做web伺服器,為什麼還要用nginx?在伺服器的層面上nodejs可以啟動為web伺服器,但通常也僅限于此。在運維層面上要考慮代理、負載、process、gzip、cache、cgi...,這些不是nodejs可達到的,并且單從對靜态資源的處理上,nginx就比nodejs高效很多,畢竟nginx号稱理想情況下可以支援50000的并發,這和為什麼不用nodejs完成所有的服務資料處理是一個道理。

>>據檔案和域名将請求代理到static和nodejs伺服器

>>gzip / cache等其它功能      

>2、static用于存放js/css/imgs/ttf/less/woff等靜态資源,要充分考慮據項目的檔案目錄細化、便于擴充、

cdn部署等。 

>3、mobile web伺服器

>4、pc web 伺服器

>5、app web 伺服器

>>上面三個對應三個不同的用戶端請求,在項目不明朗的情況下,盡量細化且少耦合是比較合适的。雖然在我公司項目實踐上,三個服務主要都是對使用者使用公司服務支援,但仍有較多的不同,是以單獨分開,app部分正在開發,使用react native。

>>此處不做資料存儲,也有朋友說不做存儲,其它也沒什麼事情可以做了。我們可以做

>>* 請求路由指向

>>* 資料過濾

>>* 附件上傳

>>* 圖檔驗證碼

>>* 頁面靜态化

>>* 權限控制

>>* ...

>>這取決于你項目本身,如果是java,除了存儲外的其它邏輯,都可以考慮用nodejs來實作。

>6、routes,配置向外的接口檔案,控制請求流向

>7、使用mongodb + nodejs搭建資料庫服務,

>>此處主要用于存儲一些非敏感性、輕計算的資料,如新聞等營銷類資料,開發輕量,且非SQL資料庫也便于擴充。我們官網的營運支撐平台就是完全由前端完成的。

>8、Redis存儲緩存類資料

>>暫存使用者登入狀态及角色等臨時資訊,單獨使用SESSION無法處理多台伺服器共享,可以自行生成SID對應使用者資訊儲存在REDIS裡。

>9、使用者資料存儲 online

>>此處是正常意義的背景,因涉及較多的資料計算,我們用JAVA實作,各取所長。

>10、使用者資料存儲 DEV

>>用于并行開發過程中為web服務提供測試資料,因為此處隻是為WEB服務提供基本的資料存取不用考慮業務邏輯,實作起來也非常便捷,提供可子產品化的方法、流程,對工作是非常有利的

>11、提供測試類資料

>>此處主要是給QA使用,資料輸出到其指定的工具,便捷檢視及回報

>12、其它第三方接口

>>比如,我們手機網頁也适用于微信服務号,涉及使用者資料如OPENID擷取等。

>13、使用nodejs+mongo額外提供一個接口測試工具,友善java人員線上測試,也作為接口傳遞依據。

>總體思想就是,盡量解耦,接口化,才能便于擴充、複用,減少重構成本。

####三、技術支援

>這樣的項目,對前端人員的技術深度、廣度有更高層面的要求,此時更是一個架構、全棧的角色,這樣的角色需要哪些技能呢?

>首先,需要較好的技術團隊,良好的運維、測試、JAVA開發同僚,是項目順利進行的保證,除此之外,前端人員需要掌握以下不限于的技術,

>>1、 NODEJS,官網上的API

>>2、 NODEJS各種架構,提高開發效率

>>>a) Express

>>>b) Ejs

>>>c) Node-dev

>>>d) Node-inspector

>>>e) Log4js

>>>f) Redis-server

>>>g) Mongoose

>>>h) Pm2

>>>i) grunt

>>>...

>>3、 MONGODB / SQL

>>4、 對http有更深刻的了解,了解其原理,掌握HEADER資訊等

>>5、 LINUX(UBUNTU)開發經驗,提高開發效率,也便于與運維人員溝通

>>6、 redis / socket / ...

>>7、 更嚴謹的編輯思維,對測試、異常、日志等有較好的控制。

>可以參考教程<http://www.upopen.cn/article/info/559252e1b269230039000002>,相信會對初學者有些幫助。

>教程git在https://github.com/xiaolulu/mynodejs.git

####四、人員

>這樣的一個項目結構需要多少前端人員支援也大家最常問的,具體要視項目情況及從業人員的技術積累,有60分的積累,就可以嘗試做70分的事情,這樣才會成長。在前期探索階段,先開發一些輕邏輯的應用,把時間多用在技術實作上。

>我剛進現在創業型公司三個月+,目前隻有我一個,還在擴招。人手不足,是以在技術選擇及業務支援上一直比較謹慎

####五、總結

>這樣架構雖然提高了公司項目開發效率,但也并不比傳統方式高明很多,更談不上替代,并且需要我花費更多心力,但工作就是這樣,自己學習、努力之外,還要去創造展示自己的平台,成長就在于你為自己搭了多高的門檻,讓他人難以替代。

>nodejs出現終究還較短,國内尚沒有大規模應用,但通過一些國際企業的使用,我們可以預見其優勢可以被我們所應用。特别對于網際網路這種重頁面互動、輕業務邏輯的web應用上,更能展現其價值。

>作為新事物,還有很多問題需要探索、解決,我們在路上。

### 技術新Q群 435485569