net_bazzline/component_heartbeat

0.1.0 2013-09-28 23:32 UTC

This package is auto-updated.

Last update: 2024-09-16 20:49:42 UTC


README

php component heartbeat 提供了接口和抽象实现,以提供一个通用的代码库。

您应使用此库来实现您的实际心跳监控解决方案。

当前主分支的构建状态由 Travis CI 跟踪:构建状态

常见术语

@todo

基本概念

心跳分为两个组件:心跳客户端和心跳监控器。

主要思想是在并行运行的线程或不同位置上提供心跳。

这两个组件都设计为可以在监控器(观察者)和心跳(客户端)端使用。

您应该创建使用监控器的进程,该监控器会敲击附加的心跳。心跳在监控器中被用来 敲击,在进程中用来 敲打。在进程中调用 敲打 来更新状态信息。 敲击 读取状态信息并将其提供给监控器(如有必要)。敲击 还会抛出异常。如果发生异常,监控器必须调用心跳方法 handleHeartAttack,因为心跳本身只知道该做什么以及如何做。
心跳可以实现 PulseableInterface。这可以用来每隔 $x 秒调用心跳一次。在心跳中如何处理低于脉冲的调用可以由心跳实现。以最小脉冲间隔调用心跳是监控器和心跳之间的一种绅士协议。

心跳客户端

心跳本身有一个 beat 方法。这应该根据需要频繁调用,以更新心跳信息。如果您正在迭代一个项目块,可以在每个或每十个处理的项目后调用 beat

此外,心跳知道在哪里查找信息以及如何将值返回给监控器。这部分需要在 knock 方法中处理。

心跳监控器

心跳监控器为心跳提供了附加和分离机制。您需要做的只是实现一种方式,以持久化方式存储附加的心跳(数据库、文件系统、会话)。

其他接口

该组件还声明了 PulseableInterfaceRuntimeInformationInterface。两者都可以用来从心跳(客户端)检索数据。

工作流程

从被监控进程(客户端)的角度

进程将实例化心跳和监控器。监控器用于附加心跳(即,将心跳添加到可观察心跳列表中)。之后,根据进程中心跳的实现,将使用心跳通过调用 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描述运行时界面的好处和想法
    • 实现监控历史(已完成)
    • 将组件重命名为monitorclientclientHistory(已完成)

版本历史

  • 0.1.0
    • 用单元测试覆盖以下类