服务器失效备援和轮循如何设计,对于宕机的服务器,服务器恢复后,程序如何识别。比如有3台服务器,a,b,c,当第一个请求到达a时,如果a没有出现问题则a进行处理,如果
a出现问题处理不了请求,则将请求发送到b服务器,依次类推,每当有一台服务器宕机之后,
就会将宕机的服务器记录,当3台全部宕机之后,就返回服务器错误。现在关键的问题在于,
服务器恢复之后需要将恢复的服务器从宕机服务器记录中除去,如何除去呢?是不是需要起
一个守护线程来监听服务器的状态,如果恢复则从宕机服务器记录中除去?请高手们指点。

解决方案 »

  1.   

    一般来说都可以通过配置实现,你是不需要去自己写线程的。
    如果是 apache + tomcat你可以百度到解决方案的。
      

  2.   

    我也不想自己写,但是
    现在的情况是,没有apache,tomcat容器中部署了一个webservice服务,而该服务通过socket与后台处理程序通信,该后台处理程序并不是web程序,是一个java应用,而该java应用需要做失效备援和负载均衡。目前自己写好了,少量用户测试是可以的,但是大用户量的情况就不知道了,请高手来指点!
      

  3.   


    我现在就是用的这样的方法,但是如果所有的服务器都坏掉的话,用户的请求会一直循环下去,造成死循环,
    如果设置临界状态的话,可以防止死循环,也就是说所有的服务器都坏掉之后,告诉用户服务器都坏了,但是如果下个请求到来的时候其中某台服务器恢复了的话,就必须更改临界状态,否则的话还会造成死循环,,仍然会认为所以的服务器都坏了,所以我起了一个后台线程,按设置的时间来扫描服务器,坏掉的服务器恢复之后会把坏掉的服务器在badservers列表中删除,我不知道这样设计是否可行。
      

  4.   


    我指的2次 是(1,2,3...n) m秒后 (1,2,3...n)
      

  5.   


    服务端全挂掉的话,那肯定是客户端轮询了。不一定要死循环,客户端每隔几分钟重连几次,期间来的请求,如果连上了就调用,否则就返回失败状态。我们有一个应用用的是接口方公司提供的 api jar 包,其是 Socket 长连接的。他们做得倒好,只要服务端一维护,客户端就在那死循环了,所有的请求线程全部阻塞,害得我们的应用老是因为线程池耗尽而拒绝服务。
      

  6.   


    客户端怎么隔几分钟重连几次?如果服务器全坏掉的话,只要客户端一连接就是死循环,除非设置超时。假如有a,b,c,d四台服务器,当这4台全坏掉的时候,某个请求到达a的时候,那么会出现
    a->b->c->d->a这样的轮循请求,这不就是死循环吗?所以我起了一个监听服务器状态的线程,当服务器全
    坏掉的时候就告诉客户端现在服务器全坏了不能处理请求,关键的是当其中某台服务器恢复的时候,比如d
    服务器恢复了,需要改变这个临界状态,否则,假如当d刚好恢复的时候请求到达了a服务器,那么客户端仍旧
    会被告之服务器全坏了,除非恰巧请求到达了d服务器。所以现在我是这样的想的,在客户端请求服务器之前起一个监听,在监听中监听服务器的状态,只返回给
    客户端可用的服务器socket,这样的话就没必要设置临界状态了,当监听发现服务器全坏掉的时候,直接告之
    客户端没有可用的服务器,这样就省掉了客户端连接不可用的服务器的连接时间。
      

  7.   

    int requestCount = 0;while(requestCount < 5){
      //尝试连接
      if(成功){
        reqeustCount = 0;
        break;
      } else {
        requestCount++;
      }
      

  8.   


    上面的方法封装在一个public Connection getConn()的方法里然后 while(true){
       Connection = getConn();
       if(conn != null){
         break;
       } 
       Thread.sleep(过n分钟再试试);
    }
      

  9.   

    所以现在我是这样的想的,在客户端请求服务器之前起一个监听,在监听中监听服务器的状态,只返回给
    客户端可用的服务器socket,这样的话就没必要设置临界状态了,当监听发现服务器全坏掉的时候,直接告之
    客户端没有可用的服务器,这样就省掉了客户端连接不可用的服务器的连接时间。你的监听是否也有监听次数,监听间隔的问题?
      

  10.   

    抓异常。 判断当抓的异常时因为宕机造成的 就在catch模块里去连接另外一台机 以此类推。