前言

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

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

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

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

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

正文

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

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

網(wǎng)友評論