Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Рассылка push-уведомлений
для мобильных платформ
Дмитрий Швеёнков
• сообщить пользователю важную
информацию
• привлечь внимание пользователя
Зачем нужны push-уведомления?
• функционально мощный механизм
• дешевле sms
• эффективнее email
• увеличивают возврат пользователя в
приложение
Почему п...
Как устроены push-уведомления
Mobile app
App backend
get push token
send push token
send push
send push
1
2
3
4
Platform N...
Сложности рассылки уведомлений
• различия между GCM, APNS, MPNS, WNS
• TCP, HTTP, Json, Xml, Jabber - зоопарк
протоколов
•...
Кейсы рассылки уведомлений
• приложение «Новости»
несколько уведомлений в сутки для рассылки по большим группам
• приложен...
Архитектура сервиса
w3
w2
w1
Queue workersTarantool Queue
HTTP
daemon
(json)
TCP daemon
(iproto)
queue.put queue.take stor...
Полезные ссылки
• tarantool.org
• github.com/tarantool/queue
• www.gevent.org
• github.com/mailru/tarantool-python
• githu...
Http daemon
• nginx
• uwsgi (workers=2, gevent=500)
• python2.7
• webapp2
• распределение http-запросов через dns
• для за...
Queue, TCP daemon, workers
• tarantool queue instance = 2
• python 2.7
• gevent
• tcp workers = 8
• queue workers=16
Нагрузка, статистика
более 100 млн. уведомлений в сутки
2500 уведомлений в секунду
более 2000 tcp сообщений в секунду
400 ...
Tarantool turbo mode
import gevent
import gevent_tarantool as tarantool
def insert_worker(tnt, idx):
for i in range(1000):...
Coro style +/-
• эффективное использование CPU
• для coro нужно меньше памяти чем для
процессов
• меньшее количество откры...
Мониторинг
Используем смартфоны и планшеты
Важно!
• начальное количество серверов –
2, горизонтальное
масштабирование, надежность
• хранить не только push-token, но ...

Всем спасибо!
Вопросы?
Дмитрий Швеёнков
Mail.Ru Group
shveenkov@mail.ru
Upcoming SlideShare
Loading in …5
×

SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ

1,136 views

Published on

За последнее время очень сильное развитие получили мобильные приложения. Многие из нас используют свои любимые приложения каждый день. Push-уведомления являются очень важным инструментом для мобильных приложений. Рассылка push-уведомлений большому количеству пользователей является непростой задачей. В своем докладе расскажу о:
том, как устроены пуш-уведомления;
кейсах рассылки уведомлений в проектах mail.ru;
сложностях, которые возникают при рассылке push-уведомлений;
архитектуре сервиса рассылки;
асинхронных сервисах;
статистике и нагрузке на примере «живого» сервиса.
Доклад будет интересен всем, кто занимается разработкой сервисов для мобильных приложений.

  • Самую лучшую рассылку для мобильных устройств я смог сделать с помощью агентства standartmedia.ru , поскольку самому это всё сделать достаточно проблематично.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

SECON'2014 - Дмитрий Швеенков - Рассылка push-уведомлений для мобильных платформ

  1. 1. Рассылка push-уведомлений для мобильных платформ Дмитрий Швеёнков
  2. 2. • сообщить пользователю важную информацию • привлечь внимание пользователя Зачем нужны push-уведомления?
  3. 3. • функционально мощный механизм • дешевле sms • эффективнее email • увеличивают возврат пользователя в приложение Почему пользуются популярностью?
  4. 4. Как устроены push-уведомления Mobile app App backend get push token send push token send push send push 1 2 3 4 Platform Notification Service
  5. 5. Сложности рассылки уведомлений • различия между GCM, APNS, MPNS, WNS • TCP, HTTP, Json, Xml, Jabber - зоопарк протоколов • различия в client-возможностях мобильной платформы, бейджи, плитки • персонализация по часовым поясам, custom-фильтры, локализация • массовая своевременная рассылка
  6. 6. Кейсы рассылки уведомлений • приложение «Новости» несколько уведомлений в сутки для рассылки по большим группам • приложение «Спорт» небольшое количество уведомлений по пересечению множеств маленьких групп • приложение «Гороскопы» массовая рассылка по часовым поясам • приложение «Почта» большой трафик приватных уведомлений
  7. 7. Архитектура сервиса w3 w2 w1 Queue workersTarantool Queue HTTP daemon (json) TCP daemon (iproto) queue.put queue.take storage.store Tarantool storage push node
  8. 8. Полезные ссылки • tarantool.org • github.com/tarantool/queue • www.gevent.org • github.com/mailru/tarantool-python • github.com/shveenkov/gevent_tarantool • docs.python-requests.org • webapp-improved.appspot.com • graphite.readthedocs.org
  9. 9. Http daemon • nginx • uwsgi (workers=2, gevent=500) • python2.7 • webapp2 • распределение http-запросов через dns • для загрузки CPU – workers++
  10. 10. Queue, TCP daemon, workers • tarantool queue instance = 2 • python 2.7 • gevent • tcp workers = 8 • queue workers=16
  11. 11. Нагрузка, статистика более 100 млн. уведомлений в сутки 2500 уведомлений в секунду более 2000 tcp сообщений в секунду 400 http запросов в секунду 15K событий в секунду для tarantool queue 50% CPU load
  12. 12. Tarantool turbo mode import gevent import gevent_tarantool as tarantool def insert_worker(tnt, idx): for i in range(1000): tnt.store(1, (idx + i, idx + i)) tnt = tarantool.connect("127.0.0.1", 33013) jobs = [gevent.spawn(insert_worker, tnt, idx) for idx in range(10)] gevent.joinall(jobs)
  13. 13. Coro style +/- • эффективное использование CPU • для coro нужно меньше памяти чем для процессов • меньшее количество открытых коннектов к СУБД / noSQL • требуется реализация connection pool-ов • сложная отладка и профилирование • сложность кода, async еще сложнее • отсутствуют драйверы к mysql, postgresql • не всегда работают сторонние модули
  14. 14. Мониторинг Используем смартфоны и планшеты
  15. 15. Важно! • начальное количество серверов – 2, горизонтальное масштабирование, надежность • хранить не только push-token, но и информацию о мобильном устройстве • статистика по рассылкам • анализ отписок
  16. 16.  Всем спасибо! Вопросы? Дмитрий Швеёнков Mail.Ru Group shveenkov@mail.ru

×