<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Go重寫Node.js服務(wù):項目性能提升5倍,內(nèi)存減少40%

          共 1936字,需瀏覽 4分鐘

           ·

          2022-05-31 19:05

          文 | 白開水
          出品 | OSC開源社區(qū)(ID:oschina2013)

          Hasura Storage 是一項開源服務(wù),在 hasura 和任何 s3 兼容的存儲服務(wù)之上增加了一個存儲服務(wù)。其目的是能夠利用云存儲服務(wù),同時也利用 hasura 的功能,如它的 graphql API、權(quán)限、行動、預(yù)設(shè)等。

          出于業(yè)務(wù)發(fā)展需求,Hasura Storage 團隊近期將其原本用 Node.js 編寫的服務(wù)用 Golang 進行了重寫?!斑@個用 Node.js 編寫的服務(wù)在相當(dāng)長的一段時間內(nèi)為我們提供了良好的服務(wù),但隨著公司的發(fā)展和用戶數(shù)量的大規(guī)模增加,性能開始成為一個問題。雖然 Node.js 可能有很多可取之處,但優(yōu)異的性能和可擴展性并不是其中之一?!?/span>

          Hasura Storage 方面表示,在使用?Golang?進行重寫后,其可處理的服務(wù)請求數(shù)增加了 5 倍,同時內(nèi)存消耗減半。根據(jù)介紹,他們選擇 Go 的原因在于:

          • 該語言的依賴性管理系統(tǒng)和構(gòu)建系統(tǒng)使其非常適合云
          • 團隊有豐富的 Golang 經(jīng)驗
          • 雖然 Go?是一種非常冗長的語言(尤其是與 Node.js 相比),但它非常易于學(xué)習(xí)且編寫速度快
          • 性能非常優(yōu)異

          重寫完成后,Hasura Storage 團隊針對 Node.js 和 Golang 版本的服務(wù)運行了一些基準(zhǔn)測試。使用了?k6?并設(shè)計了以下測試:?

          • 當(dāng)測試開始時,它會在前 10 秒內(nèi)將 workers 的數(shù)量從 1 增加到 TARGET
          • 然后再運行 60 秒才結(jié)束。
          • Workers?盡可能快地查詢服務(wù)
          • 運行以下測試:
            • download_small_file
            • download_medium_file
            • download_large_file
            • download_image
            • download_image_manipulated
          • CPU 被限制在整個系統(tǒng)的 10%
          • RAM 是無限的

          Hasura Storage 提前聲明稱,最終結(jié)果不應(yīng)該只看表面的數(shù)字;“用于基準(zhǔn)測試的系統(tǒng)的 CPU 容量非常有限,因為我們想對這兩種服務(wù)施加壓力并看看它們在壓力下的表現(xiàn)如何所以,我們感興趣的不是數(shù)字,而是兩個版本之間的差異?!?/span>

          測試結(jié)果表明,Hasura Storage?在每種情況下能夠處理的請求數(shù)都實現(xiàn)了大幅提升,其中較小的文件(5x)的效果更為顯著。

          同時在所有情況下都設(shè)法大大改善了 RAM 消耗,尤其是在下載大文件時。值得一提的是,這還是在提供了多達 5 倍的請求的前提下。

          另一個重要的指標(biāo)是響應(yīng)時間,Hasura Storage 提供了兩個數(shù)據(jù):最小響應(yīng)時間,開源告訴我們系統(tǒng)未承受壓力時的響應(yīng)時間;以及 P95,開源告訴我們大多數(shù)用戶的響應(yīng)時間最多是多少(包括當(dāng)系統(tǒng)處于壓力之下)。

          首先是最小響應(yīng)時間。測試用例?download_small_file 的結(jié)果不好從圖中目測,但?Hasura Storage 稱其將場景的響應(yīng)時間從 Node.js?用例的 29ms 提高到 Golang?用例的 7ms。除了在 download_image_manipulated 中實現(xiàn)了大約 2 倍的改進外,在其他場景中則均實現(xiàn)了 4 倍的改進。

          再是 P95。除 download_image_manipulated 和 download_large_file 外,大多數(shù)情況下都實現(xiàn)了 4 倍的改進。Hasura Storage 解釋稱,雖然沒有像其他情況那樣戲劇性,但這兩種情況下都有實質(zhì)性的改進?!斑@是合理的,因為下載大文件會受到 I/O NET 的約束,而處理圖像則會受到 CPU 的約束。但即使如此,我們也很高興看到這種實質(zhì)性的改進?!?/span>

          此外,圖像處理方面也有所改善。

          在服務(wù)被重寫和測試后,Hasura Storage 將服務(wù)部署到了生產(chǎn)環(huán)境,一些重寫的好處也開始展現(xiàn)。如下圖所示(集群的一個節(jié)點中的 RAM 使用情況),內(nèi)存占用減少了近 40%?!斑@是一項重大改進,可以讓我們在不增加整體基礎(chǔ)設(shè)施費用的情況下為更多用戶和流量提供服務(wù)?!?/span>

          Hasura Storage 方面表示,他們決定重寫服務(wù)是為了提高性能指標(biāo);而在對兩個服務(wù)進行并列基準(zhǔn)測試后,他們也可以有底氣的宣稱成功地顯著改善了所有指標(biāo)?!拔覀兿M軌蛟谑褂酶儋Y源的同時滿足更多請求,同時還可以改善我們用戶的響應(yīng)時間,我相信他們會喜歡的。”



          推薦閱讀


          福利

          我為大家整理了一份從入門到進階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進階看什么。關(guān)注公眾號 「polarisxu」,回復(fù)?ebook?獲??;還可以回復(fù)「進群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品无码白浆高潮 | 婷婷偷拍视频 | 在线男人天堂 | 最新成人网址 | 日韩黄色一级 |