• unbounded queues are fundamentally broken (they are bounded - e.g. by memory)

Drop data

  • only valid if newwer data obsoletes older data

Reject data

  • often the only choice for an application

Pause data (aka backpressure)

  • often the only choice for a closed system, library, or sub-system
  • backpressure isn’t free - it hurts our overall throughput

This means

  • plan for too much data
  • use backpressure wherever possible
  • buffers give us throughput at the cost of latency - avoid composing buffers

Learning from the consuming Twitter feed an example

be clear what “completion” is

  • be picky about your tools
  • prefer metrics to raw performance
  • you’re never measuring all of your system

Learning from the chat room example

  • manifold tracks the queue dependencies