todo:浅谈pm2基本工作原理

todosomeone todosomeone     2022-08-12     312

关键词:

TODO:浅谈pm2基本工作原理

要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系。

撒旦(Satan),主要指《圣经》中的堕天使(也称堕天使撒旦),他是反叛上帝耶和华的堕天使(Fallen Angels),曾经是上帝座前的天使,后来他因骄傲自大妄想与神同等而堕落成为魔鬼,被看作与上帝的力量相对的邪恶、黑暗之源。

简单的说Satan是破坏神,就是进程的异常退出、kill等;God是守护神,保护进程、重启进程等。

技术分享

一图胜千言,pm2的 RPC基本框架。Client与Daemon是采用了RPC进行通讯。

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

1. Client启动关联Daemon

daemon.innerStart(function() {

KMDaemon.launchAndInteract(that.conf, {

machine_name : that.machine_name,

public_key : that.public_key,

secret_key : that.secret_key

}, function(err, data, interactor_proc) {

that.interactor_process = interactor_proc;

});

that.launchRPC(function(err, meta) {

return cb(null, {

daemon_mode : that.conf.daemon_mode,

new_pm2_instance : false,

rpc_socket_file : that.rpc_socket_file,

pub_socket_file : that.pub_socket_file,

pm2_home : that.pm2_home

});

});

});

child.once(‘message’, function(msg) {

debug(‘PM2 daemon launched with return message: ‘, msg);

child.removeListener(‘error’, onError);

child.disconnect();

if (opts && opts.interactor == false)

return cb(null, child);

/**

* Here the Keymetrics agent is launched automaticcaly if

* it has been already configured before (via pm2 link)

*/

KMDaemon.launchAndInteract(that.conf, {

machine_name : that.machine_name,

public_key : that.public_key,

secret_key : that.secret_key

}, function(err, data, interactor_proc) {

that.interactor_process = interactor_proc;

return cb(null, child);

});

});

2. Daemon有start,stop,close,kill进程的方法,与God的事件发射器(EventEmitter)关联

God.bus.on(‘axm:monitor’, function axmMonitor(msg) {

if (!msg.process)

return console.error(‘[axm:monitor] no process defined’);

if (!msg.process || !God.clusters_db[msg.process.pm_id])

return console.error(‘Unknown id %s’, msg.process.pm_id);

util._extend(God.clusters_db[msg.process.pm_id].pm2_env.axm_monitor, Utility.clone(msg.data));

msg = null;

});

3. Satan.js

3.1. Ping进程是否活着或者关闭

Satan.pingDaemon = function pingDaemon(cb) {

var req = axon.socket(‘req’);

var client = new rpc.Client(req);

debug(‘[PING PM2] Trying to connect to server’);

client.sock.once(‘reconnect attempt’, function() {

client.sock.close();

debug(‘Daemon not launched’);

process.nextTick(function() {

return cb(false);

});

});

client.sock.once(‘connect’, function() {

client.sock.once(‘close’, function() {

return cb(true);

});

client.sock.close();

debug(‘Daemon alive’);

});

req.connect(cst.DAEMON_RPC_PORT);

};

3.2. 通知God

Satan.notifyGod = function(action_name, id, cb) {

Satan.executeRemote(‘notifyByProcessId’, {

id : id,

action_name : action_name,

manually : true

}, function() {

debug(‘God notified’);

return cb ? cb() : false;

});

};

4. God是事件监听

var God = module.exports = {

next_id : 0,

clusters_db : {},

bus : new EventEmitter2({

wildcard: true,

delimiter: ‘:’,

maxListeners: 1000

})

};

5. God的监听进程方法有

God.ping

God.notifyKillPM2

God.duplicateProcessId

God.startProcessId

God.stopProcessId

God.resetMetaProcessId

God.deleteProcessId

God.restartProcessId

God.restartProcessName

God.sendSignalToProcessId

God.sendSignalToProcessName

God.stopWatch

God.toggleWatch

God.startWatch

God.reloadLogs

God.sendDataToProcessId

God.msgProcess

God.getVersion

6. God的进程运行模式用两种

6.1. Cluster集群模式

6.2. Fork模式

一般开发环境用fork模式,生产环境使用cluster模式

技术分享

简单pm2进程管理描述,更多方法请阅读源码。


wxgzh:ludong86

技术分享

 

浅谈react工作原理

Reactjs起源于Facebook内部项目,是一个用来构建用户界面的javascript库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React把每一个组件当成了一个状态机,组件内部通过state来维护组件状态的变化,当组件的状态发生变... 查看详情

addChangeListener 在 Facebook React Todo 示例中的工作原理

】addChangeListener在FacebookReactTodo示例中的工作原理【英文标题】:HowaddChangeListenerworksinFacebookReactTodoexample【发布时间】:2016-03-0412:57:32【问题描述】:全部:我对React还是很陌生。当我关注它的TodoMVCexample时,有一个问题让我非常... 查看详情

todo:node.jspm2使用方法

TODO:Node.jspm2使用方法pm2是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载,PM2是完美的。1.使用npminstallpm2-g安装pm22.使用pm2管理Node进程,... 查看详情

浅谈单反/手机相机结构、摄影以及效果基本概念和原理(二)

参考技术A本部分内容主要解释如下几个问题:1,camera结构是怎么样的?各部分有何作用?2,如何实现对焦?3,DSP/ISP结构和作用?单反主要包括机身和镜头,手机camera也主要包括sensor,镜头和马达等三部分,其基本组件相同,... 查看详情

路由器工作原理浅谈

路由器工作原理浅谈路由器是构建整个网络最核心的设备。比较著名的品牌为cisco、锐捷、华为、TP-LINK、H3C等等。之前工作中接触的较多的是思科和银河风云,思科的主要是7609,性能十分稳定,基本上全年每天24小时工作不会出... 查看详情

[ios]浅谈nsrunloop工作原理和相关应用

一.认识NSRunloop 1.1 NSRunloop与程序运行   那么具体什么是NSRunLoop呢?其实NSRunLoop的本质是一个消息机制的处理模式。让我们首先来看一下程序的入口——main.m文件,一个ios程序启动后,只有短短的十行代码居然能保... 查看详情

浅谈bloomfilter上基本概念和实现原理

???在日常生活中。包括在设计计算机软件时,我们常常要推断一个元素是否在一个集合中。??比方在字处理软件中,须要检查一个英语单词是否拼写正确(也就是要推断它是否在已知的字典中)。在FBI。一个嫌疑人的名字是否已... 查看详情

浅谈k8s:k8s部署架构以及工作原理(代码片段)

对于每个想落地kubernetes应用的工程师来说,熟悉kubernetes的架构和工作原理是必经之路,也是必须知道的知识,只有了解kubernetes的架构和工作原理才能更好的应用kubernetes。kubernetes架构Kubernetes最初源于谷歌内部的Borg,提供了面... 查看详情

爬虫基本结构

爬虫程序的工作是从一个种子链接的集合开始。把种子URL集合作为参数传递给网络爬虫。爬虫先把这些初始的URL放入URL工作队列(Todo队列,又叫作Frontier),然后遍历所有工作队列中的URL,下载网页并把其中新发现的URL再次放入工... 查看详情

浅谈编译原理

一.编译原理是什么?   学编译原理之前就听说编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、... 查看详情

flask解读---浅谈flask基本工作流程_1

网站写了蛮长时间了,一直想具体分析分析Flask的运行机制,但是源码看得断断续续,不过最近状态不错,进度上来了点,这里先新建一个类别,专门来说说Flask和源码有关系的内容,这篇准备粗略说一下应用Flask框架的时候,从HT... 查看详情

pm2源码浅析

PM2工作原理  最近在玩一个游戏,《地平线:黎明时分》,最终Boss是一名叫黑底斯的人,所谓为人,也许不对,黑底斯是一段强大的毁灭进程,破坏了盖娅主进程,从而引发的整个大陆机械兽劣化故事。为什么要讲这么... 查看详情

浅谈mybatis连接原理

    众所周知数据库连接的过程,但是最近面试的人(菜面菜),都说用的SSM框架,但是我问了一下,mybatis是怎么连接上mysql的,基本上都会说:配置好的,直接用了,今天我来抛砖引玉一下,欢迎拍砖!  &nbs... 查看详情

浅谈javascript预编译原理

这两天又把js的基础重新复习了一下,很多不懂得还是得回归基础,大家都知道js是解释性语言,就是编译一行执行一行,但是在执行的之前,系统会做一些工作:1,语法分析;2,预编译;3,解释执行。语法分析很简单,就是引擎... 查看详情

浅谈密码加salt原理

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。   加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“... 查看详情

浅谈基本的网络安全

  由于最近在看《linux企业案例精解第二版》的书,里面的很多作者亲身经历的事故总结给了我很多学习的一手资料,我认为很受用,特此来分享一下笔记首先介绍一下DDOSDDOS分类:1.容量耗尽攻击,这种攻击企图耗尽转发或链... 查看详情

浅谈提高工作效率

 现在上班族有一个很大的的问题就是工作效率不高,在当今物联网快速发展的时代,高效率工作非常重要。 1.程序员每天工作八小时,但是我建议在最清醒的时候干最重要的事,能有效利用六个小时就很不错了。 2.... 查看详情

浅谈asp.net框架(代码片段)

本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文章中,结合具体的Demo实例分析。感兴趣的朋友,可以先收藏。一.NET框架概述 1.作用:提供了基于.NET框架开发的基础平台... 查看详情