supervisor很赞!
最近,公司进行了新的架构设计,原来一个区服一组进程,变成了对外只有一台服,后面N组多进程进行服务的模式。于是,管理进程就变成了一个头痛的问题。原来是在写代码的目录里放置各种脚本解决的,关闭脚本,开启脚本,重启脚本,更新脚本,还有一打用来看各种日志的脚本。这些脚本还是严重目录相关的,要执行某些命令,只能cd到指定目录执行(或者用硬连接+设置脚本所在目录为当前目录解决?whatever)。遇到实际部署的时候,还需要ssh到指定机器上,运行指定脚本,有时候还担心服务器起不来,需要人肉ssh过去看status或者tail日志看。
现在,有supervisor,将所有这些烦恼一扫而光!supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构。supervisord负责读入配置文件,然后以子进程方式启动配置中定义的程序,将对应的program进行后台化(daemonize)处理。supervisorctl则负责和supervisord进行沟通,获取运行中的进程信息,包含pid,uptime等信息。supervisorctl既可以通过命令行参数进行控制,又能够直接进入一个特有的shell,通过这个shell管控进程组。这样,既能够让部分同学准确把握进程状况,又能避免放开shell权限,一举多得。
以前做服务器逻辑的多并发,采用gevent可以很自然对应到逻辑上的并发微线程,但是处理部分游戏逻辑,需要用到锁,有时候还需要跨进程的锁。所以,当时一直很渴望有个网关进程顶在前头,将网络通信先行串行化,然后后台跑起多个不同工作任务的进程,消化不同的数据包。这样,每个进程处理的任务简单,比较容易做到正确和高效。然后没有并发事件,可以避免锁。现在想来,其实这种架构,是将部分业务逻辑的压力,压在了多进程上,名曰“分布式处理”,实际运行时,对进程的管控需求会提高,增加了运行时管理的难度。比如,一般需要一个master管理这种异质进程,控制其生生灭灭。
使用supervisor,可以简化进程管理这方面的压力。但是,部分跟业务逻辑相关的进程生命周期,还是需要主动干预。哪些情况下,进程被关闭是正常,什么情况下需要重启进程,还是需要费心搞清楚的。幸而supervisor给了一个不错的思路。剩下的就是多服务器配置的生成和管理了,希望能找到可靠的开源工具。
supervisor很赞!的更多相关文章
- 分享一组很赞的 jQuery 特效【附源码下载】
作为最优秀的 JavaScript 库之一,jQuery 不仅使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入漂亮的效果.这篇文章挑选了8个优秀的 jQuery 实例教程,这些 ...
- 24个很赞的 Node.js 免费教程和在线指南
JavaScript 最初是用来创建动态网站效果的的前端语言.而如今,这门脚本语言也可以用作后端开发,用于搭建 Web 服务器,开发接口,甚至创建博客.在下面这个列表中包括24个 Node.js 教程 ...
- 很赞的一个教程: React.js 小书
很赞, React.js 小书 http://huziketang.com/books/react/ 推荐阅读入门, 照着来一遍,能会个七七八八, 更多的还需要多写 import Re ...
- Android 编码风格规范,很赞哦
1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...
- 很赞的PHP字符串加密函数
最近, 从discuz里面发现了一个很牛的加密解密函数. 此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原 这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦, ...
- 很赞的MathJax
一直想在网页上放进LaTeX布局,但由于是要发布在SAE上,因此有很多的限制. 然后在这儿发现了这个好东东,MathJax,非常方便,JS直接可以外链. 通过它,我编辑了这个页面,看起来很不错哦.
- 一次看完28个关于ES的性能调优技巧,很赞,值得收藏!
因为总是看到很多同学在说Elasticsearch性能不够好.集群不够稳定,询问关于Elasticsearch的调优,但是每次都是一个个点的单独讲,很多时候都是case by case的解答,本文简单 ...
- MyBatisPlus 入门教程,这篇很赞
在之前的文章中我们经常使用MybatisPlus进行增删改查,可能有些小伙伴对mybatisplus不是很熟悉,今天特意出了一般入门级的教程,我自己也是一边学习一边写的,有什么地方写的不好的地方请留意 ...
- 很赞的idea教程
感谢: http://pan.baidu.com/s/1dDEaVxn
随机推荐
- FZU 1914 Funny Positive Sequence
题目链接:Funny Positive Sequence 题意:给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个数列的这n种变换里, A(0): a1, ...
- iOS应用程序间共享数据
我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来 ...
- ComboBox绑定
this.ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; this.ComboBox1.AutoCompleteSource ...
- TableLayout练习
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android=" ...
- Oracle练习题(1~19)
1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...
- 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)
package com.kkdiangame.UI.res; import java.io.ByteArrayOutputStream; import java.io.File; import jav ...
- C# DES加密
需要引用名称空间 using System; using System.Text; using System.Security.Cryptography; using System.IO; 具体代码: ...
- 过滤器 Filter
Filter(过滤器)简介 Filter 的基本功能是对发送到 Servlet 的请求进行拦截, 并对响应也进行拦截. Filter 程序是一个实现了 Filter 接口的 Java 类,与 Serv ...
- 蓝桥杯 ALGO-4 结点选择 (树形动态规划)
问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n . 接下来的 ...
- 使用jsTree动态加载节点
因为项目的需要,需要做一个树状菜单,并且节点是动态加载的,也就是只要点击父节点,就会加载该节点下的子节点. 大致的效果实现如下图: 以上的实现就是通过jsTree实现的,一个基于JQuery的树状菜单 ...