想象一下,您想基于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这样的现有速率限制器。我们的实际用例是不同的,但速率限制器示例有助于达成共识。