secon'2014 - Дмитрий Швеенков - Рассылка push-уведомлений...

Post on 15-Jun-2015

552 Views

Category:

Presentations & Public Speaking

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

Дмитрий Швеёнков

• сообщить пользователю важную информацию

• привлечь внимание пользователя

Зачем нужны push-уведомления?

• функционально мощный механизм• дешевле sms• эффективнее email• увеличивают возврат пользователя в

приложение

Почему пользуются популярностью?

Как устроены push-уведомления

Mobile app

App backend

get push token

send push token

send push

send push

1

2

3

4

Platform Notification Service

Сложности рассылки уведомлений

• различия между GCM, APNS, MPNS, WNS• TCP, HTTP, Json, Xml, Jabber - зоопарк

протоколов• различия в client-возможностях мобильной

платформы, бейджи, плитки• персонализация по часовым поясам,

custom-фильтры, локализация• массовая своевременная рассылка

Кейсы рассылки уведомлений

• приложение «Новости»несколько уведомлений в сутки для рассылки по большим группам

• приложение «Спорт»небольшое количество уведомлений по пересечению множеств маленьких групп

• приложение «Гороскопы»массовая рассылка по часовым поясам

• приложение «Почта»большой трафик приватных уведомлений

Архитектура сервиса

w3w2

w1

Queue workersTarantool Queue

HTTP daemon

(json)

TCP daemon(iproto)

queue.put queue.take storage.store

Tarantoolstorage

push node

Полезные ссылки

• 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

Http daemon

• nginx• uwsgi (workers=2, gevent=500)• python2.7• webapp2• распределение http-запросов через dns• для загрузки CPU – workers++

Queue, TCP daemon, workers

• tarantool queue instance = 2• python 2.7• gevent• tcp workers = 8• queue workers=16

Нагрузка, статистика

более 100 млн. уведомлений в сутки2500 уведомлений в секундуболее 2000 tcp сообщений в секунду400 http запросов в секунду15K событий в секунду для tarantool queue50% CPU load

Tarantool turbo mode

import geventimport 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)

Coro style +/-

• эффективное использование CPU• для coro нужно меньше памяти чем для процессов• меньшее количество открытых коннектов к СУБД /

noSQL• требуется реализация connection pool-ов• сложная отладка и профилирование• сложность кода, async еще сложнее• отсутствуют драйверы к mysql, postgresql• не всегда работают сторонние модули

Мониторинг

Используем смартфоны и планшеты

Важно!

• начальное количество серверов – 2, горизонтальное масштабирование, надежность

• хранить не только push-token, но и информацию о мобильном устройстве

• статистика по рассылкам• анализ отписок

Всем спасибо!

Вопросы?

Дмитрий ШвеёнковMail.Ru Group

shveenkov@mail.ru

top related