可以清漆每秒处理数十万个请求吗? 如果没有,我可以把它集群吗?

我打算有一个类似于:

nginx - nginx - nginx - nginx \ \ / / varnish / | \ app server - app server - app server 

(应用程序服务器是完全相同的,意思是一个请求可以通过Varnish路由到他们中的任何一个。)该图中的清漆将每秒处理(可能)数十万个请求。 可以这样做吗?

我宁愿运行多个Varnish服务器,为了故障转移和性能的原因,但我看到的直接问题是caching不会有太多的用处,因为每个请求会碰到不同的Varnish服务器,直到每个Varnish服务器有一个caching对象的副本。 什么是正确的方法来做到这一点? (同样,应用程序服务器与Varnish相同,请求路由到哪里并不重要。我想要多个Varnish服务器(在nginx的负载平衡之后)处理请求。)

我最近处理了同样的问题。 清漆可以每秒处理很多请求,但是您应该使用您的设置(硬件,networking,响应大小,命中率)来testing清漆,以了解性能数字。 除了性能之外,还有故障转移的问题来开始平衡。

  • 如果url是你的caching键,你可以在nginx中设置一个机制,根据url(varnish_instance = hash(url)modulo nr_of_varnishes)select一个特定的varnish实例。 如果varnish在将URL转发到后端或者进行caching查找之前会重写url,并且不同的url会被重写为同一个新的url,那么这个技巧是无效的。

  • 在我的情况下,我无法路由基于负载均衡器的URL。 我们使用lvs-dr,根本就不知道平衡器的URL。

  • 我玩过这个想法,build立这样一个清漆发行机制。 可以将其他清漆configuration为“后端”,计算散列并将请求路由到正确的清漆。 “正确的”清漆进行后端调用并将其存储在caching中。 其他清漆可以存储的结果,但不必。 这种设置使得你的清漆configuration变得更加复杂,所以在select这样的path之前仔细思考。 直接路由(lvs-dr的一部分)使得它更加复杂。

最后,我select了一个简单的解决scheme:将请求分发给两个大的清漆实例,而不需要任何聪明的东西。 结果计算和caching两次,但清漆configuration保持尽可能简单。