English | 简体中文
Why we have this repo?
mapreduce is part of go-zero, but a few people asked if mapreduce can be used separately. But I recommend you to use
go-zero for many more features.
Let’s try to put ourselves in the author’s shoes and sort out the possible business scenarios for the concurrency tool:
- querying product details: supporting concurrent calls to multiple services to combine product attributes, and supporting call errors that can be ended immediately.
- automatic recommendation of user card coupons on product details page: support concurrently verifying card coupons, automatically rejecting them if they fail, and returning all of them.
The above is actually processing the input data and finally outputting the cleaned data. There is a very classic asynchronous pattern for data processing: the producer-consumer pattern. So we can abstract the life cycle of data batch processing, which can be roughly divided into three phases.
- data production generate
- data processing mapper
- data aggregation reducer
Data producing is an indispensable stage, data processing and data aggregation are optional stages, data producing and processing support concurrent calls, data aggregation is basically a pure memory operation, so a single concurrent process can do it.
Since different stages of data processing are performed by different goroutines, it is natural to consider the use of channel to achieve communication between goroutines.
How can I terminate the process at any time?
It’s simple, just listen to a global end channel or the given context in the goroutine.
Give a Star! ⭐
If you like or are using this project to learn or start your solution, please give it a star. Thanks!