2011-08-05 4 views
0

나는 약 2 일 동안 시간당 약 200k (피크)의 방문자를 곧게 될 회사에 대한 빠른 설문 조사를하고 있습니다. $ _SESSION 변수를 사용하면 서버를 묶을 지 궁금합니다. 우리가 변수에 저장하는 것은 모두 최대 6 자의 문자열 또는 하나의 숫자 정수입니다. 저는 PHP 세계에 익숙하지 않아서 얼마나 신뢰할 수 있는지, 얼마나 많은 $ _Session 변수가 서버를 묶을 지 확신 할 수 없습니다. 사용중인 서버는 클라우드 서버입니다. 마지막으로 한 가지주의 할 점은 세션을 종료하기 전에 각 세션마다 세션이 6 분에서 10 분 정도 지속된다는 것입니다.

도움이 될 것입니다.

+0

무슨 말씀 이세요? –

+0

당신은 페이스 북을 아십니까? PHP 세션을 사용할 것입니다. – Jacob

+0

대신 쿠키를 사용 하시겠습니까? – mellowsoon

답변

0

묶는 방법? 디스크 공간? 기본 파일 기반 세션 핸들러를 사용하여 간단한 6char 문자열을 저장하면 디스크에서 약 6 + 가변 길이 이름 + 6 자의 공백을 차지합니다. 세션 파일의 데이터를로드/병합 해제하는 데 약간의 오버 헤드가있을 것입니다. 세션 데이터를 사용하는 스크립트를로드/컴파일하는 초기 오버 헤드보다 훨씬 적습니다.

PHP의 기본 세션은 디스크를 저장 매체로 사용하므로 스크립트가 종료 된 후에도 메모리에 유지되지 않습니다.

0

PHP에서는 세션 처리기를 변경할 수 있습니다. 기본 세션 처리기는 세션 당 하나의 파일로 임시 파일에 데이터를 쓰는 것입니다. 괜찮아 보이지만, 트래픽이 많은 앱을 실행할 때 제한이 있습니다 (200K /시는 기본 처리기에 문제가 없음).

http://www.php.net/manual/en/memcache.examples-overview.php에 의해

+0

정보를 위해 우리는 그 설정으로 프로덕션 서버를 실행하고 있으며 문제없이 60 req/s에 도달합니다 (세션은 실제로 병목 현상이 아니며 기본 처리기에서도 정상적으로 작동 할 수 있습니다) – gou1

1

(예를 들어, # 2 참조)

그리고 쉬운 솔루션은 PECL/Memcache를 확장합니다 (PECL/Memcached가 확장과 혼동하지 않음), Memcached가에 대한 세션 처리기를 사용하는 것입니다 기본적으로 $ _SESSION의 데이터는 session_write_close()를 호출 할 때마다 또는 스크립트가 종료되면 디스크에 기록됩니다. 사용하려는 서버 하드웨어에서 최종 응용 프로그램을 테스트하지 않고 이것이 어떻게 수행되는지를 알 수있는 방법이 없습니다. 데이터 양이 적기 때문에 실제 대기 시간은 디스크 대기 시간입니다. 이것에 대한 쉬운 해결책은 PHP의 session_save_path를 메모리 내 파일 시스템으로 설정하는 것입니다.

0

디스크에 기록하기 때문에 데이터를 세션에 저장하지 않으려한다고 생각합니다. 누군가가 여러 요청으로 앱에 부딪혔다면 클라우드의 동일한 시스템에 도달했음을 보증 할 수 있습니까? 그것은 쓰기가 다소 복잡합니다. 대신 쿠키를 사용하겠습니다. 다른 사람처럼

http://php.about.com/od/learnphp/qt/session_cookie.htm

http://www.quora.com/Does-PHP-handle-sessions-by-writing-session-variable-data-to-disc-or-does-this-information-persist-only-in-RAM-Will-accessing-session-data-cause-a-disc-read-in-PHP

난 당신이 확장 할 경우 Memcached가를 사용하는 거라고하지만, 귀하의 질문에 직접, 당신의 서버가이 설명하는 사용을 처리 할 수 ​​있어야한다고 생각 대답했다 .

+0

계산을하십시오 이 경우 생성 된 전체 세션 데이터가 우스꽝 스럽습니다. –

관련 문제