Как правильно организовать работу бекэнда у мобильного приложения?
В пиковые моменты может приходить до 10 000 таких вот обращений в секунду (проектируемая нагрузка). Но волнами, т.е. отправили мы, условно, 100 000 сообщений, их начали читать и посыпались оповещения о прочтении на сервер.
Буквально сейчас тестирую высокие нагрузки.
Сетевой стек Linux - говно-говном. Чтобы получать 30 000 в секунду (на виртуалке) нужно отдать ему целиком 1 ядро процессора на 100%. И это не считая того, что нужно еще обработать информацию и отдать ответ. Отдача тоже грузит ядро почти на полную, но чуть-чуть поменьше все же, чем прием.
На реальном железе не на виртуальном - народ утверждает, что можно получать примерно в 10 раз больше. Но это dedicated.
Так что 100 000 в секунду - это будет очень не просто.
Если нагрузка рваная - то специальное облако, автомасштабируемое - вас спасет.
Иначе - придется серьезно разбираться как оптимизировать, как распараллелить.
Можно писать не в базу, а в какой-нибудь redis и например раз в минуту запускать балковые квери. Сэкономим время на rountrip-ах.
Update можно переписать, чтобы он высчитывал количество read из Log таблицы.
И вообще лучше всего запилить пару PoC, взять какой-нибудь JMeter и померить.