SlideShare a Scribd company logo
1 of 25
Download to read offline
Asynchronous Python and Databases
• Asynchronous Python and Databases - Mike Bayer
• http://bit.ly/1Ff6EJ1
Sync vs Async
Synchronous I/O in Web Server
• 쓰레드 : 클라이언트 = 1:1
• 코드가 간결, 확장하기 쉬움
• 라이브러리들이 모두 thread-safe 해야함
Slow Client Problem
해결책 : Buffering Reverse Proxy
Async I/O in Web server
• 많은 량의 I/O를 처리
• 라이브러리들이 모두 Async여야 함
• CPU intensive한 작업에 약함
Async I/O in Web Service
• 예상 - evented I/O 가 thread 모델보다 빠를 것이다
• I/O intensive한 프로그램이기 때문 (DB, 캐시 조회)
• 근데 안빠르다…
• 대체 왜?
Async I/O in Web Service
Mike Bayer의 대답
(1) Python is very slow compared to your database
I/O Bound
• 데이터를 요청하는 시간이 처리하는 시간보다 긴 작업
• 흔한 착각

- 웹 어플리케이션은 데이터베이스 요청이 대부분의 시간을 차지한다
• C나 자바에서는 맞는 말
• 파이썬에선 처리하는 시간도 요청하는 시간 못지 않게 오래 걸린다.

(파이썬 자체가 DB에 비해 느림)
• 얼마나 차이가 날까?
얼마나 차이가 난다고…
• MySQL-Python (C) vs PyMySQL (Python)
로컬 연결
네트워크 연결
PyMySQL benchmark (로컬)
PyMySQL benchmark (네트워크)
• I/O bound라고 하기 힘듬
• 실제 어플리케이션에선 더욱더…
요약하자면…
• Async I/O 의 효과를 보려면 I/O bound여야 함
• 파이썬 어플리케이션 : I/O < 파이썬 자체의 오버헤드
• Async로 얻을 수 있는 효과를 감소시킴 (암달의 법칙)
(2) AsyncIO uses appealing, but relatively
inefficient Python paradigms
yield Overhead
• 보통의 sync함수
• async 버전
benchmark
benchmark
• 120 threads / processes / connection
• Local Postgresql
3. yield from …
3. yield from …
• explicit context switching
3. yield from …
• 명시적인 컨텍스트 전환이 필요한가? - no
• 왜냐하면 데이터베이스 중심 서비스는 대부분

트랜잭션을 중심으로 흘러가기 때문
3. yield from …
맞는 코드:
sync를 쓰든 async를 쓰든 로직상엔 큰 차이가 없음
결론
• Async I/O를 쓰지 말라는 것은 아님
• 하지만 데이터베이스 로직에는 굳이 쓸 이유가 없음

- 성능을 향상시키기보다 떨어뜨릴 확률이 높음
• Async가 적절한 상황에 nginx + uwsgi 사용

More Related Content

Similar to Asynchronous Python and Database

[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드Sanghun Yun
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XpressEngine
 
확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 IMQA
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2HyeonSeok Choi
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1J B
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengeYoongi Kim
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)MinChul Lee
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introductionJinkyoung Kim
 
2014년 02월 XE세미나 XE서버서능개선
2014년 02월 XE세미나 XE서버서능개선2014년 02월 XE세미나 XE서버서능개선
2014년 02월 XE세미나 XE서버서능개선Sol Kim
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림우림 류
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batchSunghyun Roh
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서ServerDevCamp
 
Web server
Web serverWeb server
Web serverHerren
 

Similar to Asynchronous Python and Database (20)

[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
[15.09.17] 인터넷과 웹의 역사 그리고 현재의 트렌드
 
CDN overview
CDN overviewCDN overview
CDN overview
 
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
XE 오픈 세미나(2014-02-22) - XE 서버 성능 개선
 
확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안 확장가능한 웹 아키텍쳐 구축 방안
확장가능한 웹 아키텍쳐 구축 방안
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challenge
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
Aws로 ci하기 안기욱
Aws로 ci하기 안기욱Aws로 ci하기 안기욱
Aws로 ci하기 안기욱
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
 
2014년 02월 XE세미나 XE서버서능개선
2014년 02월 XE세미나 XE서버서능개선2014년 02월 XE세미나 XE서버서능개선
2014년 02월 XE세미나 XE서버서능개선
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림
 
Ahea Team Spring batch
Ahea Team Spring batchAhea Team Spring batch
Ahea Team Spring batch
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
 
Web server
Web serverWeb server
Web server
 
Warp
WarpWarp
Warp
 

Asynchronous Python and Database