看eBay如何評價他們的Node.js首次嚐鮮

據eBay官方技術博客介紹,一直以來他們依賴的都是基於Java的技術,所有的工作流都圍繞着Java和JVM。考慮到ebay.com這樣的流量規模和穩定性要求,使用Java這樣可靠的技術明顯是合適的選擇。在這篇文章中,作者介紹了eBay爲何以及如何開發了他們第一個Node.js應用。以下爲CSDN編譯。

擴展性

這一切起源於eBay Hackathon冠軍項目產品化的想法,但是我們發現Java並不適合該項目(並無惡意),於是開始了Node.js世界的探索之路。

關於這個項目我們有兩項基本要求:第一,儘可能地實時響應——比如維持與服務器端的實時連接;第二,能夠集成eBay數量衆多的獨有服務,在頁面上顯示信息——比如綁定I/O相關操作。我們起初使用的是基礎Java結構,但是它對資源的消耗大大出乎我們的預期,在產品化時遇到了擴展性問題。這促使我們決心構建一個新的 orchestrator中間件,而Node.js最符合我們的需求。

心態

eBay一直以來都圍繞Java這樣的強類型靜態語言開發解決方案,所以一開始很難說服大家使用JavaScript做後端開發。類型安全保障、錯誤處理、擴展等等方向的問題都困擾着我們。此外JavaScript本身(被稱爲 世界上誤解最多的語言)也讓這場辯論變得更加艱難。爲此,我們建立了一個專門的內部wiki來聚合工程師們對於Node.js的觀點、疑惑、問題等等。

幾天後我們明確了大家的問題,開始着手解答。不出所料,關注最多的還是在於Node.js技術的可靠性,以及Node.js在處理早期eBay獨有的函數式Java實現的效率上。

我們一一解答了這些問題,並且提供了詳細現實案例。這一過程讓大家,包括我們自己在內都深受啓發,有的問題提出的角度是甚至我們從未想過的,最終大家終於理解了Node.js的核心價值。事實上,其中一些反對觀點恰恰是其特色之處。

啓動

項目從零開始,我們的目標是建立一個最小化的 boilerplateNode.js服務器,但是必須擁有足夠的可擴展性;此外我們並不想引入現有的框架,因爲這會使應用變得臃腫。隨後我們依次引入了4個Node模塊——express、cluster、request以及async。數據持久性方面,我們決定採用和eBay一樣MongoDB,這就不會增加使用的難度。通過這些基本設置,項目服務已經可以運行了。服務器能夠接收請求、調用eBay API,並持久化一些數據。

對於端到端的測試,我們將前端服務器指向Node.js服務器,一切看起來都不錯。但接下來纔是更嚴峻的挑戰,我們開始使用白板描述所有用例、敲定REST結束點、設計數據模型和結果、確定最合適的Node模塊,最後實現每個端點。在接下來的幾周裏,我們一直在編碼、編碼、編碼……

部署

在應用開發趨於穩定後,就是時候離開開發環境、登臺運行了。我們開始研究Node.js部署問題,目標很簡單:自動化過程、一次構建隨時部署。這正是我們對Java構建流程的要求,我們希望兩者能夠儘可能無縫地對接,並保持簡單。

得益於基於雲的部署系統,我們所需要做的僅僅是編寫shell腳本,然後在 Hudson CI job上運行。無論何時有新代碼簽入主分支,Hudson CI job都會自動處理——通過shell腳本構建並打包Node.js bundle,最後將其推送到雲端。雲服務提供了簡單的用戶界面,可以選擇環境(QA、演示或者前期製作),並且在相應的機器上運行該應用。

現在,我們已經在不同的穩定環境中運行了Node.js服務,整個部署過程比我們想象中簡單、快速得多。

監控

在eBay,我們有集成在Java線程模型以及JVM層的日誌記錄API,在日誌數據之上還有非常優秀的監控儀表盤,能夠生成報告,並且能夠在出錯時實時地發佈警報。我們也通過hook中心日誌系統,爲Node.js實現了類似的監控模塊,並且實現了3個不同的日誌記錄API:

代碼級日誌記錄。
機器級日誌記錄
負載平衡級日誌記錄。

此外,特別需要確保日誌數據格式與既有Java應用完全相同,這樣就可以使用相同的儀表盤,並且通過每個人都熟悉的方式接收報告。

其中最大的挑戰在於Node.js事件循環的異步特性,這會導致處理的日誌完全交叉。如何解決這一問題呢?首先試想一下下面的用例:Node進程從URL請求開始,通過異步回調返回了一個DB請求。該進程會在DB事務結束前和下一個請求並行。這對於Node.js這樣的事件循環模型來說是一個非常常見的場景,多個URL請求的日誌會因此交叉,因此日誌報告會非常難以理解。最終我們分別爲該問題制定了短期和長期的解決方案。

結論

在上面的工作結束後,我們Hackathon項目已經可以上線了,它也是eBay第一個使用Node.js作爲後端的應用。目前該項目已經在內部試運行了,並且在性能方面得到了積極的反饋。激動人心的時刻就在前方!

得益於第一個Node.js後端應用的成功,eBay平臺團隊已經在着手開發一個運行在Node.js之上的成熟前端,它將能大大提升我們非前端特定功能的開發效率。對於前端工程師來說,夢想即將成真,我們可以自豪地宣告:“JavaScript無處不在!”

轉載請註明: 轉載自万俟飛的博客

本文鏈接地址: 看eBay如何評價他們的Node.js首次嚐鮮

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