Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Питон под нагрузкой, Андрей Сумин, HeadHunter
Search
IT-People
July 25, 2016
Programming
0
120
Питон под нагрузкой, Андрей Сумин, HeadHunter
Выступление на конференции PyCon Russia 2016
IT-People
July 25, 2016
Tweet
Share
More Decks by IT-People
See All by IT-People
Александр Кошкин, Positive Technologies: Знай и люби свой CPython во имя луны и великой справедливости
itpeople123
1
170
How Python was Shaped by leaky Internals, Armin Ronacher, Flask framework
itpeople123
1
220
Building social network with Neo4j and Python, Андрей Солдатенко, Toptal
itpeople123
1
220
Осторожно, DSL! Иван Цыганов, Positive Technologies
itpeople123
0
110
Докеризация веб-приложения на Python Антон Егоров, Ostrovok.ru
itpeople123
0
180
Python Robot Operating System вместо Middleware framework Дмитрий Киселев, Endpoint.com
itpeople123
0
91
Falcon — очередная WSGI библиотека? Дмитрий Кукушкин, Wargaming
itpeople123
0
220
Очереди задач без купюр, Артем Малышев, Positive Technologies
itpeople123
1
100
Flame graph: новый взгляд на привычное профилирование, Кирилл Борисов, Яндекс
itpeople123
1
210
Other Decks in Programming
See All in Programming
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
350
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
Contemporary Test Cases
maaretp
0
140
Jakarta EE meets AI
ivargrimstad
0
810
初めてDefinitelyTypedにPRを出した話
syumai
0
430
Outline View in SwiftUI
1024jp
1
350
Tauriでネイティブアプリを作りたい
tsucchinoko
0
380
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
130
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
CSC509 Lecture 11
javiergs
PRO
0
180
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
1
220
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
15
2.3k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
25
5k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Why Our Code Smells
bkeepers
PRO
334
57k
Ruby is Unlike a Banana
tanoku
97
11k
YesSQL, Process and Tooling at Scale
rocio
169
14k
RailsConf 2023
tenderlove
29
910
Being A Developer After 40
akosma
87
590k
Docker and Python
trallard
40
3.1k
Statistics for Hackers
jakevdp
796
220k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Typedesign – Prime Four
hannesfritz
40
2.4k
Side Projects
sachag
452
42k
Transcript
Питон под нагрузкой Сумин Андрей, hh.ru
None
Основные фронтенды ~ 1500 RPS
Сервис интеграционной логики ~ 2500 RPS
Сходить в бекенды Обработать ответы Применить шаблон Наложить переводы Запрос
Ответ
https://github.com/hhru/tornado https://github.com/hhru/frontik
None
None
for emp in xml.findall('employer-group/employer'): vacancies = set(emp.xpath('vacancies/id/text()')) if len(vacancies) <=
10: get_short_vacancies(self, vacancies)
None
Curl story http-клиент Дай резюме Васи Дай резюме Пети Бекенд
Таймаут http-клиент
Баги в Питоне Воркэраунды (например для urlparse.urlsplit)
Баги в Питоне Воркэраунды (например для urlparse.urlsplit) Cookie — использовать
в исходном виде нельзя
IOLoop while True: run_callbacks() run_timeouts() for fd, event in select.epoll():
run_handler(fd, event)
Что нельзя? — никаких долгих вычислений
Что нельзя? — никаких долгих вычислений — синхронные походы в
базу/кеш — проблема
Что нельзя? — никаких долгих вычислений — синхронные походы в
базу/кеш — проблема — даже резолвинг ДНС чаще всего блокирующий
Что нельзя? — никаких долгих вычислений — синхронные походы в
базу/кеш — проблема — даже резолвинг ДНС чаще всего блокирующий — логирование может стать проблемой!
None
Треды спасают мир — в сишной либе можно явно отпустить
GIL (с помощью макроса Py_BEGIN_ALLOW_THREADS / Py_END_ALLOW_THREADS)
None
None
None
Три закона — пользователи способны на всё
Три закона — пользователи способны на всё — всё что
может произойти — произойдёт
Три закона — пользователи способны на всё — всё что
может произойти — произойдёт — всё что может упасть — упадёт
Три рецепта — проводите нагрузочное тестирование
Три рецепта — проводите нагрузочное тестирование — измеряйте потерянную прибыль
Три рецепта — проводите нагрузочное тестирование — измеряйте потерянную прибыль
— вкладывайтесь в инфраструктуру
Вопросы?
[email protected]