For a stream of data, ultimately the Producer and the Consumer reach a steady state where the Producer is producing at a rate that the consumer is comfortable consuming.
So now in this stable system, how many items are in the system at any point in time. I decided to simply collect metrics for this information, by keeping a counter which is incremented and decremented as items are added into the system by the Producer and later consumed and removed by the Consumer.
Little's Law
This is a well-known problem however and I realized through more reading that this need not be measured but instead can be calculated using Little's Law defined the following way:
For my case, this maps to :
L - Number of Items in the system
λ - Consumption or Production Rate
W - Average Time spent in the System
Of course, it does require measuring the Consumption rate and the Average Time spent in the system though! The point is knowing any 2 of the values, the remaining value can be easily calculated.
Experiment
The exercise that I next performed was to compare the values that I measured in the system against the value calculated by Little's Law. No surprises here, the value measured by the system closely matches Little's law!
Let me consider a few of these scenarios here. To recap, my simple application consists of a Producer that can produce a sequence of numbers at a pre-defined rate. These sequences of numbers are consumed by a set of consumers.
Scenario 1: Unstable system with a high Producer rate
The first scenario that I considered is for a case where the Little's law actually is not supposed to work effectively, this is for an unstable system where the Producer and the Consumer produce and consume at a different rate. In my example the Producer produces a large amount of data (256 records at a time at the rate of 10 per second) and waits for the Consumer's to catch up at the rate of 4 per second) and then produces the next amount of data. You can imagine that a lot of data will be buffered in the system and the L value will be high.
A graph of the calculated(in Yellow) and measured L(in Green) value shows up the following way:
The L is around 150, so 150 records are in the system. Although this is not a stable system, the calculated L value matches the measured L value fairly well.
Scenario 2: Stable System with similar Producer and Consumer rate
Little's law shines for a stable system. Consider the following scenario where the Producer and Consumer rate matches up. A graph now looks like this:
This time the measured L value lines up perfectly with the calculated value, thus proving the utility of Little's law.
Conclusion
There is nothing much to conclude here, Little's law is a proven law, the interest for me was in observing how well it pans out with an experiment. Personally, it has been satisfying to see a law line up against an experiment.
I have this entire set-up in a github repository here if you would like to replicate it.