Golang被證明非常適合并發(fā)編程,goroutine比異步編程更易讀、優(yōu)雅、高效。本文提出一個適合由Golang實現(xiàn)的Pipeline執(zhí)行模型,適合批量處理大量數(shù)據(jù)(ETL)的情景。
想象這樣的應(yīng)用情景: (推薦學(xué)習(xí):go)
從數(shù)據(jù)庫A(Cassandra)加載用戶評論(量巨大,例如10億條);根據(jù)每條評論的用戶ID、從數(shù)據(jù)庫B(MySQL)關(guān)聯(lián)用戶資料;調(diào)用NLP服務(wù)(自然語言處理),處理每條評論;將處理結(jié)果寫入數(shù)據(jù)庫C(ElasticSearch)。
由于應(yīng)用中遇到的各種問題,歸納出這些需求:
需求一:應(yīng)分批處理數(shù)據(jù),例如規(guī)定每批100條。出現(xiàn)問題時(例如任意一個數(shù)據(jù)庫故障)則中斷,下次程序啟動時使用checkpoint從中斷處恢復(fù)。
需求二:每個流程設(shè)置合理的并發(fā)數(shù)、讓數(shù)據(jù)庫和NLP服務(wù)有合理的負載(不影響其它業(yè)務(wù)的基礎(chǔ)上,盡可能占用