【发布时间】:2013-05-13 18:47:24
【问题描述】:
当请求的操作导致数据库死锁时,服务器返回503 ("Service Unavailable") 是否合适?
这是我的推理:
- 最初我尝试避免数据库死锁,但我遇到了https://stackoverflow.com/a/112256/14731
- 接下来,我尝试在服务器端重复请求,但遇到了Java Servlets: How to repeat an HTTP request?。从技术上讲,我可以缓冲请求实体,但可扩展性会受到影响,并且客户端更有可能看到
503 Service Unavailable。
看成:
- 要求客户重复操作更容易。
- 无论如何,他们需要能够处理
503 Service Unavailable。 - 数据库死锁相当少见。
我倾向于这个解决方案。你怎么看?
更新:如果您愿意,我认为返回503 ("Service Unavailable") 仍然是可以接受的,但我不再认为它在技术上是必需的。见https://stackoverflow.com/a/17960047/14731。
【问题讨论】:
-
即使您在生产环境中对此进行编程,您仍可能以超时结束,这将导致您的负载平衡代理向客户端发送 504。
-
@agilevic,你是什么意思?你是说我需要确保将超时死锁配置为使用较小的超时值来避免
HTTP 504? -
数据库死锁的持续时间可能比负载均衡器的超时时间长,因此会阻塞响应。如果您能够在超时之前检测到死锁,您可以使用 503 响应客户端 - 一个明智的选择。
标签: rest database-deadlocks http-status-code-503