2011-08-21 57 views
1

我是卡桑德拉的新人,请耐心等待。如何避免使网络服务器成为卡桑德拉的瓶颈?

所以,我建立一个使用Cassandra作为分贝的搜索引擎。我通过Pycassa与它互动。

现在,我想输出Cassandra对网页的响应,让用户提交一个查询。

我知道诸如django,fastCGI,SCGI等允许python进行web交互的工具。然而,如何在不将服务器变成单点故障(即,如果该服务器死亡而不是系统不能被用户访问)的情况下如何在web服务器上运行python脚本 - 并因此否定Cassandra的一个目的?

+0

你真的是指_bottleneck_在这里吗? _“如果此服务器确实无法访问系统”_描述[单点故障](http://en.wikipedia.org/wiki/Single_point_of_failure) –

回答

3

我以前见过这个问题 - 有时人们需要更多的CPU能力和带宽来生成和提供一些服务器生成的HTML和图像,而不是在Cassandra中运行实际查询。对于一个客户来说,这比服务于Cassandra集群的服务器数量多10倍。

您需要以某种方式在这些前端服务器之间进行负载平衡 - 在几台专用机器上调查运行haproxy。它的配置快速且简单,并且在安装程序更改时也很容易重新配置(与DNS可能需要数天才能传播更改)。我想你也可以配置nginx来做同样的事情。如果在前端服务器中保留每个会话的信息,则每个客户端都需要为每个请求前往相同的前端服务器 - 这称为“会话持久性”,可以通过散列客户端的IP来挑选前端服务器。 Haproxy会为你做这个。

但是,这种方法将再次在您的配置(haproxy服务器)中创建一个SPOF - 您应该运行多个,并且可能有热备份。最后,您需要以某种方式平衡您的haproxies之间的负载 - 我们通常使用循环DNS来实现此目的,因为运行haproxy的节点很少发生变化。

该系统的好处是,您可以轻松地扩大(和缩小)前端服务器的数量,而无需更改您的DNS。你可以阅读(一点点)更多关于我指的设置:http://www.acunu.com/blogs/andy-ormsby/using-cassandra-acunu-power-britains-got-talent/

+0

谢谢。我会仔细看看你说的话。 – rikAtee