SlideShare a Scribd company logo
1 of 36
Download to read offline
АсинхронныезадачивiFunny:)
СергеевАнтон
@hackPNZ
Прочтовсеэто?
Когдаидлячегомогутпонадобитьсяасинхронныезадачи;
ОчередьзадачCelery;
Нашаархитектура,нашопыт.
iFunny:)
Юмористическийсервис;
Суточнаяаудитория:
4000000пользователей;
Около250000работ
публикуетсяежедневно;
Около1000000000
просмпросмотровконтентакаждыйдень.
Разработка
iFunny:)
iFunny2.4
ВозможностьдобавлятьGIF
Тяжелыйконтент;
Конвертацияввидеоформатwebm;
Нарезкатумбнейлов:форматыjpeg
иwebp.
Q22013
iFunny3.0
Подписки,републикацияработ
Подписки:добавлениеновыхработ
влентыпользователей;
Републикации:добавление
републикацийвленты
пользователей.
Q42013
Asynchronous
taskqueue
Pythonвкачествеосновногоподдерживаемогоязыка;
Проектбыстроразвивается,активноесообщество;
Легкоразвертывается,минимумконфиговилишнегокода;
Поддержкамножестваотдельныхброкеров;
Отказоустойчивый,легкомасштабируется.
www.celeryproject.orgCelery
Celery
brokers
RabbitMQ
Стабильный;
Рекомендуютпо-умолчанию.
Cложностьтонкойнастройки;
Плюсещеодинкомпонентинфраструктуры.
Redis
Давноиуспешноиспользуемвproduction;
Быстрыезапись/чтение(задачихранятсявпамяти);
Легкоподнятьснуля.
Дорогодлябольшихданных;
Failover:можно,носложно.
Experimentalbrokers
MongoDB; |ограничениеразмерадокумента16Mb
Beanstalk;
AmazonSQS;
CouchDB;
SQLAlchemy;
...others.
Сельдерей+редис!
Архитектура
APIInstances
Celerygates
Celery
workers
Redisstorage
2xuWSGIgates
AWSEC2c3.xlargeinstances
(4vCPU,7.5GbRAM,2x40GbSSD)
8xWorker
AWSEC2c3.2xlargeinstances
(8vCPU,15GbRAM,2x80GbSSD)
RequestsPerMinute
ЗадачивiFunny:)
Публикацияконтента;
Fanout;
Revokefanout;
Рассылкаemail-уведомлений.
КонфигурацияCelery
celery=Celery('celerytasks')
celery.config_from_object(‘celeryconfig')#celeryconfig.ру
@celery.task()
deftest_task(foo):
result=tasks.test.execute(foo)
returnresult
Brokerconfig
BROKER_URL="redis://:12345@localhost:6379/0"
CELERY_RESULT_BACKEND="redis://:12345@localhost:6379/0"
APIentrypoint
@app.route(“/test/task",methods=[‘GET'])
deftest_task():
async_result=celerytasks.test_task.delay(42)
returnasync_result
Разделениеочередей
CELERY_ROUTES={
'celerytasks.test_task':{'queue':'foo_queue'},
'celerytasks.foo_task':{'queue':'foo_queue'},
'celerytasks.bar_task':{'queue':'bar_queue'},
}
Taskcalling
features
Linking
test_task.apply_async((foo),link=test_task.s(bar))
Customerrorhandler
test_task.apply_async((foo),link_error=error_handler.s())
Countdown
result=test_task.apply_async((foo),countdown=3)
rresult.get()#вернетрезультаткакминимумчерез3секунды
Expiration
test_task.apply_async((foo),expires=60)#задачаистечетчерез
60секундоттекущеговремени(получаетстатусREVOKED)
Retry
test_task.apply_async((foo),retry=True,retry_policy={
'max_retries':3,
'interval_start':0,
'interval_step':0.2,
'interval_max':0.2,
})
Serializers
test_task.apply_async((foo),serializer=‘json')#pickle,JSON,YAML,
msgpacketc
Compression
test_task.apply_async((foo),compression=‘zlib')#gzip,bzip2
Routingtoqueue
test_task.apply_async(queue=‘test_queue')test_task.apply_async(queue=‘test_queue')
Логирование
имониторинг
Graylog2:celerylogs
Datadog:commonmetrics
Datadog:CPUmetric
NewRelic:среднеевремявыполнения
NewRelic:мониторингошибок
Чтодальше?
Celery3.1— течетпамятьподнагрузкой;
Гейтысамипосебе— тяжелыеиизбыточные.
Решение:добавлятьзадачинапрямуювRedis;
ДумаемнасчетRabbitMQ.
Спасибозавнимание!
Вопросы?
СергеевАнтон
@hackPNZ
github.com/hackpnz

More Related Content

Viewers also liked

H imanshu final mcs ppt 20147
H imanshu final mcs ppt 20147H imanshu final mcs ppt 20147
H imanshu final mcs ppt 20147Himanshu Phatnani
 
Great economic derpressions
Great economic derpressions Great economic derpressions
Great economic derpressions Himanshu Phatnani
 
C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.해근 조
 
Indian railways 1 50 final main (1)
Indian railways 1 50 final main (1)Indian railways 1 50 final main (1)
Indian railways 1 50 final main (1)Himanshu Phatnani
 
John Dalton (Biography)
John Dalton (Biography)John Dalton (Biography)
John Dalton (Biography)Jaycel Jose
 
Thesaurus and Atlas
Thesaurus and AtlasThesaurus and Atlas
Thesaurus and AtlasJaycel Jose
 
Levels Of Comprehension
Levels Of ComprehensionLevels Of Comprehension
Levels Of ComprehensionJaycel Jose
 
Nature and Purpose of Teaching English (Language)
Nature and Purpose of Teaching English (Language)Nature and Purpose of Teaching English (Language)
Nature and Purpose of Teaching English (Language)Jaycel Jose
 

Viewers also liked (18)

30 06 2012_acf_gt
30 06 2012_acf_gt30 06 2012_acf_gt
30 06 2012_acf_gt
 
Ecommerce
EcommerceEcommerce
Ecommerce
 
H imanshu final mcs ppt 20147
H imanshu final mcs ppt 20147H imanshu final mcs ppt 20147
H imanshu final mcs ppt 20147
 
Reflection
ReflectionReflection
Reflection
 
Qunat course
Qunat courseQunat course
Qunat course
 
Web security
Web securityWeb security
Web security
 
Final edifice 3 rd oct 2013
Final edifice 3 rd oct 2013Final edifice 3 rd oct 2013
Final edifice 3 rd oct 2013
 
Great economic derpressions
Great economic derpressions Great economic derpressions
Great economic derpressions
 
C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.C#과 유니티를 통한 게임개발 입문.
C#과 유니티를 통한 게임개발 입문.
 
Final edifice 3 rd oct 2013
Final edifice 3 rd oct 2013Final edifice 3 rd oct 2013
Final edifice 3 rd oct 2013
 
Indian railways 1 50 final main (1)
Indian railways 1 50 final main (1)Indian railways 1 50 final main (1)
Indian railways 1 50 final main (1)
 
John Dalton (Biography)
John Dalton (Biography)John Dalton (Biography)
John Dalton (Biography)
 
Thesaurus and Atlas
Thesaurus and AtlasThesaurus and Atlas
Thesaurus and Atlas
 
Levels Of Comprehension
Levels Of ComprehensionLevels Of Comprehension
Levels Of Comprehension
 
Nature and Purpose of Teaching English (Language)
Nature and Purpose of Teaching English (Language)Nature and Purpose of Teaching English (Language)
Nature and Purpose of Teaching English (Language)
 
Readers Theater
Readers TheaterReaders Theater
Readers Theater
 
Portable mobile charger
Portable mobile chargerPortable mobile charger
Portable mobile charger
 
Noise pollution
Noise pollutionNoise pollution
Noise pollution
 

Асинхронные задачи в iFunny v2 [Стачка 2014]