用NodeJS開發雲計算時代Web服務的真正技術難點

因爲前一陣子做項目用NodeJS/express開發了一個測試服務(代碼現已從github刪除,無非就是一個查詢MySQL的REST/JSON接口的Web服務實現),一些感想:


(1)基於NodeJS的Web服務開發實在不要太簡單,其url routing、json序列化、express中間件配置,用起來都特別方便。OpenResty的作者春哥非常鄙視Node的嵌套callback的風格,但我覺得OpenResty本身的Lua編程也極其的束縛手腳,一點都不爽;


(2)但真正的技術難點在於:當用Node來查詢MySQL數據庫時,異步IO機制似乎無法與傳統的SQL數據庫CRUD/ACID事務很好的匹配上。尤其在涉及一個請求處理可能涉及到多次操縱/查詢數據庫表的時候。當然,如果僅僅是一次sql查詢,代碼還是足夠清晰簡單可維護的。


Web服務的客戶端請求通常分爲讀與寫兩種類型。寫就是通過表單收集數據,當然也可以用Ajax POST。而讀通常對應於Web數據的可視化展現,甚至會涉及到複雜的Web圖表/報告導出。


對於傳統的MySQL 關係數據庫而言,sql查詢可能涉及到複雜的JOIN操作。如果爲了適配異步IO框架,變成了多步操作的話,通常ACID事務性質很難正確保持。——如果做到了,那麼我估計數據庫後臺的TPS併發性能很差的。


現在全棧開發喜歡講一個MEAN,意思是對Node開發而言,可以改用MongoDB,而不是MySQL。我覺得對於一個普通的JSON Request Body數據來說,用MongoDB自然是小事一樁。但MongoDB本身在水平擴展的情況下也會遇到維護性問題。而且寫操作是簡單了,複雜的查詢分析可能又會變得複雜了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章