服务器失效备援和轮循如何设计,对于宕机的服务器,服务器恢复后,程序如何识别。比如有3台服务器,a,b,c,当第一个请求到达a时,如果a没有出现问题则a进行处理,如果
a出现问题处理不了请求,则将请求发送到b服务器,依次类推,每当有一台服务器宕机之后,
就会将宕机的服务器记录,当3台全部宕机之后,就返回服务器错误。现在关键的问题在于,
服务器恢复之后需要将恢复的服务器从宕机服务器记录中除去,如何除去呢?是不是需要起
一个守护线程来监听服务器的状态,如果恢复则从宕机服务器记录中除去?请高手们指点。
a出现问题处理不了请求,则将请求发送到b服务器,依次类推,每当有一台服务器宕机之后,
就会将宕机的服务器记录,当3台全部宕机之后,就返回服务器错误。现在关键的问题在于,
服务器恢复之后需要将恢复的服务器从宕机服务器记录中除去,如何除去呢?是不是需要起
一个守护线程来监听服务器的状态,如果恢复则从宕机服务器记录中除去?请高手们指点。
解决方案 »
- 求助!SSH使用Hibernate 注解把“创建时间或者修改时间”设置为数据库当前时间
- 发帖请教个问题,顺便测试一下可用分。
- struts1 与 struts2 的区别?
- Junit测试struts+Spring+Hibernate框架问题
- ***jsp页面中嵌入applet小程序为什么出不来啊?急!!!*******
- Tomcate总是跳出这玩意怎么破? 也没有打断点,自动跳
- 关于struts客户端验证的困惑,值得探讨??
- J2EE问题(做过J2EE项目的高手请进)
- j2ee1.3启动错误,问了好久了也没解决,实在是受不了啊,在线等待~~~
- Array data type in web service
- 请问UltraEdit中的列模式就是文本竖向选择功能是怎么实现的?
- 要做课程设计了,但是不知道用什么设计方法,求助~~~
如果是 apache + tomcat你可以百度到解决方案的。
现在的情况是,没有apache,tomcat容器中部署了一个webservice服务,而该服务通过socket与后台处理程序通信,该后台处理程序并不是web程序,是一个java应用,而该java应用需要做失效备援和负载均衡。目前自己写好了,少量用户测试是可以的,但是大用户量的情况就不知道了,请高手来指点!
我现在就是用的这样的方法,但是如果所有的服务器都坏掉的话,用户的请求会一直循环下去,造成死循环,
如果设置临界状态的话,可以防止死循环,也就是说所有的服务器都坏掉之后,告诉用户服务器都坏了,但是如果下个请求到来的时候其中某台服务器恢复了的话,就必须更改临界状态,否则的话还会造成死循环,,仍然会认为所以的服务器都坏了,所以我起了一个后台线程,按设置的时间来扫描服务器,坏掉的服务器恢复之后会把坏掉的服务器在badservers列表中删除,我不知道这样设计是否可行。
我指的2次 是(1,2,3...n) m秒后 (1,2,3...n)
服务端全挂掉的话,那肯定是客户端轮询了。不一定要死循环,客户端每隔几分钟重连几次,期间来的请求,如果连上了就调用,否则就返回失败状态。我们有一个应用用的是接口方公司提供的 api jar 包,其是 Socket 长连接的。他们做得倒好,只要服务端一维护,客户端就在那死循环了,所有的请求线程全部阻塞,害得我们的应用老是因为线程池耗尽而拒绝服务。
客户端怎么隔几分钟重连几次?如果服务器全坏掉的话,只要客户端一连接就是死循环,除非设置超时。假如有a,b,c,d四台服务器,当这4台全坏掉的时候,某个请求到达a的时候,那么会出现
a->b->c->d->a这样的轮循请求,这不就是死循环吗?所以我起了一个监听服务器状态的线程,当服务器全
坏掉的时候就告诉客户端现在服务器全坏了不能处理请求,关键的是当其中某台服务器恢复的时候,比如d
服务器恢复了,需要改变这个临界状态,否则,假如当d刚好恢复的时候请求到达了a服务器,那么客户端仍旧
会被告之服务器全坏了,除非恰巧请求到达了d服务器。所以现在我是这样的想的,在客户端请求服务器之前起一个监听,在监听中监听服务器的状态,只返回给
客户端可用的服务器socket,这样的话就没必要设置临界状态了,当监听发现服务器全坏掉的时候,直接告之
客户端没有可用的服务器,这样就省掉了客户端连接不可用的服务器的连接时间。
//尝试连接
if(成功){
reqeustCount = 0;
break;
} else {
requestCount++;
}
}
上面的方法封装在一个public Connection getConn()的方法里然后 while(true){
Connection = getConn();
if(conn != null){
break;
}
Thread.sleep(过n分钟再试试);
}
客户端可用的服务器socket,这样的话就没必要设置临界状态了,当监听发现服务器全坏掉的时候,直接告之
客户端没有可用的服务器,这样就省掉了客户端连接不可用的服务器的连接时间。你的监听是否也有监听次数,监听间隔的问题?