• 对部署_nginx_pm2_docker的研究 1


       如何构建⼀个⾼可⽤的node环境
       
       主要解决问题
       故障恢复
       多核利⽤
       http://www.sohu.com/a/247732550_796914
       多进程共享端⼝
     
     
    // app.js
    const Koa = require('koa');
    // 创建⼀个Koa对象表示web app本身:
    const app = new Koa();
    // 对于任何请求,app将调⽤该异步函数处理请求:
    app.use(async (ctx, next) => {
    // 随机产⽣错误
    Math.random() > 0.9 ? aaa() : '2'
    await next();
    ctx.response.type = 'text/html';
    ctx.response.body = '<h1>Hello, koa2!</h1>';
    });
    if (!module.parent) {
    app.listen(3000);
    console.log('app started at port 3000...');
    } else {
    module.exports = app
    }
     
    // test.js
    var http = require('http');
    setInterval(async () => {
    try {
    await http.get('http://localhost:3000');
    } catch (error) {
    }
    }, 1000)
    // cluster.js
    var cluster = require('cluster');
    var os = require('os'); // 获取CPU 的数量
    var numCPUs = os.cpus().length;
    var process = require('process')
    console.log('numCPUs:', numCPUs)
     
    var workers = {};
    if (cluster.isMaster) {
    // 主进程分⽀
    cluster.on('death', function (worker) {
    // 当⼀个⼯作进程结束时,重启⼯作进程 delete workers[worker.pid];
    worker = cluster.fork();
    workers[worker.pid] = worker;
    });
    // 初始开启与CPU 数量相同的⼯作进程
    for (var i = 0; i < numCPUs; i++) {
    var worker = cluster.fork();
    workers[worker.pid] = worker;
    }
    } else {
    // ⼯作进程分⽀,启动服务器
    var app = require('./app');
    app.use(async (ctx, next) => {
    console.log('worker' + cluster.worker.id + ',PID:' + process.pid)
    next()
    })
    app.listen(3000);
    }
    // 当主进程被终⽌时,关闭所有⼯作进程
    process.on('SIGTERM', function () {
    for (var pid in workers) {
    process.kill(pid);
    }
    process.exit(0);
    });
    require('./test')
     
    ⽂件上传服务器
    scp (最原始)
    scp docker-compose.yml root@47.98.252.43:/root/source/ #⽂件
    scp -r mini-01 root@47.98.252.43:/root/source/ #⽂件夹
    git (实际⼯作中)
    deploy插件 (debug)
     
    PM2的应⽤
    内建负载均衡(使⽤Node cluster 集群模块、⼦进程,可以参考朴灵的《深⼊浅出node.js》⼀书
    第九章)
    线程守护,keep alive
    0秒停机重载,维护升级的时候不需要停机.
    现在 Linux (stable) & MacOSx (stable) & Windows (stable).多平台⽀持
    停⽌不稳定的进程(避免⽆限循环)
    控制台检测 https://id.keymetrics.io/api/oauth/login#/register
    提供 HTTP API
     
    配置
    npm install -g pm2
    pm2 start app.js --watch -i 2
    // watch 监听⽂件变化
    // -i 启动多少个实例
    pm2 stop all
    pm2 list
    pm2 start app.js -i max # 根据机器CPU核数,开启对应数⽬的进程
    配置process.yml
     
    apps:
    - script : app.js
    instances: 2
    watch : true
    env :
    NODE_ENV: production
    Keymetrics在线监控
    https://id.keymetrics.io
    pm2 link 8hxvp4bfrftvwxn uis7ndy58fvuf7l TARO-SAMPLE
     
    pm2设置为开机启动
    pm2 startup
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

           

  • 相关阅读:
    安卓app_sl_4_14询问是否退出的对话框关闭程序退出程序
    安卓app_sl4_12使用Notification在状态栏上显示通知
    安卓app_sl4_15带图标的列表对话框
    安卓app_sl4_13使用AlertDialog创建对话框
    JAVA字符串怎么转换成整数
    安卓app_sl4_16实现仿Windows 7图片预览窗格效果
    PCC工业控制全程含义
    Vue3 + TypeScript + Vite创建项目
    pinia介绍与使用
    微服务架构Spring Cloud(注册中心eureka、配置中心config、负载均衡feign、断路器hystrix、仪表盘hystrix、授权认证模块auth、路由网关zuulgateway、用户管理中心usermgr、日志模块log、服务管理模块mgr等)
  • 原文地址:https://www.cnblogs.com/zhouyideboke/p/13224323.html
Copyright © 2020-2023  润新知