像编排容器一样编排进程

背景

当前微服务架构大行其道,一个业务应用往往是由多个独立的服务构成,通过K8S,Docker Compose等容器编排工具,以及Jekins等DevOPS工具,我们也能够很方便的将服务发布到容器,并通过配置和编排轻松部署到线上环境。但这些工具虽然方便,但是比较重,对于某些轻量化环境,K8S等容器编排工具的资源消耗是无法接受的。当然,我们也可以选择K3S这样更轻量的解决方案,但在资源限制特别苛刻的场景下,虚拟化容器本身就会带来一些额外的消耗。

同时K8S,Jekins等都对运维能力有比较高的要求,如果希望在开发环境自行部署和调试微服务架构的项目,那往往意味着必须手动部署多个服务的容器并管理它们的状态,这也会大大加剧开发人员在开发阶段进行调试的负担。

所以在微服务时代,即使我们已经拥有了这么多方便的工具和平台,我感觉仍然需要一种更加方便的,服务于轻量化和开发环境的服务管理工具。

Process Compose

其实本质上,我们通常的微服务启动后都是操作系统的进程,所以对服务的编排和管理,在单机的非虚拟化环境下实际上可以简化为对进程的编排和管理。Process Compose正是这样的一款工具。它能够管理和监控进程的生命周期,以及相互的依赖关系,将由一系列服务(或者说进程)组成的应用当作一个整体去启动,停止,监控等。它的核心功能有三点:

  1. 进程监控:
    Process Compose可以自注册为当前操作系统的系统服务,对受管进程进行监控,类似于supervisor所做的事情,但能够同时监控多个进程,而且能够配置不同进程的健康检查方式(检查方式,检查间隔等)
  2. 进程编排:
    Process Compose可以指定受管服务之间的依赖关系。正如大多数容器编排工具所做的那样。这样就能控制不同服务的启动顺序,这样就能解决比如数据库需要先于应用服务进行启动的问题
  3. 进程生命周期管理:
    Process Compose 能够将受管进程作为一个整体去启动,停止,重启等。只要配置好应用的相关参数,后续就能通过简单的命令来控制应用的启停,这对于微服务应用的开发调试非常方便。

使用方式

Process Compose的使用方式非常简单,你只需要几步就能够将你的服务组装起来并执行:

  1. 你需要首先下载一个 Process Compose 的可执行文件,github仓库中提供了常见环境的二进制包的下载。如果你需要部署的环境没有提供,请自行编译源码。
  2. 准备好你自己的服务的启动文件和相关配置,可以将它们都放到Process Compose的同级目录,每个服务一个子目录,类似于:
	process-compose所在目录|-- service1|- 该服务的配置和可执行文件等|-- service2|- 该服务的配置和可执行文件等|--  ......|--  config.yaml    #process-compose的配置文件
  1. 编写一个config.yaml的配置文件,指定所管服务的信息,配置文件的项目如下:
log_level: info #日志等级
app_data_home: D://tmp//process-compose//home #所管服务的数据目录,默认是当前用户的主目录的.process-compose文件夹
sys_service_name: process-compose # 注册为系统服务的服务名
sys_service_desc: Process Monitoring and Management Tool #注册为系统服务的服务描述
services:#以下为受管服务配置,可配置多个服务service1: #服务名#启动延迟,秒;配置后会在轮到该服务启动时延迟执行启动命令,一般用于等待上游依赖服务启动完成startup_delay: 5#是否要重定向启动命令的日志输出到特定文件,作为服务日志(一般用于服务无法主动输出日志文件的场景),重定向的日志会放到{app_data_home}/{service_name}/logs目录下log_redirect: falsehealthcheck: enable: true    #是否启用健康检查restart: true   #服务失败后是否尝试重启服务url: http://localhost:23800/api/demo/test  #如果是web服务,可以配置健康检查接口,接口返回200认为是成功;默认仅检查进程是否仍在运行interval: 10    #健康检查的间隔,秒retries: 3      #健康检查失败多少次判断服务失败check_delay: 5 #启动后,多少秒后才开始第一次健康检查#启动命令,这里对.的路径做了调整,指向了服务自己的主目录#例如 process-compose可执行文件放到了/home/nobody/app目录下#那么./runtime/bin/java实际的路径是/home/nobody/app/service1/runtime/bin/javastart_cmd: ["./runtime/bin/java", "-jar","test.jar"] depends_on:- service2  #所依赖的其它服务名service2:log_redirect: true healthcheck:enable: truerestart: true interval: 10 retries: 1    start_period: 5#实际启动路径为{process-compose所在目录}/service2/teststart_cmd: ["./test"]
  1. 执行process-compose的相关命令,进行服务的安装,启动等操作:
process-compose #不通过系统服务直接启动process-compose及其受管服务
process-compose install  #将process-compose注册为系统服务
process-compose start    #启动通过install注册的服务
process-compose stop     #停止服务

代码仓库

欢迎大家使用和建议:https://github.com/davidfantasy/process-compose

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

std::async、std::future

async和future std::async和std::thread都是C11标准库中实现多线程的类。async是一种异步执行任务的方式,它可以在后台线程中执行一个函数或者函数对象,并返回一个std::future对象,可以用来获取函数的返回值或者异常信息。它允许线程返回fut…

40道 Nginx 高频面试题

Nginx 是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。那么关于 Nginx 的核心面试题有哪些呢?今天给大家整理了40道Nginx 高频面试题,最近…

麒麟kylin-v10系统,虚拟机kvm的使用

kvm的使用 虚拟机新建 点击选择对应的iso文件 选择相应的系统 (注意,如果这里没有相应的系统比如:windows,可以直接选择Generic default这是通用默认的意思) 选择cpu 完成即可 等待安装完毕 网络设置-ssh连接 虚拟…

Electron+Vue+pyinstaller服务打包

electron环境安装略 1. electron的入口文件配置test.js, 需要在package.json 配置文件中指定main: src/test.js const { app, BrowserWindow } require(electron)const createWindow () > {const win new BrowserWindow({width: 800,height: 600})// win.loadFile(inde…

实体类和对象之间的关系是什么

实体类(Entity Class)和对象(Object)在面向对象编程(OOP, Object-Oriented Programming)和ORM(Object-Relational Mapping)框架如Hibernate中扮演着重要的角色。以下是它们之间的关系…

守好参数之门:防止 IllegalArgumentException 入侵的七大策略

1. 原因分析 java.lang.IllegalArgumentException 是 Java 中的一个运行时异常,它通常表示向方法传递了一个不合法或不适当的参数。这种异常不会由 Java 虚拟机自动抛出,而是由程序员在编写代码时通过显式地调用 throw 语句来抛出,或者在某些…

如何利用python选股

使用Python进行选股是一个复杂但有趣的过程,它结合了数据分析、统计建模和机器学习等多个领域的知识。 由于篇幅限制,我将提供一个概述性的框架和关键步骤,并尽量保持内容的精炼和深入。 一、引言 背景介绍:简述股市投资的重要性和复杂性,以及利用Python进行量化选股的优…

红龙工业设备制造有限公司亮相2024杭州数字物流技术设备展

参展企业介绍 温州红龙工业设备制造有限公司成立于2015年11月。是中国先进的工业皮带设备研发制造和工业皮带整体解决方案运营服务商,现主营皮带接头机、皮带热压机、皮带接驳机、皮带打齿机、输送带打齿机、输送带分层级、输送带导条机、输送带裁切机、高频机等工业…

力扣HOT100 - 84. 柱状图中最大的矩形

解题思路&#xff1a; 单调栈 对于一个高度height[ i ]&#xff0c;找左右两边均严格小于它的值。 class Solution {public int largestRectangleArea(int[] heights) {int n heights.length;int[] left new int[n];int[] right new int[n];Deque<Integer> mono_st…

HDFS集群间互访配置

HDFS集群间互访配置 目录 1 HDFS互访 1.1 前置条件 1.2 互访配置 2 NameService修改 HDFS互访

【element-plus】自动导入 + typescript 提示

1、自动导入 2、引用加载组件类型提示 第一步&#xff1a;安装自动导入功能所需的插件 npm install -D unplugin-vue-components unplugin-auto-import 第二步&#xff1a; vite版&#xff1a; // vite.config.ts import { defineConfig } from vite import AutoImport fr…

力扣:738. 单调递增的数字

738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9示例 2: 输入: n 1234 输…

【无标题】C++ 读写文件 不同方法总结

在C中&#xff0c;有多种方法可以进行文件的读写操作。下面是一些常用的方法&#xff1a; 使用iostream库进行文件读写&#xff1a; 使用ifstream类进行文件读取操作&#xff0c;可以使用open()函数打开文件&#xff0c;然后使用>>运算符或getline()函数读取文件内容。例…

linux安装配置Docker保姆级教程

Docker到底是什么? Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱机制&#xff0c;相互之间…

Fastchat + vllm + ray + Qwen1.5-7b 在2080ti 双卡上 实现多卡推理加速

首先先搞清各主要组件的名称与作用: FastChat FastChat框架是一个训练、部署和评估大模型的开源平台&#xff0c;其核心特点是&#xff1a; 提供SOTA模型的训练和评估代码 提供分布式多模型部署框架 WebUI OpenAI API Controller管理分布式模型实例 Model Worker是大模型服务…

智慧仓储可视化大屏,以最直观的形式展示海量数据。

智慧仓储可视化大屏是一种通过数据可视化技术&#xff0c;将仓储管理系统中的海量数据以图表、地图、仪表盘等形式直观展示在大屏上的解决方案。它可以帮助仓储管理人员更清晰地了解仓库的运营情况&#xff0c;从而做出更明智的决策。 智慧仓储可视化大屏通常包括以下功能和特点…

三层架构慎用跨层公用数据类型

在三层架构中&#xff0c;定义公共数据类型供三个层共用是可能的&#xff0c;但这种做法需要谨慎考虑。虽然共享数据类型可以减少代码冗余和提高数据一致性&#xff0c;但也可能导致层与层之间的耦合度增加&#xff0c;从而降低了系统的可维护性和可扩展性。 如果你决定定义公…

IP 地址追踪工具促进有效的 IP 管理

网络 IP 地址空间的结构、扫描和管理方式因组织的规模和网络需求而异&#xff0c;网络越大&#xff0c;需要管理的 IP 就越多&#xff0c;IP 地址层次结构就越复杂。因此&#xff0c;如果没有 IP 地址管理&#xff08;IPAM&#xff09;解决方案&#xff0c;IP 资源过度使用和地…

cocos creator 帧率60 不生效meta50 能刷新到90

环境&#xff1a; cocos creator 2.4.3 华为meta 50 背景&#xff1a; 小游戏 需要在update 里取帧率 发现跟时间对不上 游戏设置60帧 手机上显示 90帧 cc.game.setFrameRate(30) 显示 30帧 cc.game.setFrameRate(60) 显示 90帧 结论&#xff1a; 对于老版本的cocos creator …

2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24

一、简介&#xff1a;libyuv 最初是由Google开发的&#xff0c;主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数&#xff0c;用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…