如果服务器崩溃,我该如何处理?

时间:2015-07-03 17:48:12

标签: java sockets crash server

我想知道我是否有2台服务器,一台是" main"服务器和另一个就在那里(两者都使用相同的后端代码)。如果主服务器崩溃并且我希望我的客户端使用其他服务器,那么我应该如何处理,这样他们就不必重新启动他们的程序或类似的东西。

我已经阅读了使用欺负算法,但我在如何处理客户端在第一个主要使用的套接字和数据(消息)方面感到迷茫服务器,并在我的第二台服务器中使用它。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

首先,如果服务器崩溃,您无法对驻留在其上的数据做任何事情(当然,直到服务器重新启动)。因此,如果您不想在发生故障时丢失数据,则应使用分布式(NoSQL?)数据存储(例如Cassandra,Redis,DynamoDB等),因为它们已经以可扩展的方式解决了这个问题。 / p>

其次,如果您的问题是'当A失败时如何将我的请求从A路由到B',您可以使用简单的(例如基于NodeJS)代理来扩展您的服务器A和B.最初,代理将“转发”所有客户端请求到A.当A崩溃时,代理检测到(可能是当它看到所有转发的请求已经过去x秒超时)并切换到服务器B. 但是,将有一个小的时间窗口(取决于您配置的x值)客户端请求将继续失败。

https://github.com/nodejitsu/node-http-proxy

答案 2 :(得分:0)

  1. 如果您在服务器上存储任何您不希望在服务器关闭时松动的状态,则将您的状态存储在两个特定的数据库服务器上 - 主服务器和副本服务器。如果您不知道要选择哪个数据库服务器,请告诉我,我会向您提出其他问题以帮助您。
  2. 如果您使用服务器的客户端代码在您的控制之下,那么在那里实现所有容错逻辑。最简单的方法是“循环” - 连接到随机服务器,直到找到满足您请求的服务器。谷歌“循环”了解更多细节。
  3. 如果客户端代码不在您的控制之下,那么您应该使用BGP负载平衡。这样做的主要思想是,一旦服务器关闭,另一台服务器就会获得第一台服务器的IP地址,例如在客户端,一切都很完美。有关详细信息,只需谷歌“bgp负载平衡”。