更新实时Web服务的最佳实践

我总是好奇大规模的实时Web应用程序更新是如何完成的。 由于应用程序是实时的,这就是为什么它使所有事情变得复杂 – 你不应该停止服务,同时你应该在更新期间将你网站上的活动/变化(在数据库等)恢复到新版本。

首先也是最自然的技术是将所有请求redirect到其他复制服务器,以便在不closures服务的情况下更新原始服务器。

我只是想知道是否还有其他更智能的技术来处理实时Web服务中的更新。 请分享你的经验和意见家伙!

你是否在一台服务器上加载你的网站? 如果没有,我会推测你有某种types的负载平衡器。如果你在一台服务器上加载,扩展并安装一个负载均衡器。

拥有这种服务的乐趣让您不仅可以获得高度的可用性,而且如果您需要处理您的应用程序,则可以禁用其中一台服务器接受来自外部的stream量,然后升级/testing您的应用程序/网站在较不繁忙的交通时段。

我加载我的网站和应用程序(同样的事情)超过15台服务器,有一些用作'对不起服务器',如果我的主服务器正忙,我可以加载到'对不起'。 在这种情况下,我可以在我的备件上工作并升级它们,当我为所有的工作感到高兴的时候,我慢慢地把一个箱子从池中拿出来,一起工作。

通过类似Cacti(www.cacti.net)的方式监控您的网站/networkingstream量,您可以根据stream量查看您的繁忙时间,然后在繁忙时段之外进行更新。

希望这给你一些亮光。

我们通常会“滚动升级”来解决这个问题。 这意味着不是只有一台服务器处理所有负载,而是有N台服务器。 例如,您可以通过简单地停止Apache Web服务器来“停止服务器”。 我们需要另一种机制来保持服务器从Apache的angular度来看,但要保护它免受客户连接的影响。 我们用一个简单的文本文件来做到这一点,这个文件的存在表明我们的负载均衡器将这个服务器的权重标记为0。

对于负载平衡,我们使用开源的Linux虚拟服务器,或LVS: http : //www.linuxvirtualserver.org

它支持“realserver”健康检查。 我们定期运行此健康检查,以维护负载均衡器后面的活动networking服务器列表。

通过标记升级主机,一次升级单台服务器,向其发送testingstream量,确认正在运行,然后将其读取到池中,我们可以有效地将升级转换为实时服务。

当我们谈论在线模式更改时,难以在数据库层上做…但是有一些解决scheme,比如MySQL空间中的Tungsten Cluster,试图解决这个问题。