Hasura Storage 是一項開源服務,在 hasura 和任何 s3 兼容的存儲服務之上增加了一個存儲服務。其目的是能夠利用云存儲服務,同時也利用 hasura 的功能,如它的 graphql API、權限、行動、預設等。
出于業務發展需求,Hasura Storage 團隊近期將其原本用 Node.js 編寫的服務用 Golang 進行了重寫。“這個用 Node.js 編寫的服務在相當長的一段時間內為我們提供了良好的服務,但隨著公司的發展和用戶數量的大規模增加,性能開始成為一個問題。雖然 Node.js 可能有很多可取之處,但優異的性能和可擴展性并不是其中之一。”
Hasura Storage 方面表示,在使用Golang進行重寫后,其可處理的服務請求數增加了 5 倍,同時內存消耗減半。根據介紹,他們選擇 Go 的原因在于:
該語言的依賴性管理系統和構建系統使其非常適合云
團隊有豐富的 Golang 經驗
雖然 Go是一種非常冗長的語言(尤其是與 Node.js 相比),但它非常易于學習且編寫速度快
性能非常優異
重寫完成后,Hasura Storage 團隊針對 Node.js 和 Golang 版本的服務運行了一些基準測試。使用了k6并設計了以下測試:
當測試開始時,它會在前 10 秒內將 workers 的數量從 1 增加到 TARGET
然后再運行 60 秒才結束。
Workers盡可能快地查詢服務
運行以下測試:
download_small_file
download_medium_file
download_large_file
download_image
download_image_manipulated
CPU 被限制在整個系統的 10%
RAM 是無限的
Hasura Storage 提前聲明稱,最終結果不應該只看表面的數字;“用于基準測試的系統的 CPU 容量非常有限,因為我們想對這兩種服務施加壓力并看看它們在壓力下的表現如何所以,我們感興趣的不是數字,而是兩個版本之間的差異。”
測試結果表明,Hasura Storage在每種情況下能夠處理的請求數都實現了大幅提升,其中較小的文件(5x)的效果更為顯著。
同時在所有情況下都設法大大改善了 RAM 消耗,尤其是在下載大文件時。值得一提的是,這還是在提供了多達 5 倍的請求的前提下。
另一個重要的指標是響應時間,Hasura Storage 提供了兩個數據:最小響應時間,開源告訴我們系統未承受壓力時的響應時間;以及 P95,開源告訴我們大多數用戶的響應時間最多是多少(包括當系統處于壓力之下)。
首先是最小響應時間。測試用例download_small_file 的結果不好從圖中目測,但Hasura Storage 稱其將場景的響應時間從 Node.js用例的 29ms 提高到 Golang用例的 7ms。除了在 download_image_manipulated 中實現了大約 2 倍的改進外,在其他場景中則均實現了 4 倍的改進。
再是 P95。除 download_image_manipulated 和 download_large_file 外,大多數情況下都實現了 4 倍的改進。Hasura Storage 解釋稱,雖然沒有像其他情況那樣戲劇性,但這兩種情況下都有實質性的改進。“這是合理的,因為下載大文件會受到 I/O NET 的約束,而處理圖像則會受到 CPU 的約束。但即使如此,我們也很高興看到這種實質性的改進。”
此外,圖像處理方面也有所改善。
在服務被重寫和測試后,Hasura Storage 將服務部署到了生產環境,一些重寫的好處也開始展現。如下圖所示(集群的一個節點中的 RAM 使用情況),內存占用減少了近 40%。“這是一項重大改進,可以讓我們在不增加整體基礎設施費用的情況下為更多用戶和流量提供服務。”
Hasura Storage 方面表示,他們決定重寫服務是為了提高性能指標;而在對兩個服務進行并列基準測試后,他們也可以有底氣的宣稱成功地顯著改善了所有指標。“我們希望能夠在使用更少資源的同時滿足更多請求,同時還可以改善我們用戶的響應時間,我相信他們會喜歡的。”
原文標題:用Go重寫Node.js服務:項目性能提升5倍,內存減少40%
文章出處:【微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
-
cpu
+關注
關注
68文章
10911瀏覽量
213144 -
RAM
+關注
關注
8文章
1369瀏覽量
115065 -
開源
+關注
關注
3文章
3412瀏覽量
42740 -
存儲服務
+關注
關注
0文章
20瀏覽量
5964
原文標題:用Go重寫Node.js服務:項目性能提升5倍,內存減少40%
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Bun 1.2震撼發布:全力挑戰Node.js生態的JavaScript運行時新星
![Bun 1.2震撼發布:全力挑戰<b class='flag-5'>Node.js</b>生態的JavaScript運行時新星](https://file1.elecfans.com/web3/M00/07/0E/wKgZPGeS_umAb70hAAANTY8XQWU210.jpg)
使用OpenVINO? ElectronJS中創建桌面應用程序
![使用OpenVINO? ElectronJS中創建桌面應用程序](https://file1.elecfans.com/web2/M00/0C/53/wKgZomdD8diACgTuAAAT4yibHbI490.png)
Node.js小科普和Node.js安裝常見管理工具
![<b class='flag-5'>Node.js</b>小科普和<b class='flag-5'>Node.js</b>安裝常見管理工具](https://file1.elecfans.com//web1/M00/F5/B1/wKgaoWdAW-uAMTp1AAEY6_6a3RI911.png)
前端技術探秘-Nodejs的CommonJS規范實現原理
![前端技術探秘-Nodejs的CommonJS規范實現原理](https://file1.elecfans.com/web2/M00/EB/95/wKgZomZevfiAZTUiAAAYyNC3ogI340.png)
用JS實現簡單的屏幕錄像機
工程師必備!Node.js和常見管理工具介紹(附操作演示)
![工程師必備!<b class='flag-5'>Node.js</b>和常見管理工具介紹(附操作演示)](https://file.elecfans.com/web2/M00/02/C4/pYYBAGDSzfeAP86XAAAO5PbqJbI698.png)
ARMxy ARM 物聯網邊緣計算網關支持 Node-RED 用于工業控制
![ARMxy ARM 物聯網邊緣計算網關支持 <b class='flag-5'>Node</b>-RED 用于工業控制](https://file1.elecfans.com/web2/M00/04/4A/wKgaombDCd2AAOXOAAQ_5bhIzWA681.png)
使用api調用espconn_connect時遇到的疑問求解
Node-RED初學者教程-三分鐘學習
![<b class='flag-5'>Node</b>-RED初學者教程-三分鐘學習](https://file1.elecfans.com/web2/M00/F3/A9/wKgZomZ9K8iAJEx9AAFuddar79s482.png)
Node-RED如何制作漂亮的界面
![<b class='flag-5'>Node</b>-RED如何制作漂亮的界面](https://file1.elecfans.com/web2/M00/F4/04/wKgaomZ71YeAEQ0MAA5JK3m3Ipw099.png)
請問ble_mesh的node和node之間是否要定義協議通訊?
Node-RED安裝本地教程
![<b class='flag-5'>Node</b>-RED安裝本地教程](https://file1.elecfans.com/web2/M00/F2/44/wKgZomZ48jSAYAspAAGqA7WBuU8775.png)
鴻蒙實戰開發-本地部署、SmartPerf 編譯部署指導文檔
鴻蒙開發實戰:網絡請求庫【axios】
![鴻蒙開發實戰:網絡請求庫【axios】](https://file1.elecfans.com/web2/M00/C5/93/wKgZomX-4hWAGTuRAWyFifjJjx8545.jpg)
評論