HaD*_*Min 3 postgresql nginx materialized-views amazon-web-services redis
我目前正在运行一个 AWS EC2 Ubuntu 服务器,它从 Postgres RDS 数据库实例中获取数据。在特定页面的视图函数中使用的 SQL 查询之一有很多连接并且运行速度很慢。我试图减少查询并删除一些可能有点不必要的连接,但它仍然需要比预期更长的加载时间(至少 6 秒)。我目前正在研究潜在的缓存策略,以帮助加快页面服务的速度。
我曾考虑使用物化视图,但是原始视图函数获取的数据平均每 30 秒更新一次,我担心实现触发器或常规 cron 作业来刷新 MatView 这通常会对其造成影响数据库,并且可能不是定期更新和更改数据的最佳策略(除非有人可以建议另一种更新 MatView 中行的方法,该方法不涉及运行与原始查询非常相似的查询)
到目前为止,我已经在 Elasticache 实例上测试了 Redis,并对其工作方式印象深刻,但是我也被推荐查看 Nginx 和 Varnish 缓存策略。
我有点困惑哪种缓存策略最适合这种情况。与 EC2 实例上的 Nginx/Varnish 实现相比,Elasticache 实例上的 Redis/Memcached 是否有点过于重量级?尝试缓存在 Nginx 缓存上经常更改的数据是否被认为是一个坏主意?
小智 5
粗略地说,您将使用像 Redis 或 Elasticache 这样的低级缓存来缓存原始数据(例如 SQL 查询的结果);而您将使用更高级别的缓存(如 Nginx 或 Varnish)来缓存显示数据的整个 HTML 页面。因此,哪一个合适取决于您的用例。如果您有一个包含慢速数据的简单页面(或页面片段),并且该内容向所有用户显示的内容相同,那么高级缓存可能是合适的。如果内容需要进行大量小的调整和重新格式化,这会使整个页面缓存非常碎片化,那么较低级别的缓存将是合适的。
实际上,这些技术与这种高/低分离并没有紧密联系:您可以将整个页面存储在 Redis 中,将单个数据片段存储在 Varnish 中,所以它不是那么简单。但在一般情况下,决定什么要缓存后再决定如何缓存它。
即使您已经决定要缓存什么,选择正确的技术也将取决于很多考虑因素。AWS 上的 Elasticache 具有完全托管的优势,因此可以节省您的维护费用,但可能是运行成本最高的(至少在中小型规模上)。使用文件系统后端的 Nginx 缓存可能是最快和最便宜的,但不会很好地扩展(随着规模的增加,重构会很尴尬)。Varnish 和 Redis 可能最好作为单独的 EC2 实例实现,所以坐在中间的某个地方。
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |