graceful的实践

使用endless库来实现,比如接入gin:

r := gin.Default()
r.GET("/", index)
endless.ListenAndServe(":3000", r)

我们编写一个带指定时间超时的处理函数:

func index(c *gin.Context) {
duration := c.Query("duration")
durationInt, _ := strconv.Atoi(duration)
time.Sleep(time.Duration(durationInt) * time.Second)
c.String(http.StatusOK, duration)
}
curl http://localhost:3000/?duration=10

测试时使用CTRL+C时候,会处理完所有请求才会退出;如果是后台运行,当我们获取进程的pid后,如果使用kill -9 $PID, endless无法catch信这个信号,需要使用kill -s TERM $PID

利用nginx upstream负载

nignx的简单配置:

upstream graceful{
server 127.0.0.1:;
server 127.0.0.1:;
} server {
listen ;
server_name localhost; location ^~ /{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header http_referer $http_referer;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://graceful/;
proxy_redirect default;
} error_page /50x.html;
location = /50x.html {
root html;
} location ~ /\..+ {
deny all;
}
}

作一个较为简单的负载均衡,在更新程序的时候顺序更新,当其实一个服务不再提供时,负载导到另外一台,顺序更新后,可满足服务热更新的需求,当然最好使用专门的部署脚本来实现。

如何做到Zero Downtime重启Go服务?的更多相关文章

  1. 如何解决audiodg占用内存高(停止与重启audiodg服务)

    window7电脑audiodg.exe进程占用内存很高 首先想到的办法是结束该进程,于是在任务管理器里结束进程后,内存是释放了,但是发现发现电脑没有声音 去到电脑的system32目录下双击audi ...

  2. Centos修改DNS重启或者重启network服务后丢失问题处理

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 起因 处理 GitHub 本文版 ...

  3. Linux每天定时重启Tomcat服务

    1:查看crond 服务状态(确认Linux任务计划服务开启) service crond status crond (pid  1937) is running... 2:编写重启Tomcat的sh ...

  4. bat文件重启SQL服务和IIS服务

    sqlserver有自动备份功能,所以要重启两个服务器,下面是重启脚本,脚本名称:sql_restart.bat    net stop sqlserveragent net stop mssqlse ...

  5. centos7重启rsyslog服务|centos7重启syslog服务

    centos7重启rsyslog服务: systemctl restart rsyslog 使用:(killall无效) killall -HUP rsyslog

  6. C# 代码重启windows服务

    ServiceController service = new ServiceController("EnergyRecordService"); protected void b ...

  7. 远程重启IIS服务

    方法一: $UserName = "administrator" $serverpass = "pass" $server = "10.4.19.60 ...

  8. 重启adb服务

    通过命令提示符的方式来重启ADB服务的步骤如下: 1.输入adb kill-server并按下Enter键. 2.输入adb start-server并按下Enter键. 这样将会顺利地关闭ADB服务 ...

  9. Linux修改SSH连接数 重启SSH服务

    系统 linux,增加SSH终端连接数最大为1000个 解决方案: vi /etc/ssh/sshd_config 输入/MaxStartups 定位到如下并修改 1)        #MaxStar ...

随机推荐

  1. 浏览器兼容问题 chrome iframe location href

    报了个错 var dt2=new Date(d2Arr[0],d2Arr[1],d2Arr[2]); if(dt1>dt2){//比较日期 alert("开始日期不能晚于结束日期!&q ...

  2. DBNull.value

    判断某一个datarow的cell是否有值需要进行两步判断 1.dr["field_name"]!=DBNull.value&&dr["field_nam ...

  3. Unity3d之流光效果

    所谓流光效果,如一个图片上一条刀光从左闪到右边,以下为实现代码: c#代码: using System; using UnityEngine; public class WalkLightEffect ...

  4. iOS常用的第三方库GitHub地址

    MJRefresh https://github.com/CoderMJLee/MJRefresh#期待 Facebook-POP https://github.com/facebook/pop /* ...

  5. python实现断点续传下载文件

    最近的任务里有一个功能是要我从日志服务器实时跟新日志到本地,日志在不断新增内容就需要我隔一段时间从上次下载的位置继续下载,并写入本地文件上次写完的位置后面. headers = {'Range': ' ...

  6. Servlet_ResponseHeader

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  7. problem 202,263、232、21、231

    [263]Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...

  8. 动态添加试题选项按钮 radioButton(一)

    最近在做WebView加载试题的功能,但是选项按钮如果放的WebView中,点击时反应很慢.于是把选项用原生的RadioButton,而试题题目和答案放在WebView中.但是选项的个数不确定,所以需 ...

  9. keystore 介绍

    Keytool 是一个有效的安全钥匙和证书的管理工具. Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存 ...

  10. Linux之目录基本操作命令

    Linux之目录基本操作命令 目录基本操作命令 1.tree命令 tree命令以树状图列出目录的内容. 语法 tree(选项)(参数) 选项 1.-a显示所有文件和目录 2.-A使用ASNI绘图字符显 ...