五個最佳案例帶你解讀Node.js的先後之道

Node.js 是什麼?前端

Node.js採用C++語言編寫而成,瀏覽器內核V8作爲執行引擎;Node不是JS應用、而是一個Javascript的運行環境。Node保留了前端瀏覽器js的接口,沒有改寫語言自己的任何特性,依舊基於做用域和原型鏈。java

Node.js 是一個爲實時Web(Real-time Web)應用開發而誕生的平臺,它從誕生之初就充分考慮了在實時響應、超大規模數據要求下架構的可擴展性。這使得它摒棄了傳統平臺依靠多線程來實現高併發的設計思路,而採用了單線程、異步式I/O、事件驅動式的程序設計模型。這些特性不只帶來了巨大的性能提高,還減小了多線程程序設計的複雜性,進而提升了開發效率。node

Node.js的特色web

一、一個Javascript運行環境redis

二、依賴於Chrome V8引擎進行代碼解釋數據庫

三、事件驅動express

四、非阻塞I/Osegmentfault

五、輕量、可伸縮,適於實時數據交互應用後端

六、單進程,單線程設計模式

Node.js能作什麼?

一、具備複雜邏輯的網站

二、基於社交網絡的大規模 Web 應用;

三、Web Socket 服務器(頁遊,web IM);

四、TCP/UDP 套接字應用程序;

五、命令行工具;

六、交互式終端程序;

七、帶有圖形用戶界面的本地應用程序;

八、單元測試工具;

九、客戶端 JavaScript 編譯器

Node.js架構

事件循環

NodeJs執行模型: 單線程Event Loop

 當應用請求發生時,首先進入V8引擎,而後進入到事件隊列,能夠理解爲他們在不斷地在循環,看是否有任務,產生任務就去執行。上圖是單線程模型。

NPM

後端在開發其餘語言時,都有一些模塊的概念或者第三方提供了很實用的小模塊。一樣,Node.js當時出來的時候也有這樣一個倉庫。這個倉庫就是專門用來管理中國開發者的一個貢獻的模塊,並且發展很是的快。一樣,前端有一些腳手件,在服務器這邊運行的有debug,express,express-session,thrift,依託這個插件作thrift相關的事情,images其餘的一些你想的到的插件,都是能夠從它找到。

架構體系

上圖是個推部分WEB平臺的架構體系,個推有一套雲組進資源,經過Nginx做爲一個分發,Node能夠有多個節點,經過session進入。每個Node都有模式,相信你們在部署的時候確定不可能部署一個節點,部署一個節點,不然這個節點掛了就是掛了。

Thrift使用

一、定義接口

二、編譯,生成對應的包,並上傳到相應的庫中

三、在Node中使用,以下:

注意:這裏有個坑

thrift 中有個基本類型叫作 double (64位浮點數)。當定義成這個類型時,數據從 java 過來到 Node 會變成全是0。

解決方案

定義成 string 類型,以後特事特辦,如必要則在 Node處再轉成浮點數,或者直接由頁面端處理。

IP負載(IP Load Balance)

負載均衡

分攤到多個操做單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工做任務。

原生中其並無負載均衡的機制,但咱們能夠採用動態代理的設計模式,基於thrift client,利用JS的原型鏈來實現。

均衡的方式有不少種,咱們使用輪詢機制來實現訪問多個Java節點。

session管理

Node自己並沒有session機制,咱們可使用express-session包來實現,同時經過redis來存儲session。

鏈接池

傳統讀取數據庫方式:

鏈接池須要作什麼?

一、鏈接預熱 (啓動時自動打開n個鏈接以供使用)

二、使用 例如 輪轉法 均勻分發 鏈接請求

三、當池中的鏈接即將耗盡得時候動態產生新的鏈接

四、當池中的鏈接一段時間沒有被調用的時候,自動釋放鏈接

五、自動丟棄 已經壞掉的 鏈接

六、系統關閉的時自動釋放全部鏈接

基於此,咱們也能夠藉助幾個插件包(如generic-pool(node-pool)、node-thrift-pool,固然,若是你直接Node鏈接的DB,基本上那個包裏面也會支持鏈接池)在Node使用鏈接池。

使用示例

利用Node能夠作的事情

一、作一些灰色地帶的事情

利用Node能夠作一些灰色地帶的事情,由於它擁有前端的優勢,能夠異步,發起異步請求。給開發者帶來很大的好處。不過,你須要管理好你的類型。若是說類型本身若是沒有管理好就是會出現一些問題。同時它也能夠作後端的一些事情。好比說鏈接池等等。

二、模塊更加分明

三、可前可後便於分工

從瀏覽器過來的數據,經過Node把這一層數據轉化成java須要的一種數據結構,就可使得分工更加明晰。

四、共用表單輸入驗證

若是你在寫系統的時候,出於安全考慮,不管瀏覽器這邊作了多少驗證,你都要作輸入驗證。傳統模式下是須要java同窗寫一份,前端同窗寫一份。由於Node跟java都是部署在服務器集羣或者一個區域,你能夠相信這兩邊之間一個數據。來自瀏覽器的驗證,就能夠共用表單輸入驗證,達到節省成本的目的。

 

以上內容來自個推web服務首席架構師姜季廷在3月12日SegmentFault D-Day 北京:後端的演講整理而成。

相關文章
相關標籤/搜索