精华内容
下载资源
问答
  • 生产服务器的缺陷往往需要进行紧急更新,即使是多节点部署也避免了需要重新启动服务器,使新的逻辑代码更新,所以不停机更新文件显得至关重要,今天介绍一下使用阿里的arthas实现不停机更新文件。 大致思路:我们...

    背景

    生产服务器的缺陷往往需要进行紧急更新,即使是多节点部署也避免不了需要重新启动服务器,使新的逻辑代码更新,所以不停机更新文件显得至关重要,今天介绍一下使用阿里的arthas实现不停机更新文件。

    大致思路:我们都知道class文件的加载都是依附于类加载器的,所以我们要做的就是让原本的类加载器重新去加载类文件,这样就可以实现不重启服务器更新应用。而arthas做的就是面向jvm,拿到指定的累加器和待更新的class编译文件,剩下的交给arthas就可以了。

    测试前的demo应用返回值:
    在这里插入图片描述

    下载安装

    • 下载
    curl -O https://alibaba.github.io/arthas/arthas-boot.jar
    
    • 安装启动
    java -jar arthas-boot.jar
    
    • 选择对应的应用程序
      输入序号或者进程号即可

    查询需要替换的文件的类加载器

    • 查询指定类的信息
     sc -d *UserController
    

    sc为search class的简写,-d参数表示输出当前类的详细信息,详细信息如下:
    在这里插入图片描述

    • 查询指定类的类加载器
      如上图所示,class-loader参数即为类加载器的信息,还可以使用grep进行查询过滤
    sc -d *UserController | grep class-loader
    

    在这里插入图片描述

    我们要的就是类加载器的hash值,用于后面class文件加载指定

    加载指定的class文件

    • 将修改后的文件上传至服务器
    • 指定上述的类加载器去加载新的class文件
    redefine -c 33909752 /root/secKill/UserController.class
    

    当返回success时,即为替换成功。
    查询验证即可
    在这里插入图片描述

    附:在线修改class文件

    • 使用jad命令对指定class文件进行反编译,并指定生产的java文件路径
    jad --source-only  com.imooc.miaoshaproject.controller.UserController > /root/secKill/decompile/UserController.java
    
    • 使用vim修改对应的java文件
    • 编译最后的java文件,并指定class文件路径
    mc -c 33909752 /root/secKill/decompile/UserController.java -d /root/secKill/compile/
    

    此时,对应的文件夹下面就会生成一个class文件

    • 重新加载class文件
    redefine  /root/secKill/compile/UserController .class
    

    此时不需要再次指定类加载器类了,因为上一步已经使用指定的加载器完成编译操作,只需要重新加载class文件即可

    注意

    当然了,Arthas虽然功能强大,但也不是万金油

    1、不能增加或删除field/method
    2、没有退出的函数不能生效,比如一个函数体内是一个where(true)循环,永远不会结束,那么我们修改的代码也永远不会生效。

    更多命令和高阶用法,可以参考官方文档,友情链接一下

    展开全文
  • HIS优雅不停机更新

    2019-01-25 20:14:34
    发布版本是,先启动新版本,然后将用户请求指向新版本服务,再停掉旧版本服务;
  • nginx实现不停机更新

    千次阅读 2017-08-31 12:36:43
    最近在项目测试阶段遇到一个问题,在修改BUG后,更新代码后要经常性的重启服务器,后来发现NIGNX有这个功能,实现不停机更新。 总结了一下大概需要4步。 第一步:需要安装NIGNX,安装后的目录如下。 第二步:项目...

    最近在项目测试阶段遇到一个问题,在修改BUG后,更新代码后要经常性的重启服务器,后来发现NIGNX有这个功能,实现不停机更新。

    总结了一下大概需要6步。

    第一步:需要安装NIGNX,安装后的目录如下。


    第二步:项目打jar包,这里需要注意的是你的端口不能与外部访问的端口一致,不然会导致端口冲突。




    第三步:我们需要创建一个文件夹来存放我们刚才项目打的jar包,然后需要写两个脚本,方便运行jar包项目。这里我说下,我们写两个脚本的原因是为了到时候jar包的切换,我这里创建的文件叫selle,然后在里面创建一个boot文件夹,里面就是放我们的脚本,外面就放我们的jar包。



    pushd E:\seller
    Java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar shop81.jar

    第四步:我们先要运行jar包,上面的shop82,直接双击boot里面的boot82就可以了,看到如下界面就算启好了

    第五步:配置nignx的配置文件,

    第六步:这时候我们启动nignx就可以了,

    比如我们在该了BUG后或者添加新功能后,只需要重新打一个jar包例如端口为8081的jar包放到selle里面然后启动81jar包启好后再去更改nginx配置把转发端口改为8081重启nginx就可以了,然后访问8080就是转发到8081的端口了。他们测试的或者用户是不会感觉到服务器重启过。



    展开全文
  • 文章目录Web服务不停机更新和灰度发布方案当前情况方案一 负载均衡:问题:方案二 灰度发布:用IF指令实现根据来源ip做判断根据cookie做判断使用lua写脚本实现使用nginx+lua实现web项目的灰度发布 Web服务不停机更新...

    Web服务不停机更新和灰度发布方案

    当前情况

    Web服务需要改造成使用jwt登陆访问。因此可以使用nginx进行不停机更新。

    方案一 负载均衡:

    image-20210326170212473

    将新版本另起一个端口,nginx中配置负载均衡,并反向代理到新旧两个服务。若新服务功能正常,则可关闭旧版本,只使用新版本。

    配置如图:

    http {  
        upstream cluster {  
            server 192.168.1.210:80 weight=5;  
            server 192.168.1.211:80 weight=3;  
            server 192.168.1.212:80 weight=1;  
        }  
       
        server {  
          listen 80;  
      
          location / {  
            proxy_pass http://cluster;  
          }  
        }  
    }  
    

    问题:

    怎么判断 新服务功能正常

    一个可行的解决方案是 特定的测试人员测试新版本的功能,确认功能无误后,关闭旧版本启用新版本。这就涉及到灰度发布了。

    方案二 灰度发布:

    image-20210326172703312

    使用nginx进行灰度发布。

    我们可在nginx上根据请求来源ip或者cookie来判断当前请求是否来自测试人员,若判断为测试人员,则将请求直接导向至新服务。

    用IF指令实现

    https://www.jianshu.com/p/e89ad8748764

    两台服务器分别定义为:

    hilinux_01  192.168.1.100:8080
    hilinux_02  192.168.1.200:8080
    

    根据来源ip做判断

    upstream hilinux_01 {
        server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
    }
    
    upstream hilinux_02 {
        server 192.168.1.200:8080 max_fails=1 fail_timeout=60;
    }
    
    upstream default {
        server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
    }
    
    server {
      listen 80;
      server_name  www.hi-linux.com;
      access_log  logs/www.hi-linux.com.log  main;
    
      set $group default;
      if ($remote_addr ~ "211.118.119.11") {
          set $group hilinux_02;
      }
    
     location / {                       
        proxy_pass http://$group;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        index  index.html index.htm;
      }
    }
    

    根据cookie做判断

    upstream hilinux_01 {
        server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
    }
    
    upstream hilinux_02 {
        server 192.168.1.200:8080 max_fails=1 fail_timeout=60;
    }
    
    upstream default {
        server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
    }
    
    server {
      listen 80;
      server_name  www.akhack.com;
      access_log  logs/www.akhack.com.log  main;
    
      #match cookie
      set $group "default";
        if ($http_cookie ~* "version=V1"){
            set $group hilinux_01;
        }
    
        if ($http_cookie ~* "version=V2"){
            set $group hilinux_02;
        }
    
      location / {                       
        proxy_pass http://$group;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        index  index.html index.htm;
      }
     }
    

    使用lua写脚本实现

    参考: https://my.oschina.net/ososchina/blog/905378

    使用nginx+lua实现web项目的灰度发布

    location / {
    	content_by_lua '
                myIP = ngx.req.get_headers()["X-Real-IP"]
                if myIP == nil then
                    myIP = ngx.req.get_headers()["x_forwarded_for"]
                end
                if myIP == nil then
                    myIP = ngx.var.remote_addr
                end
                if myIP == "公司出口IP" then
                    ngx.exec("@client")
                else
                    ngx.exec("@client_test")
                end
            ';
    } 
    
    location @client{
        proxy_next_upstream     error timeout;
        proxy_redirect          off;
        proxy_set_header        Host $host;
        #proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Real-IP $http_x_forwarded_for;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size    100m;
        client_body_buffer_size 256k;
        proxy_connect_timeout   180;
        proxy_send_timeout      180;
        proxy_read_timeout      180;
        proxy_buffer_size       8k;
        proxy_buffers           8 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
        proxy_pass http://client;
    
    }
    location @client_test{
        proxy_next_upstream     error timeout;
        proxy_redirect          off;
        proxy_set_header        Host $host;
        #proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Real-IP $http_x_forwarded_for;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size    100m;
        client_body_buffer_size 256k;
        proxy_connect_timeout   180;
        proxy_send_timeout      180;
        proxy_read_timeout      180;
        proxy_buffer_size       8k;
        proxy_buffers           8 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
        proxy_pass http://client_test;
    } 
    

    由于使用了nginx+lua模块,这种方式适合很多场景,非常强大,但是问题是你可能需要学习很多lua的语法。

    展开全文
  • 游戏无论是PC端还是手机端...一个游戏想要不断的吸引玩家流量,就必须得做到不断的更新升级了,但频繁的更新停机会造成一定的客户流失率的增加,因为停机更新期间意味着玩家将无法继续登录游戏娱乐。特别是竞技类游...

    游戏无论是PC端还是手机端的经常会遇到游戏更新升级等问题,对于王者荣耀、吃鸡等大型游戏,目前玩家在使用过程中,虽然看到游戏官方发出更新升级通告,但不会存在停机的问题。那么部分游戏运营商们就不明白了,为什么可以做到不停机的更新呢?

    一个游戏想要不断的吸引玩家流量,就必须得做到不断的更新升级了,但频繁的更新停机会造成一定的客户流失率的增加,因为停机更新期间意味着玩家将无法继续登录游戏娱乐。特别是竞技类游戏,明明就快成功了,BOOS就要倒下了。突然一下停机更新,估计玩家是很难接受的。接下来小盟将为大家解答,如何让游戏做到不停机更新。

    一般游戏数据需要放在服务器上时,此时服务器是必须有至少两台以上的主机的,也会附加有逻辑主机与多台分布式数据库情况。如果在其中的逻辑主机上发现了一些小的问题和漏洞,可以直接上传覆盖执行文件的形式解决,重启逻辑服务器的进程这种操作,客户端基本上是感觉不到什么的。这种操作一般叫做不停机的维护。

    但如果问题的根源在于服务器所在的机房出现问题,主机受到影响,需要新增一台主机重新搭建运行环境的话,涉及需要更改DNS的情况下,客户是绝对连不上的。

    但是小盟建议大家,如果一旦涉及到维护升级,尽量选择在游戏玩家较少的时间段进行,挑选专业的维护人员,做好维护升级方案后在进行维护升级,降低游戏停机的几率。同时在选择游戏类高防服务器时,一定不能大意,还是得找到管理完善且线路稳定的机房的服务器。

    游戏服务器如何做到不停机更新相关文章阅读:

    展开全文
  • 今天王者荣耀的服务器似乎出了点小问题,玩家在游戏...王者荣耀7月17日进行了不停机更新维护,下面给大家带来具体的更新内容,一起来看看吧。亲爱的召唤师:我们计划在2019年7月17日 8:30-9:30 对全服进行不停机更新...
  • [更新时间]4月22日 00:00-1:00[更新方式]不停机更新由于此次为不停机更新,维护完毕后即可正常进入[维护期间会有短暂入口维护的情况];维护时已经登入游戏的玩家受任何影响。[更新范围]全服[更新内容]修...
  • Nginx实现Java项目不停机更新

    千次阅读 2019-08-04 21:27:22
    Java hotswap始终是一个难题,在做功能更新的时候将会产生一段可用时间,通过Nginx平滑启动,可实现应用的无缝升级。具体流程如下:   1) 准备两台Tomcat, 分别以8080,9090口提供服务 2) 假设当前是...
  • 如何实现不停机更新

    2014-05-07 14:17:11
    请问一下,如何做到不停机更新, 像游戏类,基本都是停机维护,这个是怎么实现的? 还有大型的网站,是如何实现不停机更新的? 网上没找到答案, 希望有大牛可以帮忙解答,谢谢
  • 关闭nginx 如果使用cmd命令窗口启动nginx,关闭cmd窗口是能结束nginx进程的,可使用两种方法关闭nginx (1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx) (2)使用taskkill ...
  • 因为导入历史数据,大约4. 5KW 条。需要更新其中两个字段。 但是这张表 一直有实时数据进来,停机。 有什么更好的方法。 之前是是根据id进行for循环。更新2W条竟然要7个小时。。。
  • 停机与停机更新 软件世界的发展比以往任何时候都快。 为了保持竞争力,需要尽快推出新的软件版本,而又影响活动用户。 许多企业已将工作负载转移到Kubernetes,Kubernetes的构建考虑了生产就绪性。 但是,为了...
  • 停机与停机更新 本系列文章的第一部分介绍了如何在Kubernetes集群中实现真正的零停机时间更新。 我们专门解决了将流量从旧实例切换到新实例时出现的请求失败。 本文将展示如何使用Istio群集实现相同的目标。 ...
  • 使用Bluemix中交付管道的Active Deploy扩展来部署应用程序更新,而不会造成任何停机。 此内容不再被更新或维护。 全文以PDF格式“按原样”提供。 随着技术的飞速发展,某些内容,步骤或插图可能已更改。 查看...
  • weblogic 不停机部署更新

    千次阅读 2016-06-21 15:21:28
    采用war包方式进行部署 首先war包必须带有版本标识,像下面这样带有括号的,括号中的内容为版本号。 在build.xml中 加入这个参数 Weblogic-Application... 直接更新旧的部署 源路径改成新的war包路径,点击
  • 绝地求生2月26日不停机更新维护公告是什么?绝地求生停机维护内容是什么?绝地求生每周三都会例行维护一次,想必有不少的小伙伴们都想知道吧,下面绝地求生2月26日不停机更新维护公告,感兴趣的小伙伴们一起来看看吧...
  • lol今天停机维护到几点1月11日早7点30分全区停机维护,预计停机时间为07:30-12:0011日7.1版本停机更新内容更新7.1版本欢迎来到7.1版本,主题是关于迎头赶上。我们迎来了一段长假,但也有了一个月的超值数据筛选期,...
  • 绝地求生2月19日不停机更新维护公告是什么?绝地求生停机维护内容是什么?绝地求生每周三都会例行维护一次,想必有不少的小伙伴们都想知道吧,下面绝地求生2月19日不停机更新维护公告,感兴趣的小伙伴们一起来看看吧...
  • 绝地求生2月26日正式服不停机更新内容* 2月26日原计划停机维护改为停机维护 *维护开始时间:2月26日(星期三)08点30分(预计5小时)绝地求生更新维护公告【正式服停机维护公告】我们将在北京时...
  • 不停机的情况下如何进行网站程序的更新? 在数据库结构和程序都有更新时无论无更新数据库还是程序都使更新过程序中站点无法访问.这个问题如何解决呢? 自己mark一下. 转载于:...
  • 【IT168 评论】游戏的定期更新版本已经再寻常不过了,但频繁的更新会造成流失率非常严重,哪个玩家也希望再BOSS将要躺下那一刻,服务器停机维护了。在小版本更新过程中,采用不停机维护成为现在游戏的主流方式,那...
  • POST /_aliases {"actions": [ { "remove": { "index": "旧索引名", "alias": "别名" } }, { "add": { "index": "新索引名", "alias": "别名" } } ]}
  • 很多玩家从昨晚上就发现登陆了游戏,今天早上起来,发现还是登陆了,这到底是什么情况呢,s9赛季的停机更新什么时间才能开服?王者荣耀s9赛季什么时间更新完:我们计划在2017年10月23日0:30-09:30对正式服进行...
  • 2021年2月3日,绝地求生的正式服将进行一次不停机更新维护,此次的更新内容主要是优化服务器,其他的并没有特殊的更新内容,下面就来为大家分享一下绝地求生的更新维护公告。【绝地求生正式服不停机维护公告】各位...
  • 不停机发布策略

    2018-08-30 11:41:00
    2:执行创建老表的insert和update触发器sql脚本,使得老表有新数据进入或数据有更新时触发器执行处理 3:禁用线上一定比例service(使用工具)并记录停用的IP,LB中卸载一定比例web 4:发布并启动被禁用的...
  • 最大好处是零停机,整个更新过程始终有副本在运行,从而保证了业余的连续性。 根据 yaml 创建资源, apply 可以重复执行,create 不行 kubectl create -f deploy.yml kubectl apply -f deploy.yml --re...
  • 英雄联盟今天维护到什么时候结束?11月12日更新维护了哪些内容?英雄联盟基本上每周都会进行维护更新,而且多数是采用停服更新...- 维护开始时间:11月12日凌晨1点- 维护时长:1:00-12:00维护方式:停机维护目前游戏...
  • 使用nginx+tomcat实现不停机升级网站

    千次阅读 2018-05-10 16:00:41
    你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见了。这时候你瞬间没有了看电影...
  • 绝地求生在2020年9月16日进行停机维护,本次维护为更新[PC]第8赛季第3轮更新内容和服务器稳定性优化,更新后会有新区域、新道具和新皮肤等内容上线,下面小编以下是99单机网小编为大家带来的绝地求生2020年9月16日...
  • 腾讯光子&PUBG联合出品,正版《绝地求生》手游!百人空投,荒岛求生!虚幻4引擎研发,次世代完美画质,重现端游视听感受;8000Mx8000M正版...类型:飞行射击大小:1180M语言:简体...绝地求生5月26日停机更新公...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,486
精华内容 13,794
关键字:

不停机更新