Очередь задач в памяти на ConcurrentQueue раздулась до нескольких гигабайт
API принимает события аналитики и складывает их в ConcurrentQueue, а BackgroundService пишет их в ClickHouse. Во время маркетинговой акции события приходили быстрее, чем уходили в базу. Память процесса выросла до лимита, и под перезапустился, потеряв всю очередь.
Как устроить приём событий устойчивее?
- Ограниченный Channel с политикой при переполнении
- Увеличить лимит памяти пода вдвое
- Запускать больше экземпляров BackgroundService в одном процессе
- Заменить ConcurrentQueue на List с lock
