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