2017-02-01 3 views
7

우리는 twemproxy를 로컬로 (소켓을 통해) 사용하는 PHP 스택을 캐싱 레이어 용 다중 업스트림 memcached 서버 (EC2 소형 인스턴스)에 연결하기 위해 PHP 스택을 실행하고 있습니다.Twemproxy 지연으로 다시 시작하도록하십시오

종종 나는 앱로드 시간이> 5 초를 초과한다는 경고를 앱 모니터에서받습니다. 이 문제가 발생하면 즉각적인 해결책은 각 응용 프로그램 서버에서 twemproxy 서비스를 다시 시작하는 것인데, 이는 번거 로움입니다.

제가 지금 가지고있는 유일한 해결책은 매분마다 실행되는 서비스를 다시 시작하는 crontab입니다.하지만 매 순간 몇 분 동안 아무 것도 쓸 수 없다는 것을 상상할 수 있듯이, 이는 원하는 영구 솔루션이 아닙니다.

이전에이 문제가 발생 했습니까? 그렇다면 수정 프로그램은 무엇입니까? AWS Elasticache로 전환하려고 시도했지만 현재 twemproxy 솔루션과 동일한 성능을 얻지 못했습니다.

여기 내 twemproxy 구성입니다.

# Note: We are using HA/twemproxy (nutcracker)/memcached proxy 
# So this isn't a default memcache(d) port 
# Each webapp will host the cache proxy, which allows us to connect via socket 
# which should be faster, as no tcp overhead 
# Hash has been manually override from default jenkins to FNV1A_64, which directly aligns with proxy 
port: 0 
<?php echo Hobis_Api_Cache::TYPE_VOLATILE; ?>: 
    options: 
    - <?php echo Memcached::OPT_HASH; ?>: <?php echo Memcached::HASH_FNV1A_64; ?><?php echo PHP_EOL; ?> 
    - <?php echo Memcached::OPT_SERIALIZER; ?>: <?php echo Memcached::SERIALIZER_IGBINARY; ?><?php echo PHP_EOL; ?> 
    servers: 
    - /var/run/nutcracker/nutcracker.sock 

우리는 0.4.1 twemproxy 및 1.4.25 memcached를 실행중인 : 여기

default: 
    auto_eject_hosts: true 
    distribution: ketama 
    hash: fnv1a_64 
    listen: /var/run/nutcracker/nutcracker.sock 0666 
    server_failure_limit: 1 
    server_retry_timeout: 600000 # 600sec, 10m 
    timeout: 100 
    servers: 

    - vcache-1:11211:1 
    - vcache-2:11211:1 

그리고

는 PHP 층의 연결 설정입니다.

감사합니다.

+0

crontab을 설정하는 문제 –

답변

0

내가 로컬 호스트에서 TCP 포트에 유닉스 소켓에서 스위칭 결국하고 다시 시작 문제를 해결 한 것으로 보인다 수 있습니다. 그러나 나는 tcp와 관련된 오버 헤드로 인해 스위치를 만들 때 응답 시간이 빨라 졌음을 눈치 챘다. 이 대답을 받아 들일 수 없다면 누군가가 길을 가면서 소켓에 대한보다 권위있는 대답을 게시 할 수 있습니다.

1

저는 twemproxy와 memcached.but에 대해 많이 알지는 않습니다. 자세한 내용은 귀하에게 링크가 제공됩니다. 도움이 될 것입니다.

https://github.com/twitter/twemproxy

+0

Repo에 대한 링크가 도움이되지 않습니다. 내가 가지고있는 문제에 대한 언급이 없습니다. –

+0

@MikePurcell 소켓 연결이 문제 일 수 있습니다. –

+0

@MikePurcell TCP 소켓은 닫힐 때까지 열려 있습니다. 실제로 데이터를 보내지 않고 끊어진 연결 (라우터가 죽은 것처럼 깨진 경우 등)을 감지하는 것은 매우 어렵습니다. 따라서 대부분의 응용 프로그램은 연결이 가능한지 확인하기 위해 모든 종류의 핑/퐁 반응을합니다. 여전히 실제로 살아 있습니다. –

3

개방/오래된 소켓 연결의 수는 문제

+0

흠집이 쌓여있을 수 있습니다.이 부분을 살펴 보겠습니다. –

+1

그래서 그는 OP를 도우 려하지 말았어야 했습니까? 그는 OP를 해결책으로 이끌어 낼 수있는 무언가를 가지고 있습니다. 나는 Stack Overflow가 다른 사람들의 경험을 망치고 싶어하는 자급 자족들로 가득 차 있다는 것을 맹세한다. OP는이 주석을받는 것이 행복해 보이며, Kiran은 Stack이 그에게 코멘트를하지 않기 때문에 자신의 의견을 제시 할 수있는 것을했다. 그래서 Jorn을 기쁘게 해주세요. 사람들을 떠나 보내 게하십시오. 이것은 우리가 사람들을 돕는 사이트입니다. Kiran의 게시물이 도움이되었습니다. 너의 것이 도움이되지만 도움이된다. Upvoting you Kiran. Dunno가 자신의 문제를 해결할 수는 있지만 도움을 주려고한다면 - 다른 사람들과 반대되는 - –