4. Работа платформ
• GCM: HTTPS POST с json телом
• APNS: TCP TLS с бинарными пакетами
• MPNS: HTTPS POST с xml телом + TLS renego
• WNS: HTTPS POST с xml телом
6. Проблемы
• Дорогой handshake
• «Кривые» сертификаты
• Поведение APNS при ошибках
• Крайне медленные и сбоящие MPNS/WNS
• MPNS TLS renegotiation
7. Как оно работает
• API запросы через HTTPS => пачки пушей
~5 потоков* в 4 очереди платформ (GCM и т. п.)
• По платформам => по приложениям платформ
4 потока в ~100 очередей приложений
• По приложениям => по соединениям приложений
~100 потоков в 5-10к очередей
• Каждое соединение обслуживает свой поток
5-20к потоков с 10-20к очередей
* потоки выполнения, не processes/threads
9. Не офф приложения
• Заброшены без поддержки
• Просроченные/не заданные сертификаты
• Непредвиденный рост популярности
• Некорректная отписка от пушей
Их путь — органичения
10. Как оно работает
• Весь код написан на Go
• Работает на 24 слабых физических серверах
• ulimit -n не менее 10,000 дескрипторов
• Процесс на 500M-1G RSS памяти
• Паузы GC по 4-10мс
• CPU 200-500% из 16 ядер — 3х кратный запас
• Обработка пуша за 40-900мс (тормозит все MPNS)
11. Приятные мелочи
• Масса статистик по работе пушилок
С локальной аггрегацией в воркерах ввиду массивной
параллелизации
• Подробнейшие сквозные логи выбранных пушей
Очень полезно для изучения проблем по факту