我绝对不是这方面的专家,但据我所知fcntl,正如您所说,这不适用于您的情况。fcntl 咨询锁仅在同一台机器内有意义。
如果这是偏离主题的,请忘记我。我使用File::NFSLock来解决缓存风暴/dogpile/stampeding 问题。有多个应用程序服务器在 NFS 卷上读取和写入缓存文件(这不是一个好主意,但这就是我们的开始)。
我对 File::NFSLock 进行子类化/包装以修改其行为。我特别需要:
machine:pid而不只是pid.这几年来效果非常好。
直到请求量增加了 10 倍。也就是说,上个月我开始遇到第一个问题,两个后端同时写入一个非常繁忙的缓存文件,留下死锁。当我们每天的综合浏览量达到 9-1000 万左右时,我就遇到了这种情况,只是为了给您一个想法。
最终损坏的缓存文件如下所示:
<!-- START OF CACHE FILE BY BACKEND b1 -->
... cache file contents ...
<!-- END OF CACHE FILE BY BACKEND b1 -->
... more cache file contents ... wtf ...
<!-- END OF CACHE FILE BY BACKEND b2 -->
Run Code Online (Sandbox Code Playgroud)
仅当两个后端同时写入同一个文件时才会发生这种情况...目前尚不清楚此问题是由 File::NFSLock + 我们的 mods 还是应用程序中的某些错误引起的。
总之,如果您的应用程序不是非常繁忙和流量,那么请选择 File::NFSLock,我认为这是您最好的选择。您确定仍想使用 NFS 吗?
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |