我有一个用户使用的REST服务和一个Varnish缓存,以保护数据库免受太多请求。
为了能够对我们的服务公开的数据集执行快速搜索,我们开始使用Elasticsearch来实现这一目的。
保持Varnish和Elastic都是一种糟糕的方法吗?我们应该只使用Elasticsearch吗?
注意:Elastic是NRT系统的事实不是问题。
由于
答案 0 :(得分:1)
我不认为这是一个问题,只要你意识到他们正在解决不同的问题,你可能不应该让varnish缓存你委托给elasticsearch的任何东西。
所以我们的拱门(超高级别)看起来像负载均衡器>清漆> apache web machines
这些网络机器的后端包括elasticsearch和mysql(以及其他内容)。
我们的网站主要分为两个主要区域:1。主页和类似网站,主要由CMS和服务器上呈现的html驱动。 2.)具有宁静端点的单页Web应用程序。客户端负责呈现自己的HTML(我们在这里使用反应)。
对于较重的CMS内容,我们尽可能地进行清漆缓存。对于任何依赖于elasticsearch的东西,我们让varnish传递这些请求。我们对此类事物的URL模式是可预测的,因此它只是varnish.vcl中的一个节。
这个想法是,搜索应该是最新的。我们也不会将ES用于CMS类型的东西,但更多单页网页应用程序进一步深入我们的网站。 CMS的东西每天只会改变几次,但SPA的内容在整个集群中有不断的变化(每秒约25次索引操作)。
答案 1 :(得分:0)
考虑到这一点:https://github.com/elastic/elasticsearch/issues/16024
Varnish剥离了GET请求的JSON主体,因为它无效。因此,在Elastic Search前直接添加它可能会给您带来麻烦。在Elastic Search前面为搜索查询添加一个简单的API可能会有所帮助。