gracehttp: 優雅重啟 Go 程式(暖開機)

來源:互聯網
上載者:User

問題背景

http 應用程式重啟時,如果直接 kill -9 使程式退出,然後在啟動,會有以下幾個問題:

  1. 舊的請求未處理完,如果服務端進程直接退出,會造成用戶端連結中斷(收到 RST);
  2. 新請求打過來,服務還沒重啟完畢,造成 connection refused

這些問題會造成不好的客戶體驗,嚴重的甚至影響客戶業務。所以,我們需要優雅的重啟我們的應用。

解決問題 -- 優雅

Github: gracehttp

原理

  1. 訊號機制;
  2. 子進程繼承父進程的資源;

支援功能

  1. 平滑重啟(Zero-Downtime restart server);
  2. 平滑關閉;
  3. Server 添加(包含 HTTPHTTPS);
  4. 自訂日誌組件;

使用指南

添加伺服器

    // http    srv1 := &http.Server{        Addr:    ":80",        Handler: sc,    }    gracehttp.AddServer(srv1, false, "", "")    // https    srv2 := &http.Server{        Addr:    ":443",        Handler: sc,    }    gracehttp.AddServer(srv2, true, "../config/https.crt", "../config/https.key")    gracehttp.Run() // 此方法會阻塞,直到所有的 HTTP 服務退出

如上所示,只需建立好 Server 對象,調用 gracehttp.AddServer 添加即可。

添加自訂日誌組件

    gracehttp.SetErrorLogCallback(logger.LogConfigLoadError)

此處提供了三個 Set* 方法,分別對應不同的日誌等級:

  • SetInfoLogCallback
  • SetNoticeLogCallback
  • SetErrorLogCallback
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.