我是Cassandra的新人,所以请耐心等待。
所以,我正在使用Cassandra作为数据库来构建搜索引擎。我通过Pycassa与它互动。
现在,我希望将Cassandra的响应输出到网页,让用户提交查询。
我知道django,fastCGI,SCGI等工具可以让python进行网络交互。但是,如何在Web服务器上运行python脚本而不将此服务器转变为单点故障(即,如果此服务器死亡而不是用户无法访问系统) - 并因此否定了Cassandra的一个目的?
答案 0 :(得分:3)
我以前见过这个问题 - 有时人们需要更多的CPU能力和带宽来生成和服务一些服务器生成的HTML和图像,而不是在Cassandra中运行实际查询。对于一个客户来说,服务于网站前端的服务器数量是其Cassandra集群的10倍。
您需要以某种方式在这些前端服务器之间进行负载平衡 - 调查在几台专用计算机上运行 haproxy 。它的设置快速且易于配置,并且在设置更改时同样易于重新配置(与DNS不同,DNS可能需要数天才能传播更改)。我想你也可以配置nginx来做同样的事情。如果您在前端服务器中保留每个会话信息,您将需要每个客户端为每个请求转到相同的前端服务器 - 这称为“会话持久性”,并且可以通过散列客户端的IP来选择前端服务器。 Haproxy会为你做这件事。
然而,这种方法将再次在您的配置(haproxy服务器)中创建SPOF - 您应该运行多个,并且可能具有热备用。最后,你需要以某种方式平衡你的haproxies之间的负载 - 我们通常使用循环DNS,因为运行haproxy的节点很少改变。
此系统的好处是您可以轻松扩展(和缩小)前端服务器的数量,而无需更改DNS。您可以阅读(一点点)有关我所指的设置的更多信息:http://www.acunu.com/blogs/andy-ormsby/using-cassandra-acunu-power-britains-got-talent/
答案 1 :(得分:0)
Theo Schlossnagle的Scalable Internet Architectures涵盖了负载平衡等等。强烈推荐。