如何优雅地实现并发编排任务

 

本文转载自微信公众号「吴亲强的何优深夜食堂」,作者吴亲库里。雅地转载本文请联系吴亲强的实现深夜食堂公众号。

业务场景

在做任务开发的并发编排时候,你们一定会碰到以下场景:

场景1:调用第三方接口的任务时候, 一个需求你需要调用不同的何优接口,做数据组装。雅地

场景2:一个应用首页可能依托于很多服务。实现那就涉及到在加载页面时需要同时请求多个服务的并发编排接口。这一步往往是任务由后端统一调用组装数据再返回给前端,网站模板也就是何优所谓的 BFF(Backend For Frontend) 层。

针对以上两种场景,雅地假设在没有强依赖关系下,实现选择串行调用,并发编排那么总耗时即:

time=s1+s2+....sn 

按照当代秒入百万的任务有为青年,这么长时间早就把你祖宗十八代问候了一遍。

为了伟大的KPI,我们往往会选择并发地调用这些依赖接口。那么总耗时就是:

time=max(s1,s2,s3.....,sn) 

当然开始堆业务的时候可以先串行化,等到上面的服务器租用人着急的时候,亮出绝招。

这样,年底 PPT 就可以加上浓重的一笔流水账:为业务某个接口提高百分之XXX性能,间接产生XXX价值。

当然这一切的前提是,做老板不懂技术,做技术”懂”你。

言归正传,如果修改成并发调用,你可能会这么写,

package main import (     "fmt"     "sync"     "time" ) func main() {      var wg sync.WaitGroup     wg.Add(2)     var userInfo *User     var productList []Product     go func() {          defer wg.Done()         userInfo, _ = getUser()     }()     go func() {          defer wg.Done()         productList, _ = getProductList()     }()     wg.Wait()     fmt.Printf("用户信息:%+v\n", userInfo)     fmt.Printf("商品信息:%+v\n", productList) } /
系统运维
上一篇:超大规模数据中心内的数据链路层自动测试案例
下一篇:如何减少数据中心网络拥塞