服务器程序中如何设计retry功能
2013-02-27 10:23
267 查看
集群中有client、server1, server2三台机器,client需要向server请求数据,如果server1响应超时,则请求server2。server1、server2互为备份,包含同样的数据。
client:
timeout是外部传给client的总超时数。上面的代码有一个问题:当网络阻塞或者server十分繁忙的时候,do_request会超时,一旦超时,则总超时时间都被耗尽,根本没有剩余时间去重试下一个server。
因此,正确的retry设计需要考虑到“网络阻塞或者server十分繁忙”的情况,分给每个server的timeout时间只能是总timeout的一部分,代码改写如下:
不过,对于server挂掉的情况(socket层面无法连接)do_request请求这个server会立即失败,可以不设置timeout_percent。
client:
for (id = 0; id < 2; id++) { if (TIMEOUT == do_request(server[id], timeout, req) ) { continue; // retry next server } }
timeout是外部传给client的总超时数。上面的代码有一个问题:当网络阻塞或者server十分繁忙的时候,do_request会超时,一旦超时,则总超时时间都被耗尽,根本没有剩余时间去重试下一个server。
因此,正确的retry设计需要考虑到“网络阻塞或者server十分繁忙”的情况,分给每个server的timeout时间只能是总timeout的一部分,代码改写如下:
for (id = 0; id < 2; id++) { if (TIMEOUT == do_request(server[id], timeout * get_timeout_percent(), req) ) { continue; // retry next server } }
不过,对于server挂掉的情况(socket层面无法连接)do_request请求这个server会立即失败,可以不设置timeout_percent。
相关文章推荐
- 服务器程序中如何设计backup task功能
- 如何设计游戏中的道具功能(二)
- 如何设计安全的用户登录功能
- 如何使用Delphi设计强大的服务器程序
- 如何设计安全的用户登录功能
- 如何设计安全的用户登录功能
- web系统如何设计登陆功能
- 如何设计游戏中的道具功能(三)
- 如何结合hibernate进行复杂的查询功能设计
- 如何使用Delphi设计强大的服务器程序
- 挑战OOAD:游戏中物品使用时候的不同功能,用OO的方式,该如何设计?
- 如何利用Android特点及设计模式 设计一个网络下载功能
- 新功能(设计)如何上线?
- 陈皓:如何设计“找回用户帐号”功能
- 如何设计电子商务网站的功能
- 如何设计登录界面“记住我”的功能?
- 新功能(设计)如何上线?
- 如何设计一门语言(十一)——删减语言的功能
- 如何理解UX 设计中的功能动效
- 如何使用Delphi设计强大的服务器程序