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
110
Питон под нагрузкой, Андрей Сумин, 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
150
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
100
Докеризация веб-приложения на Python Антон Егоров, Ostrovok.ru
itpeople123
0
180
Python Robot Operating System вместо Middleware framework Дмитрий Киселев, Endpoint.com
itpeople123
0
86
Falcon — очередная WSGI библиотека? Дмитрий Кукушкин, Wargaming
itpeople123
0
170
Очереди задач без купюр, Артем Малышев, Positive Technologies
itpeople123
1
98
Flame graph: новый взгляд на привычное профилирование, Кирилл Борисов, Яндекс
itpeople123
1
180
Other Decks in Programming
See All in Programming
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
330
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
コーンフレークから始める モデリング会話入門
ogurotakayuki
0
370
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
490
Milestoner
bkuhlmann
1
410
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
190
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
210
SIMD Parallel Programming with the Vector API
josepaumard
0
180
Elm Form Validation
bkuhlmann
0
510
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
390
Rethinking UI building strategies @ SFI 2024
letelete
0
270
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
650
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
422
63k
Designing with Data
zakiwarfel
96
4.8k
Designing for humans not robots
tammielis
248
25k
Practical Orchestrator
shlominoach
182
9.7k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Optimising Largest Contentful Paint
csswizardry
8
2.4k
GitHub's CSS Performance
jonrohan
1025
450k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
357
22k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Agile that works and the tools we love
rasmusluckow
325
20k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
Raft: Consensus for Rubyists
vanstee
132
6.3k
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]