在哪里存储系统标志


Where to store a system flag?

这似乎是一个愚蠢的问题,但经过几天的思考,我只想出了一个答案,所以我想我应该把它打开,看看其他人的想法。

我有一个PHP脚本作为CRON作业运行,并检查我们的CDN是否启动并运行。如果是,它需要设置一个标志来显示"真",如果不显示"假"。主PHP网页需要在每次用户访问网站时检查此标志,并适当设置CDN URL变量。

查询是我们在哪里存储这个标志?我们可以把它放在数据库中,但是数据库会在每次页面加载时被"击中"。此外,当我们使用Memcache时,它可能会导致更新延迟(尽管显然有办法解决这个问题)。

我的下一个想法是将它保存到服务器上的一个简单的文本文件中。但是a)我们有负载均衡的服务器,虽然我们可以在每台服务器上运行相同的CRON作业,但这似乎效率低下,b)我认为打开和读取文本文件可能会减慢页面加载速度,因为它每次都涉及磁盘活动——当系统每周交付300万个网页时,这并不好!

理想的情况是PHP系统变量在页面之间保持其值-当然,这是不存在的!这类信息也不应该以cookie的形式存储在用户机器上。

大家有什么想法吗?欢迎所有评论!

如果您已经在使用Memcache,那么为什么还需要CronJob呢?

将CDN的检查放入常规应用程序代码中。将结果缓存在Memcache中,其生命周期与当前的Cron间隔相同。如果缓存已过期,则对CDN进行全面检查,否则返回缓存结果。

如果您希望保留CRON作业并关心磁盘I/O,请考虑使用RAM磁盘或信号量或共享内存来存储结果。但是当你已经在使用memcache时,这似乎有点毫无意义。

是否已经使用数据库连接?

  • 如果是,使用;

  • 如果没有,那么无论你在这里做什么都将增加开销,无论是读取磁盘上的文本文件还是从数据库中读取之前没有读取的文件。