我正在尝试实现某种同步服务。具有不同用户代理的两个客户端可以POST/PATCH同时/sync/user/{user_id}/resource使用相同的 user_id. sync应该更新数据库中用户id={user_id}的数据。
func (syncServer *SyncServer) Upload(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
userID := ps.ByName("user_id"))
if isAlreadyProcessedForUser(userID) {
w.WriteHeader(http.StatusConflict)
return
}
...
syncServer.db.Update(userID, data)
...
}
Upload问题是当另一个仍在处理相同请求时,我不知道如何正确拒绝一个user_id。我认为使用这个想法mutex.Lock()是不好的,因为我会为这个处理程序使用很多 pod,如果Upload在不同的 pod 上调用,它无论如何也帮不了我。我可以使用什么同步方法来解决这个问题?我应该在数据库中使用一些额外的字段吗?我要求给我任何想法!
慕运维8079593
相关分类