我们公司目前面向客户的站点和Intranet站点目前build立在运行IIS 6的传统ASP上。当前站点仅包含大约10个面向客户的页面,以及pipe理人力资源logging,调度等的内部站点。
pipe理层决定,我们将使用这个改写项目来最终开发我们的网上零售店。 他们希望我们使用地理上独立的设施(也是完全不同的ISP)来提供故障切换,以防万一主要设施的WAN链路断开。
我们selectPython进行重写,因为我们希望能够转移到基于Linux的平台,而且我们目前在其他内部开发项目中使用Python。
我们查看了各种Python Web开发框架,CherryPy似乎非常适合我们所需要的,这是为Python生成的内容提供服务的最小环境。 但是,在使用负载平衡和故障转移技术的CherryPy上find信息时遇到了问题。
看起来,我们将被迫在Apache上托pipeCherryPy,以利用支持粘性会话的故障转移/负载平衡群集。 这是正确的,或者有没有办法使用CherryPy的内部服务器或完全不同的HTTP服务器?
另外,是否有服务提供了一种方式来引导集群中的stream量,以便我们不必自己托pipe它? 我们需要能够在两个数据中心之间分配stream量,但是如果WAN链路断开,则不会影响集群将stream量导向仍然可用的集群的能力。
这有两个主要部分,
– 跨多个数据中心的负载平衡和故障转移
– 数据中心内的多个服务器之间的负载平衡和故障转移
多数据中心有三种主要的方式:BGP /“anycast”,GSLB / DNS,或者在CDN中使用起源 – 故障切换机制。 没有一个是简单,容易或便宜的。
一旦用户的stream量从那里到达特定的数据中心,您就需要一个负载均衡器组件。 这里有很多选项可以大致分为设备对软件和layer4-vs-layer7。 从你所做的细节来看,我敢打赌,你的需求非常简单,你的预算很小,所以让我们直接跳到这个部分的nginx。 在nginx中,你可以configuration它来为你的静态内容提供服务,并且像运行你的python应用程序一样,通过尽可能多的后端服务器来平衡你的dynamic内容。
祝你好运,它已经开始了漫长的道路。
在你的问题中,有很多子问题应该是他们自己的条目 – 但是我们还是要解决它们…
CherryPy的“服务器”不应该在生产中使用,这对开发很有用,但是你真的应该在你的CherryPy应用程序前面使用Nginx和Fastcgi设置。 这将使您更好地控制服务器的负载以及需要运行多less个CherryPy应用程序来pipe理负载。
您对跨ISP的负载平衡的担忧让我觉得您比负载平衡更担心重做,因为您需要担心让数据在不同的数据中心之间保持同步,这是一个更大的担心,而不是如何平衡负载。
根据您可以处理多less预算痛苦,决定使用硬件负载均衡器还是软件解决scheme。 如果您正在寻找冗余,您可以将服务器设置镜像到另一个站点,然后在发生故障时更改DNSlogging以指向该站点。 其他任何东西都需要硬件解决scheme,包括像上面提到的网眼牛排这样的首字母缩略词的字母表。
我们使用ZXTM来负载平衡同一个CherryPy节点的多个实例。 很好用。
CherryPy的最新版本(例如,3.0.4和3.2)包含对WSGI服务器的修复,以使其更健壮。 即使传入的请求队列已满(即所有工作线程都忙)以前的版本也会接受新的连接并挂接到它们。 现在,您可以将server.accepted_queue_timeout设置为0,如果您希望立即拒绝它们。 立即closures连接允许ZXTM尝试将连接立即传递到另一个节点。
你确定这是你需要的吗? 问你的pipe理层一个可接受的停机时间的数字,他们可能会很好地降低到现实的水平。 两个完全独立的网站把你放在大男孩的类别,与解决scheme相匹配的价格。
也许你可以find一个可靠的互联网合作伙伴定制解决scheme? find一个愿意为不同的机架(使用不同的电源),两台接入交换机,两台核心路由器,以及两个完全不同的上行链路的用户提供colo。