今日头条Go建千亿级微服务的实践
Wait和Cancel两种并发控制方式,在使用 Go 开发服务的时候到处都有体现,只要使用了并发就会用到这两种模式.在上面的例子中,GW 启动5个协程发起5个并行的 RPC 调用之后,主协程就会进入等待状态,需要等待这5次 RPC 调用的返回结果,这就是 Wait 模式.另一中 Cancel 模式,在5次 RPC 调用返回之前,已经到达本次请求处理的总超时时间,这时候就需要 Cancel 所有未完成的 RPC 请求,提前结束协程.Wait 模式使用会比较广泛一些,而对于 Cancel 模式主要体现在超时控制和资源回收. 在 Go 语言中,分别有 sync.WaitGroup 和 context.Context 来实现这两种模式. 超时控制合理的超时控制在构建可靠的大规模微服务架构显得非常重要,不合理的超时设置或者超时设置失效将会引起整个调用链上的服务雪崩. 图中被依赖的服务G由于某种原因导致响应比较慢,因此上游服务的请求都会阻塞在服务G的调用上.如果此时上游服务没有合理的超时控制,导致请求阻塞在服务G上无法释放,那么上游服务自身也会受到影响,进一步影响到整个调用链上各个服务. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |