想使用php調用golang的grpc服務進行通信,但是怕在上線后 進行程序的修改,想在不停機的情況下進行修改程序,想知道golang的grpc服務如何進行熱重啟
4 回答

莫回無
TA貢獻1865條經驗 獲得超7個贊
一般后端服務會有冗余部署,前端通過 elb 中間層訪問,或者使用 consul 之類的服務注冊發現機制,串行重啟或者分批次重啟,可以做到不停服
熱重啟這種基本上沒有吧,但是可以不重啟,把把變化的項做成配置文件,熱加載配置文件是可行的

呼如林
TA貢獻1798條經驗 獲得超3個贊
其實你是擔心直接重啟服務, 會有處理到一半的請求被中斷了, 導致尷尬的局面.
你要的并不是熱重啟, 而是優雅關閉.
grpc框架支持優雅關閉的.
基本原理是, 你監聽一個信號, 收到信號時調用grpc的GracefulStop接口, 這時grpc會首先關閉對外監聽的fd, 這時就不會有新的請求進來. 而已經在處理的請求則會繼續處理完, 然后再關閉服務.
在grpc關閉對外監聽的fd后的那個瞬間, 你其實可以啟動你的新程序了, 所以基本上中斷時間很短, 而原來處理著的請求并不會有問題.

阿晨1998
TA貢獻2037條經驗 獲得超6個贊
熱重啟原理,基本就是 弄個類似runtime的全局的變量組,把平時運行時的常量、加載的東西全部掛到這個上面,然后重啟時候收到信號,對這個變量組的值,進行克隆,舊的上面關,新的上面開。該關閉重開的重開,該重新加載的加載。
- 4 回答
- 0 關注
- 1213 瀏覽
添加回答
舉報
0/150
提交
取消