- 보통 퍼포먼스를 보면 아무래도 pure C기반의 uwsgi가 pure python인 gunicorn보다 빨라보입니다. 간혹 uwsgi가 느리다는 비교가있는데 이는 gunicorn은 워커를 gevent로 하면 몽키패치를 지가 app서버에 해버리는데 반해 uwsgi는 app서버 코드에 몽키패치를 해줘야함을 모르고 테스트할 결과로 보여지네요.
- 사용성 측면에서 uwsgi가 좀더 복잡하고 코어 갯수에 따라 configure를 잘못하면 오히려 성능저하가될 우려가 보이네요.
- 도큐먼트는 gunicorn이 훨깔끔
*참고로 gunicorn, uwsgi모두 앞단에 nginx를 쓰는케이스가 많이 있습니다. 이는
DDos 공격방지, static file전송 효율성등때문이라고 합니다. 그리고 gunicorn document에서도 말하고 있는 nginx buffering기능때문입니다.
nginx에도 설명이 잘나와있지만 nginx buffering에 대해 좀더 설명하자면,
client - nginx - app servers
이 구조에서 client에 response를 전송하는데 nginx buffer가 없고 클라이언트가 response 패킷을 천천히 받으면 그 영향이 app server한테까지 끼쳐서 그 process는 블락이되어 다른 패킷을 처리 못하게 됩니다.
하지만 nginx buffer가 있다면 nginx는 app server에게 response패킷을 모두 받을때까지 client에게 응답하지 않고 app server에게 다 받은후 client에게 응답을 보냅니다. 따라서 slow client를 만나더라도 app server는 블락이 되지않을 수 있는것이죠.
*추가로 볼만한것
- Backend Architechtures(https://gist.github.com/ngocphamm/5849994)
- ELB+nginx+appservers(http://amazonwebservices21.blogspot.kr/2015/07/system-architecture-to-deploy-django.html)
'python' 카테고리의 다른 글
flask gevent spawn use a lot of memory (0) | 2017.04.05 |
---|---|
websocket with gunicorn (0) | 2017.03.03 |
flask async response (0) | 2017.01.04 |
functools.wraps에 대해 (0) | 2015.04.15 |
Apple Push Notification Service(APNs) python modules (0) | 2015.04.07 |