想象一下,你想根据mod_lua为Apache 2.4编写自己的速率限制器。这个想法是限制每个IP的每个时间间隔的请求。
对于此任务,您需要维护一个全局可访问的数据结构,其中包含例如每个IP先前请求的计数。
mod_lua支持使用 ivm_set 和 ivm_get 方法的请求之间的共享内存,但只支持一个工作进程:
值...存储在每个进程的基础上(因此它们对prefork mpm不会有太大帮助)
通常您使用多个工作进程。在我们的例子中,我们使用mod_mpm_event和几个进程。在这种情况下,您如何分享这个小“先前请求”数据结构?
我目前唯一能想到的方法是使用mod_lua支持的数据库。但是,对于这么简单的任务来说,这似乎是一个非常复杂的解决方案。
问题:如何在mod_lua中的所有请求之间完成共享内存?
PS:我知道现有的速率限制器如mod_qos。我们的实际用例是不同的,但速率限制器示例有助于达成共识。