成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Golang HTTP 服務(wù)平滑重啟及升級的思路

Golang HTTP 服務(wù)平滑重啟及升級的思路

熱門標(biāo)簽:澳門防封電銷卡 烏魯木齊人工電銷機器人系統(tǒng) 長沙ai機器人電銷 地圖標(biāo)注測試 智能電銷機器人營銷 賺地圖標(biāo)注的錢犯法嗎 廣東語音外呼系統(tǒng)供應(yīng)商 濮陽自動外呼系統(tǒng)代理 福州鐵通自動外呼系統(tǒng)

Golang HTTP服務(wù)在上線時,需要重新編譯可執(zhí)行文件,關(guān)閉正在運行的進(jìn)程,然后再啟動新的運行進(jìn)程。對于訪問頻率比較高的面向終端用戶的產(chǎn)品,關(guān)閉、重啟的過程中會出現(xiàn)無法訪問(nginx表現(xiàn)為502)的情況,影響終端用戶的使用體驗。

實現(xiàn)的一般思路

  • 一般情況下,要實現(xiàn)平滑重啟或升級,需要執(zhí)行以下幾個步驟:
  • 發(fā)布新的bin文件覆蓋老的bin文件
  • 發(fā)送一個信號量(USR2),告訴正在運行的進(jìn)程,進(jìn)行重啟
  • 正在運行的進(jìn)程接受到信號后,以子進(jìn)程的方式啟動新的bin文件
  • 新進(jìn)程接收并處理新的請求
  • 老進(jìn)程不再接收新請求,等待所有正在處理的請求處理完成后自動退出
  • 新進(jìn)程在老進(jìn)程退出后,繼續(xù)提供服務(wù)

選型與實踐

重復(fù)造平滑重啟及升級的輪子比較簡單,但測試覆蓋無法控制,比較耗時耗力。所以秉著不重復(fù)造輪子的思路,使用github中的三方庫進(jìn)行選擇:

  • facebookgo/grace
  • fvbock/endless
  • jpillora/overseer

endless與grace的實現(xiàn)方式原理都比較類似,所以在選型初期我們以facebookgo/grace庫為例集成到項目中進(jìn)行測試:

func (h *Server) ListenAndServe(listenAddress string) error {
 // ....
 return gracehttp.Serve(http.Server{
 Addr: listenAddress,
 Handler: h.httpServerMux,
 })
}

使用ab工具壓測 api-publish服務(wù)進(jìn)行測試,服務(wù)啟動后,執(zhí)行以下命令:

ab -c 10 -n 2000 http://127.0.0.1:38272/api/list

然后給進(jìn)程發(fā)送USR2信號 kill -USR2 api-server-pid,可看到以下結(jié)果:

結(jié)果中 Failed requests表示在整個壓測請求中沒有錯誤的請求,這可以說明服務(wù)重啟時沒有中斷請求的接收和處理。如果使用sleep的方式測試,可以明顯的看到新進(jìn)程替代老進(jìn)程的過程。

supervisor的問題

實際項目中,線上服務(wù)是被supervisor啟動的。如上所說的我們?nèi)绻ㄟ^grace或者endless的子進(jìn)程啟動后退出父進(jìn)程這種方式的話,存在的問題就是子進(jìn)程會被1號進(jìn)程接管,導(dǎo)致supervisor認(rèn)為服務(wù)掛掉重啟服務(wù),為了避免這種問題我們需要使用master-worker的方式。

overseer這個備選庫實現(xiàn)了master-worker的方式。簡單集成方式:

return overseer.RunErr(overseer.Config{
 Address: address,
 Program: func(state overseer.State) {
 // ...
 http.Serve(state.Listener, nil)
 },
})

另外:在更新supervisor時,配置不需要更新,但重啟服務(wù)的命令不能使用supervisor restart,需要使用supervisor signal sigusr2 api的命令。

還是使用上面的測試方式:

可以明顯的看到,supervisor發(fā)送了USR2信號后,主進(jìn)程的pid沒有變化,重新啟動了一個新的子進(jìn)程來處理線上請求。

其他的問題

在使用overseer集成到項目中測試時,子進(jìn)程的運行函數(shù)中僅僅加入了http服務(wù)的啟動,這樣導(dǎo)致一個問題。

main函數(shù)中任務(wù)會被執(zhí)行兩次,如果是cron的初始化,那么cron就會初始化兩次,導(dǎo)致有兩個cron在執(zhí)行,這樣的方式是不符合預(yù)期的。

導(dǎo)致這樣的原因是:overseer在啟動子進(jìn)程時是使用和主進(jìn)程一樣的啟動命令。所以main函數(shù)會執(zhí)行兩次。

func (mp *master) fork() error {
 mp.debugf("starting %s", mp.binPath)
 cmd := exec.Command(mp.binPath)
 //mark this new process as the "active" slave process.
 //this process is assumed to be holding the socket files.
 mp.slaveCmd = cmd
 mp.slaveID++
 //provide the slave process with some state
 e := os.Environ()
 e = append(e, envBinID+"="+hex.EncodeToString(mp.binHash))
 e = append(e, envBinPath+"="+mp.binPath)
 e = append(e, envSlaveID+"="+strconv.Itoa(mp.slaveID))
 e = append(e, envIsSlave+"=1")
 e = append(e, envNumFDs+"="+strconv.Itoa(len(mp.slaveExtraFiles)))
 cmd.Env = e
 //inherit master args/stdfiles
 cmd.Args = os.Args
 cmd.Stdin = os.Stdin
 cmd.Stdout = os.Stdout
 cmd.Stderr = os.Stderr
 //include socket files
 cmd.ExtraFiles = mp.slaveExtraFiles
 if err := cmd.Start(); err != nil {
 return fmt.Errorf("Failed to start slave process: %s", err)
 }
 // ...
}

我們通過調(diào)整main函數(shù)的內(nèi)容來解決這個問題:

  • 將之前所有的初始化內(nèi)容集成在initialization函數(shù)中
  • 將http初始化的內(nèi)容集成在httpServer函數(shù)中,返回一個http.Server
func main() {
 // 配置初始化
 if err := config.Init(appConf); err != nil {
 fmt.Println(err)
 return
 }
 cfg := config.GetConfig()

 // 初始化graceful http服務(wù)
 gracefulHTTPServer := microsvr.GracefulHTTPServer{
 Address: cfg.HTTPListenAddress,
 Conf:  cfg,
 Initialization: initialization,
 HttpServer: httpServer,
 }

 // 啟動
 if err := gracefulHTTPServer.Run(); err != nil {
 fmt.Println(err)
 return
 }
}

// 初始化日志、數(shù)據(jù)庫鏈接、定時任務(wù)等
func initialization(cfg *config.Conf) {
 if err := microsvr.Init(cfg); err != nil {
 fmt.Println(err)
 return
 }

 if err := server.AddConnect(cfg.Databases.String()); err != nil {
 fmt.Println(err)
 return
 }
 logger.Info("數(shù)據(jù)庫鏈接成功:" + cfg.Databases.Address)
 // cron
 cron.Cron.Init()
}

// 初始化http服務(wù),但不啟動
func httpServer() *http.Server {
 server := microsvr.NewHTTPServer()
 server.SetAllowOrginBack()
 Routers(server)
 return server
}

實踐對比結(jié)果:

  • grace與endless:舊的api都不會斷掉,會執(zhí)行原來的邏輯,但pid會變化;不支持supervisor管理
  • overseer:舊api不會斷掉,會執(zhí)行原來的邏輯,主進(jìn)程pid也不會變化,支持supervisor、systemd等管理

grace與endless的原理比較相像,都是類似上述的一般思路的實現(xiàn)原理。overseer的不同,主要有兩點:

  • 添加了fetcher:用來支持自動升級bin文件,fetcher運行在一個goroutine中,通過預(yù)先設(shè)置好的間隔時間來檢查bin文件;支持File、Github、S3的方式
  • 添加了主進(jìn)程管理平滑重啟:子進(jìn)程處理鏈接,能夠保持主進(jìn)程pid不變

我們使用了overseer作為最終的選型結(jié)果。

總結(jié)

到此這篇關(guān)于Golang HTTP 服務(wù)平滑重啟及升級的思路的文章就介紹到這了,更多相關(guān)golang http 平滑重啟內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • golang實現(xiàn)http服務(wù)器處理靜態(tài)文件示例
  • golang的HTTP基本認(rèn)證機制實例詳解
  • golang設(shè)置http response響應(yīng)頭與填坑記錄
  • 詳解Golang實現(xiàn)http重定向https的方式
  • golang的httpserver優(yōu)雅重啟方法詳解
  • 淺談golang的http cookie用法
  • Golang學(xué)習(xí)之平滑重啟

標(biāo)簽:阿克蘇 西雙版納 慶陽 太原 廣西 德州 調(diào)研邀請 貴陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang HTTP 服務(wù)平滑重啟及升級的思路》,本文關(guān)鍵詞  Golang,HTTP,服務(wù),平滑,重啟,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang HTTP 服務(wù)平滑重啟及升級的思路》相關(guān)的同類信息!
  • 本頁收集關(guān)于Golang HTTP 服務(wù)平滑重啟及升級的思路的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美精品一区二区三区久久| v天堂中文在线| 91精品婷婷色在线观看| 导航福利在线| 亚洲精品久久久蜜桃动漫| www.99re7.com| 最近中文字幕mv免费高清电影| 男女爱爱网站| 午夜爱爱毛片xxxx视频免费看| 亚洲制服欧美久久| 美女欧美视频在线观看免费| 午夜精品久久久久影视| 青青草原免费观看| 在线播放中文字幕| 亚洲中无吗在线| 动漫av网站免费观看| 国产视频久久网| 久久久国际精品| japanese在线| 搡老岳熟女国产熟妇| 亚洲成人毛片| 人妻精品一区一区三区蜜桃91| 激情综合网五月天| www婷婷av久久久影片| 看全色黄大色黄大片免责看的| 黄色小视频在线免费观看| 黄瓜视频在线免费观看| 久热综合在线亚洲精品| 欧美精品在线观看播放| 91蜜桃视频在线| 中文字幕第22页| 一区二区三区中文字幕精品精品| 91超碰在线| 大菠萝精品导航| 精品久久久久久亚洲综合网| 天天爱天天做天天操| 亚洲国产精品久久久| 青青青视频在线| 久久综合精品视频| 最近最新中文字幕在线| 亚洲日本电影| 国产传媒在线视频| 亚洲精品一级二级三级| 91蝌蚪porny九色| 日韩精品一卡二卡| 国产91丝袜在线播放0| 亚洲综合精品| a优女a优女片| 欧美丰满美乳xxx高潮www| 国产精品爽爽爽爽爽爽在线观看| 97人人模人人爽人人喊38tv| 久久久久亚洲无码| 国产又粗又黄又爽的视频| www.国产视频.com| 成人有码在线视频| 日本不良网站在线观看| 国产乱论精品| 久久噜噜亚洲综合| 六月婷婷激情网| 男男受被啪到高潮自述| 欧美舌奴丨vk视频| 日本在线观看a| 亚洲一区在线日韩在线深爱| 88久久精品无码一区二区毛片| 国产免费一区二区三区四在线播放| 91在线观看免费观看| 一道精品一区二区三区| 天堂午夜影视日韩欧美一区二区| 最新亚洲一区| 久久综合电影一区| 成人黄色生活片| 久久久久麻豆v国产精华液好用吗| 国产在视频线精品视频www666| 国产一区二区不卡老阿姨| 国产乱国产乱老熟| 国产一区二区网址| 91激情在线视频| 亚洲综合在线小说| 麻豆国产高清在线播放| 欧美成人一区二免费视频软件| 日韩三级视频| 国风产精品一区二区| 99精品在线直播| 又黄又爽的网站| 天堂av在线免费| 亚洲婷婷国产精品电影人久久| 最新av网址在线观看| h片在线观看网站| 一区二区视频在线观看| 国内精品免费**视频| 国产白嫩美女无套久久| 久久综合第一页| 在线观看亚洲国产| 久久精品免视着国产成人| 亚洲欧美日韩一二三区| 99久久精品无码一区二区毛片| 国内露脸中年夫妇交换精品| 久久久久久国产精品免费播放| 欧美国产日韩在线播放| 免费一级欧美片在线播放| 久草视频手机在线| 天堂中文最新版在线中文| 特黄视频免费观看| www.丝袜精品| www亚洲天堂| 久99九色视频在线观看| 日韩成人动漫在线观看| 日本黄色女人| 2019亚洲男人天堂| 午夜精品一区二区三区四区| 欧美人妖视频| 大荫蒂欧美视频另类xxxx| 成年人小视频在线观看| 日本一区视频在线播放| 欧美偷拍自拍| 欧美老女人第四色| 久久精品一区| 91麻豆精品国产91久久久使用方法| 久久综合一区二区三区| 亚洲成av人影院在线观看网| 免费在线观看国产黄| 亚洲男人天堂古典| 国产精品制服诱惑| 国产特黄级aaaaa片免| 国产精品无码一区二区三区| 欧美老女人第四色| 国产精品一二三产区| 亚瑟在线精品视频| 国产精品视频中文字幕| 久久 天天综合| 亚洲av毛片成人精品| 日本成人黄色片| 国产性xxxx高清| 亚洲欧美一区二区在线观看| 欧美日韩国产精品综合| 四虎影视网站| 91麻豆福利精品推荐| 人xxxx性xxxxx欧美| 中文字幕永久在线视频| 麻豆精品国产传媒av| 特大黑人娇小亚洲女mp4| 国产精品亚洲不卡a| 678五月天丁香亚洲综合网| 国产一级二级三级视频| 在线观看免费一区| 精品在线观看视频| 不卡伊人av在线播放| 毛片在线免费播放| 亚洲日韩中文字幕在线播放| 人人精品亚洲| 日韩天堂在线观看| hd国产人妖ts另类视频| 欧美激情亚洲综合一区| 欧美国产日韩a欧美在线观看| 久久久久综合| 国产日韩欧美精品在线| 北条麻妃av毛片免费观看| 欧美—级a级欧美特级ar全黄| 亚洲一区二区乱码| 国产区一区二区三区| 无码国产69精品久久久久网站| 婷婷久久免费视频| a级黄色小视频| 亚洲国内高清视频| 亚洲一卡二卡三卡四卡五卡| av在线国产精品| 乱亲女h秽乱长久久久| 91综合久久爱com| 99国产欧美另类久久久精品| 欧美精选视频在线观看| 亚洲天堂成人在线| 精品不卡一区| 日日夜夜一区二区| 日韩一区二区三区中文字幕| 欧美日韩网站| 亚洲日韩中文字幕一区| 亚洲少妇激情视频| 老司机免费视频一区二区| 国产男女裸体做爰爽爽| 91精品二区| 国产一级不卡视频| 天天干人人干| 欧美激情精品久久久久久大尺度| 亚洲日本韩国一区| 91av国产精品| 九九99玖玖| 日韩电影免费一区| 亚洲aⅴ男人的天堂在线观看| 色网站免费在线观看| 日韩国产亚洲欧美| 区一区二日本| 中文字幕成人网| c++连点器| 欧美日韩国产在线观看网站| 国产视频一区二区三区四区| 亚洲一区二区国产| 久久国产综合视频| 日本wwwwwwwzzzzz视频| 亚洲精华国产精华| 国产嫩bbwbbw高潮| 亚洲一级免费观看| 精品视频一区二区三区四区| 欧美成人基地| 羞羞视频在线观看不卡| 在线观看日本网站| 免费在线一区二区三区| 亚洲高清黄色| 九九热精品在线| 三级无遮挡在线观看| 精品国产免费久久久久久尖叫| 欧美日韩性生活视频| www.久久成人| 中文字字幕在线中文乱码电影| 在线综合视频| 午夜激情在线播放| av电影在线观看| 色猫视频免费观看| 国产一区高清视频| 日本特黄a级片| 国产美女在线精品免费观看| 91免费国产视频| 久久精品国产**网站演员| 亚洲国产视频二区| 2019年精品视频自拍| 99热在线观看免费精品| 精品少妇一区| 欧美日韩综合视频网址| 91久久国产综合久久91精品网站| 欧美性大战久久久久久久蜜臀| 久久久久亚洲av成人片| 国产精品久久一区主播| 国产中文字幕第一页| 超薄肉色丝袜脚交一区二区| 蜜桃精品在线| 这里只有精品电影| 韩国成人精品a∨在线观看| 999福利视频| 国产精品视频白浆免费视频| 男人天堂av网| 国产激情精品久久久第一区二区| 中文字幕jux大岛优香| 久久精品中文| 精品一区二区三区蜜桃在线| 亚洲电影免费观看高清| 91久久国产综合| 福利一区二区| 国产精品伦一区二区三级视频| 成人免费看片| 色婷婷久久综合| 欧美精品激情在线| xxxxx.日韩| 91福利国产精品| 日本一级片免费看| 一道精品一区二区三区| 青青草视频国产| 国产日韩欧美精品一区| 18av视频| 久久久久亚洲| 国产精品欧美综合亚洲| 成人在线视频一区二区| 超碰在线免费观看97| 青青草免费观看免费视频在线| 日韩特级毛片| 羞羞视频网站| 亚洲大片av| 伊人av在线| 欧美一区1区三区3区公司| 欧美精品tushy高清| 欧美成人午夜视频| 精品国产电影一区| 久久久久免费精品| av中文字幕在线免费观看| 91蜜桃网址入口| 成人午夜电影在线播放| 亚洲成人久久一区| 女同激情久久av久久| 精品国产91乱高清在线观看| 国产尤物av一区二区三区| 亚洲精品91美女久久久久久久| 国产第一页在线观看| 国产在线精品国自产拍免费| 一级黄色av| 亚洲天堂免费电影| 日韩av卡一卡二| 国模私拍在线观看| 新版中文字幕在线资源| 国产精品久久综合青草亚洲AV| 一本久久综合亚洲鲁鲁五月天| 成人一区视频| 亚洲高清av在线| 欧美一级日本a级v片| 91av日本| 亚洲第一二区| 欧美激情99| 欧美α欧美αv大片| 杨幂一区二区国产精品| 91tv官网精品成人亚洲| 男人影院在线观看| 亚洲男人的天堂一区二区| 天天干天天舔天天操| 成品网站w灬+源码1688网页| 欧美国产精品va在线观看| 中文字幕成人在线视频| 亚洲国产一区自拍| 五月天婷婷综合| 中文字幕视频免费在线观看| 97欧美成人| 美丽的姑娘在线观看免费动漫| 97影院手机在线观看| 久久久久久国产精品美女| av资源新版天堂在线| 亚洲同志男男gay1069网站| 中文字幕在线播放av| 婷婷色综合网| 亚洲精品国产一区二区| 99热免费精品在线观看| 欧美日韩激情在线| 国产精品美女午夜爽爽| 夜夜嗨av禁果av粉嫩avhd| 中文国产成人精品| 蜜臀av一区二区| 欧美日韩国产一级| 午夜天堂在线观看| 欧美亚洲国产一卡| 亚洲天堂网在线播放| 亚洲欧美视频在线观看| 日韩免费一区二区三区在线播放| 不卡中文字幕在线观看|