net_bazzline /component_heartbeat
php 组件 heartbeat
Requires
- php: >=5.3.3
Requires (Dev)
- mockery/mockery: dev-master
- net_bazzline/component_process_identity: 1.0.0
- net_bazzline/component_utility: dev-master
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2024-09-16 20:49:42 UTC
README
php component heartbeat 提供了接口和抽象实现,以提供一个通用的代码库。
您应使用此库来实现您的实际心跳监控解决方案。
常见术语
@todo
基本概念
心跳分为两个组件:心跳客户端和心跳监控器。
主要思想是在并行运行的线程或不同位置上提供心跳。
这两个组件都设计为可以在监控器(观察者)和心跳(客户端)端使用。
您应该创建使用监控器的进程,该监控器会敲击附加的心跳。心跳在监控器中被用来 敲击,在进程中用来 敲打。在进程中调用 敲打 来更新状态信息。 敲击 读取状态信息并将其提供给监控器(如有必要)。敲击 还会抛出异常。如果发生异常,监控器必须调用心跳方法 handleHeartAttack,因为心跳本身只知道该做什么以及如何做。
心跳可以实现 PulseableInterface。这可以用来每隔 $x 秒调用心跳一次。在心跳中如何处理低于脉冲的调用可以由心跳实现。以最小脉冲间隔调用心跳是监控器和心跳之间的一种绅士协议。
心跳客户端
心跳本身有一个 beat 方法。这应该根据需要频繁调用,以更新心跳信息。如果您正在迭代一个项目块,可以在每个或每十个处理的项目后调用 beat。
此外,心跳知道在哪里查找信息以及如何将值返回给监控器。这部分需要在 knock 方法中处理。
心跳监控器
心跳监控器为心跳提供了附加和分离机制。您需要做的只是实现一种方式,以持久化方式存储附加的心跳(数据库、文件系统、会话)。
其他接口
该组件还声明了 PulseableInterface 和 RuntimeInformationInterface。两者都可以用来从心跳(客户端)检索数据。
工作流程
从被监控进程(客户端)的角度
进程将实例化心跳和监控器。监控器用于附加心跳(即,将心跳添加到可观察心跳列表中)。之后,根据进程中心跳的实现,将使用心跳通过调用 beat 方法来更新状态。如果进程完成,它将使用监控器从可观察心跳列表中分离心跳。
从监控器的角度(观察者)
监控器会查看附加的心跳客户端,并尝试敲击每个心跳。如果心跳的敲击方法返回空或抛出异常,监控器需要加以注意。建议使用handleHeartAttack心跳方法。该方法应负责清理已死亡进程。
需要做什么
PHP脚本由请求执行。PHP本身并非为长时间运行过程而设计。这导致了你使用web服务器的分叉或线程机制。如何跟踪你的线程是你的责任。
一种可能的实现
如何解决线程间的通信问题?
你必须实现一个可访问的数据传输对象。例如,你可以使用文件、数据库表或会话存储。
使用文件系统
一个简单的想法是使用文件系统。心跳将创建一个具有唯一但可识别名称的文件。文件包含所有所需信息。例如,一个JSON文件可能有以下布局。
{ "timestamp": "1373924066", "uptime": "1373924000", "memoryUsage": "1329232" }
从监控器的角度来看,心跳将读取文件内容,并将正确的返回给监控器。
使用数据库
为了防止读写锁或跨文件系统的多个文件,你可以使用一个包含信息的数据库表。以下是一个简单示例。
CREATE TABLE `montior_list` `id` INT NOT NULL AUTO_INCREMENT, `heartbeat_identity` VARCHAR (255) NOT NULL, `timestamp` INT NOT NULL, `uptime` INT NOT NULL, `memory_usage` INT NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`), INDEX `createdAt` (`created_at`) ) Engine=InnoDB DEFAULT CHARSET=utf8 COMMENT='my short comment';
示例
基于JSON的实现
php example/Example/JSONBasedImplementation/Example.php
带有进程分叉的基于JSON的实现
php example/Example/JSONAndFork/Example.php
如果你想调查代码。
安装
通过Git
cd my/path/to/other/git/repositories
mkdir -p stevleibelt/php_component_heartbeat/
cd stevleibelt/php_component_heartbeat
git clone https://github.com/stevleibelt/php_component_heartbeat .
通过Composer
require "net_bazzline/component_heartbeat": "dev-master"
待办事项
-
版本 1.0.0
- 实现带有sqli数据库示例的示例
- 完成readme
-
版本 0.2.0
- 清理代码以在所有地方使用相同的术语
- 创建wiki描述运行时界面的好处和想法
- 实现监控历史(已完成)
- 将组件重命名为monitor、client、clientHistory(已完成)
版本历史
- 0.1.0
- 用单元测试覆盖以下类