easyswoole实现线上更新代码

简介: easyswoole实现线上更新代码

众所周知,easyswoole作为常驻内存的框架,修改代码并不能直接生效,而是需要重启服务,那么,当你的easyswoole项目上线之后,该如何保证旧请求的同时去更新代码呢?

nginx reload和restart

首先,我们需要了解到nginx reload和restart的区别.

reload

nginx 执行reload命令后,将会重新加载一次配置文件,并且给其他worker进程发送信号,进程收到信号之后,将不再接收新请求,当旧请求执行完毕后,将会自动销毁.

同时,如果reload加载的配置文件出错,nginx将会自动回滚到正常时候的配置,并不会造成服务中断.

image.png

restart

restart= stop+start,当nginx执行restart命令后,将会先中断服务,不再接收请求.

同时,当配置文件出错时,restart将会无法正常start,服务将一直中断.

更新线上easyswoole代码.

easyswoole reload

easyswoole本身自带reload代码,可实现关于worker进程的重启,但由于easyswoole的task进程是通过自定义进程实现,无法实现重启.

所以理论上,我们依然需要直接stop+start

那么,如何才能使得stop+start依然不中断服务呢?

反向代理

在上一篇文章中,我们了解到了nginx反向代理,负载均衡的实现.nginx实现负载均衡,同时,easyswoole 服务,理应跟nginx反向代理配合使用:

首先,我们创建一个测试的easyswole服务,并且在index控制器中写入以下测试方法:

public function index()
{
    $this->response()->write('<h1>test 1</h1>');
    go(function(){
        //假设每次请求进来,都将投递一个异步任务
        TaskManager::getInstance()->async(function (){
            echo 1;
            \\co::sleep(1); 
        });
    });
}

启动服务后,通过nginx 反向代理.

upstream test.cn {
     server 127.0.0.1:9501;
}
server {
    root /data/wwwroot/;
    server_name local.swoole.com;
    location / {
        proxy\_http\_version 1.1;
        proxy\_set\_header Connection "keep-alive";
        proxy\_set\_header X-Real-IP $remote_addr;
        if (!-f $request_filename) {
             proxy_pass http://test.cn;
        }
    }
}

在这个时候,我们已经启动了一个正在运行的服务:

image.png

新增测试脚本,测试请求

为了便于测试,我们新增一个测试脚本:

<?php
/**
 * Created by PhpStorm.
 * User: 10671
 * Date: 2020/5/25 0025
 * Time: 21:33
 */
while(1){
   $test =  file\_get\_contents("http://1.cn");
   var_dump($test);
   usleep(100000);
}

此脚本将会一直请求1.cn,并且打印数据.

更新代码

那么,假设现在我们需要更新代码,该怎么使得线上生效呢?首先,我们重新创建一个文件夹.

cp -r 1.cn/ 2.cn/

修改 dev.php端口改为 9502:

假设修改代码为test2:

public function index()
{
    $this->response()->write('<h1>test 2</h1>');
    go(function(){
        //假设每次请求进来,都将投递一个异步任务
        TaskManager::getInstance()->async(function (){
            echo 1;
            \\co::sleep(1);
        });
    });
}

启动该服务.并测试是否启动成功.

\[root@localhost 2.cn\]# curl http://127.0.0.1:9502
<h1>test 2</h1>\[root@localhost 2.cn\]#

此时,服务器运行了2个服务:  9501为旧版本服务,9502为新版本服务

注意,此例子为测试例子,在实际中,请使用git等版本控制工具更新代码.

此时9501正在一直接收请求,并且不断的在投递异步任务:

\[root@localhost 1.cn\]# php easyswoole task status
┌─────────┬─────────┬──────┬───────┬─────────────┐
│ running │ success │ fail │  pid  │ workerIndex │
├─────────┼─────────┼──────┼───────┼─────────────┤
│ 20      │ 71      │ 0    │ 36212 │ 0           │
├─────────┼─────────┼──────┼───────┼─────────────┤
│ 20      │ 70      │ 0    │ 36213 │ 1           │
├─────────┼─────────┼──────┼───────┼─────────────┤
│ 20      │ 70      │ 0    │ 36214 │ 2           │
├─────────┼─────────┼──────┼───────┼─────────────┤
│ 20      │ 70      │ 0    │ 36215 │ 3           │
└─────────┴─────────┴──────┴───────┴─────────────┘

修改nginx代理,并reload 重载配置

此时,我们修改nginx的配置,改为代理9502:

upstream test.cn {
     server 127.0.0.1:9502;
}

同时热重启nginx:

image.png

查看task任务状态

此时,nginx的新请求已经进入新服务.9501服务此时并没有中断,用于处理还未完成的task异步任务:

image.png

直到处理完成,才可关闭9501服务.

image.png

此时,线上版本已经更新成功,服务并没有中断.

其他

本文参考于:http://www.easyswoole.com/Cn/Other/deploy.html

目录
相关文章
|
机器学习/深度学习 存储 算法
竞争学习原理与策略| 学习笔记
快速学习竞争学习原理与策略。
竞争学习原理与策略| 学习笔记
|
PHP Python
矩阵制度三三复制直销系统模式开发详解 | 矩阵制度三三复制直销系统开发源码demo示例
矩阵制度三三复制模式是一种常见的直销模式,也被称为三三复制模式。该模式限制了前排的数量,只能填满3个位置,奖金则是按照固定的深度来进行领取的。在该模式中,每个参与者都可以推荐其他人加入,如果成功推荐,就可以获得相应的奖金。具体来说,如果推荐一个参与者,可以获得20美元的奖金;如果推荐两个参与者,可以获得10美元的奖金;如果推荐三个参与者,可以获得4美元的奖金。此外,该模式还有一些其他的奖金制度,如培育奖金、扣税等。
|
安全 Java Linux
Kali渗透测试:通过Web应用程序实现远程控制
Kali渗透测试:通过Web应用程序实现远程控制
297 0
|
前端开发 安全 JavaScript
在阿里云快速启动Appsmith搭建前端页面
本文介绍了Appsmith的基本信息,并通过阿里云计算巢完成了Appsmith的快速部署,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解底层技术,只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Appsmith,非技术同学也能轻松搞定。
|
IDE 安全 Java
阿里开发手册 嵩山版-编程规约 (九) 注释规约
《阿里开发手册 嵩山版》中关于注释规约的部分,强调了注释的重要性和编写规范,包括Javadoc的使用、类和方法注释的要求、以及如何有效使用注释来提高代码的可读性和维护性。
 阿里开发手册 嵩山版-编程规约 (九) 注释规约
|
内存技术 存储 Android开发
MCU最小系统电路设计(以STM32F103C8T6为例)-3
MCU最小系统电路设计(以STM32F103C8T6为例)
MCU最小系统电路设计(以STM32F103C8T6为例)-3
|
人工智能 自然语言处理 安全
ChatGPT-5 最快将于 6 月发布
OpenAI计划推出ChatGPT-5,预计6月发布,企业客户已提前体验其增强的性能与定制化功能。模型将经过密集训练和严格安全测试,提升语言理解和交互的自然度。GPT-5将影响多个行业,带来商业机遇,同时引发关于伦理和安全的讨论。其在教育和医疗领域的应用前景广阔,但用户仍需注意信息验证。
1182 0
ChatGPT-5 最快将于 6 月发布
|
编解码 监控 安全
GB/T28181规范扫盲和使用场景探讨
GB28181(GB/T 28181-2022)是中国国家标准,规定了安全防范视频监控联网系统的信息传输、交换、控制技术要求。此标准支持设备接入、音视频传输及控制指令交互等功能,适用于各类监控设备如执法记录仪和移动监控系统。技术实现涉及协议栈构建、音视频编码及数据传输等环节。广泛应用在执法记录、移动监控和铁路巡检等领域。例如,海康威视iSecure Center和萤石云平台均支持GB28181协议,实现设备管理和视频传输。此外,大牛直播SDK推出的SmartGBD为Android终端提供了便捷的GB28181接入解决方案,支持多种数据类型接入,增强了设备的互操作性。
1471 0
|
数据安全/隐私保护
mac安装使用subversion(svn)
1.首先安装homebrew 2.安装subversion(svn) 3.创建仓库 4.配置svn 5.启动svn服务 6.使用svn客户端功能
2525 0
mac安装使用subversion(svn)
|
机器学习/深度学习 人工智能 BI
深度学习入门基础CNN系列——卷积计算
卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的**互相关 (cross-correlation)运算**,与数学分析中的卷积定义有所不同,这里跟其他框架和卷积神经网络的教程保持一致,都使用互相关运算作为卷积的定义,具体的计算过程如 **图** 所示。
深度学习入门基础CNN系列——卷积计算