此服务是remote session pool
。我需要要求一个会话与其他服务一起工作。在大多数情况下,这个池将有一个会话可用,所以在15ms我会有一个响应。但有时,它需要按需创建会话,需要最多800毫秒来创建它。
我有两种选择来处理这种情况:
设置15ms的超时时间,并以指数退避实现重试策略,直到800ms。无论我是否与其连接,此服务都将创建所需的会话。
设置800毫秒超时,并保持与服务的连接,直到我可以使用会话。
在这两种情况下,都不能保证我会在800ms后开会。
所以问题是:每个选项的优缺点是什么?
答案 0 :(得分:1)
1。设置15ms超时,并以指数退避实现重试策略,直到800ms。无论我是否连接到该服务,该服务都将创建所需的会话。
临
缺点
2。设置800毫秒超时,并保持连接到服务,直到会话可用为止。
临
缺点
-
我认为决策驱动因素是您是否需要针对此用例的正常工作的解决方案,或者此方法是否将用于不同的客户端和用例。
PS:如果您需要为不同的客户创建解决方案,那么创建更复杂的协议也是值得的,例如:
// just takes a session if available, no more than 15msec delay expected
get_session(...) : session
// if not available, creates one
get_session_or_create(...) : session
available_sessions(...) : int
// between 0 and 1, the proportion of available sessions
availability(...) : double
...
由客户决定如何使用它。
根据会话创建延迟差异,将超时参数的大小设置为某个安全%。