前言

上周有幸和淘寶前端團(tuán)隊(duì)的七念老師做了一些NodeJS方面上的交流(實(shí)際情況其實(shí)是他電話面試了我╮(╯-╰)╭),我們主要聊到了我參與維護(hù)的一個(gè)線上NodeJS服務(wù),關(guān)于它的現(xiàn)狀和當(dāng)下的不足。他向我提出的一些問(wèn)題帶給了我很大啟發(fā),盡管回答的不是很好。問(wèn)題大意是,對(duì)于你意識(shí)到的這些不足,你將嘗試怎樣去改進(jìn)它們?甚至,如果給你一個(gè)機(jī)會(huì)來(lái)重新設(shè)計(jì)這個(gè)系統(tǒng)服務(wù),你將如何做?相比現(xiàn)在有什么的改進(jìn)?

為什么說(shuō)這些問(wèn)題對(duì)我產(chǎn)生了啟發(fā),是因?yàn)檫@些問(wèn)題是我不曾考慮過(guò)的?;蛘哒f(shuō)考慮過(guò),但沒(méi)有這么嚴(yán)肅的考慮過(guò)。這里的“嚴(yán)肅”指的是具體到線上,細(xì)節(jié),容災(zāi)容錯(cuò)等方面。而在電話之后我重新嘗試回答這些問(wèn)題的過(guò)程中又收獲了不少新的知識(shí)。

這篇文章與以往的文章不同,并不是闡述某一個(gè)問(wèn)題的最佳解決方案,也不會(huì)落實(shí)到具體的代碼上。而是分享在探尋答案過(guò)程中收獲的心得、留下的困惑還有一點(diǎn)個(gè)人的經(jīng)驗(yàn)。至于這些能否拿來(lái)回答最初的那些問(wèn)題我沒(méi)有十足的把握,也許能,但肯定不是最佳答案。因?yàn)楹蠖思軜?gòu)實(shí)在一個(gè)很有深度的話題,也是一個(gè)極其成熟的技術(shù)方向。即使有了理論方面的積累,面對(duì)千變?nèi)f化的業(yè)務(wù)需求難免還是靈活的對(duì)方案進(jìn)行改進(jìn),而無(wú)論是理論還是實(shí)踐經(jīng)驗(yàn)都是我欠缺的。

這段話本來(lái)應(yīng)該是寫在結(jié)尾,感覺(jué)順嘴也就掛在了開(kāi)頭。

最后,本文的部分內(nèi)容和圖片參考自圖書(shū)Node.js design patterns的第七章內(nèi)容Scalability and Architectural Patterns。其實(shí)書(shū)中該章中的大部分內(nèi)容也并非原創(chuàng),但是它做了很好的匯總和遷移,具體我會(huì)在之后說(shuō)明。所以如有雷同,不是巧合。

正文

一個(gè)怎樣的后端服務(wù)才能算得上優(yōu)秀?或者放低身段說(shuō)合格?再把這個(gè)問(wèn)題翻譯翻譯,優(yōu)秀或者合格的標(biāo)準(zhǔn)是什么?

假設(shè)現(xiàn)在需要你用NodeJS搭建一個(gè)http服務(wù),我猜測(cè)你會(huì)借助express框架用不到10行的代碼完成這項(xiàng)工作。不能說(shuō)這么做是錯(cuò)的,但這樣簡(jiǎn)易的程序是脆弱的:一旦部署上線之后,可能瞬間就被大量涌入的請(qǐng)求擊垮,更不要提各種潛在的漏洞危險(xiǎn)。退一步說(shuō),即使線上程序經(jīng)過(guò)了這一關(guān)考驗(yàn),如果你要更新程序怎么辦?不得不讓用戶中斷訪問(wèn)一段時(shí)間?

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式