2013-07-18 3 views
2

현재 성능에 우선 순위를두고 비동기 REST API를 작업 중입니다.uWSGI 및 영구 네트워크 소켓 연결

처음에는 Node.js를 유스 케이스에 맞게 적절하게 적용 할 수있는 이벤트 중심 아키텍처로 배포하려고했지만 안타깝게도 JavaScript는 아직 SCTP 소켓을 지원하지 않습니다.

이 파이썬으로 우리를 인도하고 몇 가지 고려 후, 우리는 uWSGI & gevent로 이동하기로 결정했다.

그러나, 아키텍처의 특성으로 상당한 오버 헤드 두 개의 영역이 있습니다. 캐시 메모리에 데이터의 문제를 해결하기 위해서

, 우리는 잘 작동해야 uWSGI 캐싱 프레임 워크를 사용한다.

두 번째 문제는 응용 프로그램이 SCTP를 통해 백 엔드 처리기에 연결한다는 것입니다. 현재 설정으로이 연결이 설정되고 모든 요청에 ​​대해 닫힙니다. 초당 수천 건의 요청으로 인해 큰 오버 헤드가 발생합니다. 이상적인 경우

, 우리는 영구적으로 소켓 연결을 설정하고 각 요청에 대해 그것을 다시 계속 사용하고 싶습니다. PHP에서는 영구 소켓 연결을 사용할 수 있습니다. 파이썬/uWSGI도 비슷한 기능을 제공합니까? 또는 uWSGI 대기열 프레임 워크와 프로세스 요청을 묶어 사용할 수도 있습니다.

어떤 조언을 환영합니다. 당신이 uWSGI 순수하게되었다 gevent 모드를 사용하도록 설정하면

+0

'gevent'가 이벤트 구동 형이 아니라는 것은 무엇을 의미합니까? :) 디자인에서 엔티티의 순서를 다시 명확히 할 수 있습니까? 인터넷과 같은 것 ->로드 밸런서 -> uWSIG/gevent/Python 어플리케이션 -> ??? –

+0

나는 완전히 지체 된 작은 세부 사항을 토대로 gevent에 대해 심각하게 잘못된 개념을 가지고있었습니다. 나는 그것이 지금 모든 것을 이해했다고 생각한다. 그것은 참으로 클라이언트 ->로드 밸런서 -> uwsgi/gevent입니다. – awishformore

답변

0

이벤트 구동이 (그렇지 않으면 gevent 사용에 아무런 이점이 없을 것) (순수 및 필요 없음 원숭이 경로 지정을 의미). Gevent 이벤트 구동이 + greenlet (Node.js를처럼 콜백 지옥 기반 코드를 작성하는 방법을 피하고)을 의미 여기 마법에

더 : 당신이 원한다면 http://uwsgi-docs.readthedocs.org/en/latest/Async.html

WSGI 응용 프로그램, 잘, 응용 프로그램입니다 지속적인 연결을 가지고 있고, 단지 서버 시작시 또는 이와 유사한 것으로 열면 PHP와 같은 특별한 지원이 필요하지 않습니다.

+0

난 그냥 완전히 지체되고 있었다, 그러나 나는 지금 그것을 가지고 있는지 단지 명확하게 생각 : uwsgi는, 그것이 엔트리 기능을 통해 응용 프로그램에서가는 것이다 요청을 수신 할 때마다 - 일반적으로 응용 프로그램 (환경, 응답). 서버를 시작할 때 설정해야하는 모든 것이 파일로드시 실행되는 함수 정의 외부의 코드로 넘어갑니다. 옳은? – awishformore

+0

후자는 이미 꽤 구체적인 질문입니다. 코드를 보여줄 필요가 있습니다. –