Functional design patterns
In this section, we are going to learn about the following functional design patterns:
- MapReduce
- Loan pattern
- Tail call optimization
- Memoization
- The execute around method
MapReduce
MapReduce is a technique used for massive parallel programming, developed by Google, which emerged as a functional design pattern because of the ease of expression. In functional programming, it is a form of a monad.
Intent
The intent is to break existing tasks into multiple smaller ones, run them in parallel, and aggregate the result (reduce). It is expected to improve performance for big data.
Examples
We will demonstrate the usage of the MapReduce pattern by parsing and aggregating logs from multiple web services based on a given Sleuth span and calculating the overall duration for each hit endpoint. The logs are taken from https://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html and split into the corresponding service log file. The following code reads in parallel all the logs...