新闻门户缓存系统

新闻门户缓存系统

我们有新闻门户。我们有 5 个相同的专用盒子。2xE5620、16GB 内存、4x146gb 15k sas raid10。此时瓶颈是 mysql。

一个盒子是负载均衡器(nginx),两个盒子(C,D)是nginx和phpfpm,一个是mysql备份,一个盒子是mysql。

目前,缓存位于框 C 和 D 上。我们使用 memcached,mysql 的结果存储在其中。有时页面中出现白色框(未加载任何内容)。我已经将原子插入到 memcached 中,并对 memcached 操作进行了全面调试。

所以,我认为也许必须制作静态文件。当新文章发布时,为其创建静态 html 文件并使用服务器端包含来显示评论数和显示相同的评论内容。然后 nginx 可以缓存最常用的文件并从内存中提供它们。使用静态页面我们还可以加快页面加载时间。

我正在考虑无 cookie 的域,但我不确定这是否有帮助,因为网络管道不是瓶颈。

问题是:使用什么缓存系统/模型?

答案1

nginx 为两者提供了内置缓存代理快速CGI。通过您的设置,您可以选择使用负载平衡器盒上的代理缓存,或后端 Web 服务器上的 FastCGI 缓存。

一个问题:您需要确保不会缓存包含私人或用户特定信息的命中,然后将其提供给其他人,因此请使用 proxy_no_cache 或 fastcgi_no_cache 并使用位置块来排除您的管理和仅动态区域。

根据您的用户,如果评论页面被缓存而他们没有立即看到他们的评论,他们可能会感到沮丧或再次尝试,因此如果您缓存评论页面,您应该添加一个通知,说明它们可能需要几分钟才能出现(或者无论您告诉 nginx 缓存它多长时间)。

所有这些都假设您为许多访问者生成完全相同的 HTML(新闻门户网站通常就是这种情况,除非您进行每个用户的定制或服务器内广告轮播)。如果您的很大一部分点击量都生成了唯一页面,那么您可能会发现,在短期内修改架构以将负载平衡器换成循环 DNS 和额外的 MySQL 读取从属服务器(假设您的负载是读取密集型的)会更好。

相关内容