php无状态实现,PHP中无状态Web应用程序中的持久性多节点事件

我正在构建一个将在多个节点上运行的OO

PHP应用程序,并且本质上将是相对无状态的,我需要实现正确的发布者 – 订阅者(

http://en.wikipedia.org/wiki/Observer_pattern/

http://sourcemaking.com/design_patterns/Observer/php)样式事件.

我的问题是,我该如何处理事件?

在我的应用程序中,我们使用的是Cassandra,Redis,Mongo和RabbitMQ等技术.

我知道PHP有一个事件EXTENSION可用,但从我可以告诉它坚持状态 – 或者如果利用memcached之类的东西它可以在该节点内使用…但我的应用程序将分布在多个节点上.

那么让我们看一个例子:

在节点1上,更新度量(度量标准ID 37),并且需要更新订阅该度量的任何内容.这会在更新时发布更改和更改.

我有一些订阅更新的度量标准ID 37,例如度量标准38,可能需要在度量标准37的值更改时重新计算.

度量标准38当前已实例化并在进程ID 1011中的节点2上使用…度量标准37如何告知节点2上的度量标准38(在这种情况下为进程ID 1011)以运行预订函数?

Metric 39订阅Metric 38正在更新,但未在任何地方实例化…当Metric 38完成更新时,Metric 39如何更新?

我正在考虑使用RabbitMQ作为我的事件队列管理器,并且在每个节点上都有一个守护进程样式的“事件使用者”应用程序,它读取事件队列中的事件(为了负载平衡/分配工作).

然后消费者看到“Metric:38:Updated”它会检查像Redis那样订阅“Metric:38:Updated”的内容并获取值(“What:Function:Values”)并执行类似call_user_func_array(array($what)的操作,$函数),$值); ….但这似乎可能会导致开销和一定程度的同步问题…

我正在使用Doctrine MongoDB ODM来保存我的对象……为了处理同步问题我想到了这样的事情:

对象可以有版本号…(版本= 1.0)

并且redis可用于维护对象的最新版本的快速引用(ObjectVersion:ObjectType:ObjectId)= 1.1

当在标记为@critical的对象属性上调用getter(像isDeleted,货币余额等)时,它可以检查实例的版本ID是否等于redis中的版本#,如果需要则从mongo更新其值至…

因为我对网络开发(从c#转移)和无状态,并且分发…相当新.我认为向社区询问是否有人有更好的建议是个好主意?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值