Nginx 에서 놀 라 운 문제 와 부하 균형 문 제 를 해결 합 니 다.
3658 단어 nginx
Nginx 가 놀 라 운 문 제 를 해결 하 는 방법 은 같은 시간 에 유일한 워 커 서브 프로 세 스 만 웹 포트 를 감청 할 수 있 도록 규정 한 것 이다.따라서 새 연결 이 벤트 는 유일 하 게 감청 포트 에 있 는 워 커 서브 프로 세 스 만 깨 울 수 있 습 니 다.
이 프로젝트 를 실현 하려 면 accept 를 열 어야 합 니 다.mutex 자물쇠, 그리고 ngx 호출trylock_accept_mutex () 함수 accept 획득 시도mutex 잠 금, 잠 금 이 성공 해 야 웹 포트 를 감청 할 수 있 습 니 다.
ngx_int_t
ngx_trylock_accept_mutex(ngx_cycle_t *cycle)
{
// , ngx_accept_mutex
if (ngx_shmtx_trylock(&ngx_accept_mutex))
{
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"accept mutex locked");
// ngx_accept_mutex , ngx_accept_mutex_held 1,
// 。ngx_accept_mutex_held 1 。
if (ngx_accept_mutex_held
&& ngx_accept_events == 0
&& !(ngx_event_flags & NGX_USE_RTSIG_EVENT))
{
return NGX_OK;
}
// epoll
if (ngx_enable_accept_events(cycle) == NGX_ERROR)
{
ngx_shmtx_unlock(&ngx_accept_mutex); // , ngx_accept_mutex
return NGX_ERROR;
}
ngx_accept_events = 0;
ngx_accept_mutex_held = 1; //
return NGX_OK;
}
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"accept mutex lock failed: %ui", ngx_accept_mutex_held);
//ngx_accept_mutex ngx_accept_mutex
//ngx_accept_mutex 1 ,
if (ngx_accept_mutex)
{
//
if (ngx_disable_accept_events(cycle) == NGX_ERROR)
{
return NGX_ERROR;
}
ngx_accept_mutex_held = 0;
}
return NGX_OK;
}
하면, 만약, 만약...trylock_accept_mutex () 함수 가 잠 금 을 얻 지 못 했 습 니 다. 이벤트 구동 모듈 의 process 를 호출 합 니 다.이벤트 방법 은 연 결 된 이벤트 만 처리 할 수 있 습 니 다.자 물 쇠 를 얻 으 면 process 호출이벤트 방법 은 연 결 된 이벤트 도 처리 하고 새로운 연 결 된 이벤트 도 처리 합 니 다.
획득 ngxaccept_mutex 잠 금 프로 세 스 는 ngx 를 우선 처리 합 니 다.posted_accept_이벤트 대기 열 에 있 는 이벤트 입 니 다. 처리 가 끝나 면 바로 이 자 물 쇠 를 풀 어야 합 니 다. 잠 금 의 사용 시간 을 줄 이 고 다른 프로 세 스 는 이 자 물 쇠 를 가 져 와 새로운 연결 이 벤트 를 처리 할 수 있 습 니 다.
Nginx 의 부하 균형 문제 방식:
부하 균형 한도 값 ngx 이용accept_disabled 가 관리 합 니 다.이 한도 값 은 프로 세 스 가 허용 하 는 총 연결 수의 1 / 8 에서 남 은 연결 수 를 뺀 것 입 니 다.즉, 한도 값 이 정수 일 때 현재 프로 세 스 는 새로운 연결 이 벤트 를 처리 하지 않 고 대신 한도 값 만 1 감소 합 니 다. 한도 값 의 초기 값 이 마이너스 이기 때 문 입 니 다. N (총 연결 수) / 8 - N (초기 에 남 은 값 은 프로 세 스 총 허용 연결 수) = - (7 / 8) N 입 니 다.따라서 Nginx 각 worker 하위 프로 세 스 간 의 부하 균형 은 특정한 worker 하위 프로 세 스 가 처리 하 는 연결 수가 최대 처리 총수 의 7 / 8 에 이 를 때 만 실 행 됩 니 다. 이 때 이 worker 프로 세 스 는 새로운 연결 을 처리 할 기 회 를 줄 이 고 다른 남 은 worker 프로 세 스 는 더 많은 새로운 연결 을 처리 할 수 있 습 니 다.
잠 금 체 제 를 이용 하여 상호 배척 과 동기 화 를 해 야 한다. 감청 세트 인터페이스 가 여러 프로 세 스 의 사건 감시 체제 에 동시에 가입 되 는 것 을 피 할 뿐만 아니 라 감청 세트 인터페이스 가 어느 순간 에 어떠한 프로 세 스 에 의 해 감시 되 지 않도록 해 야 한다. 프로 세 스 가 과부하 상태 에 있 지 않 으 면 자 물 쇠 를 다 투 며 자 물 쇠 를 다 투 는 데 성공 하면 모든 감청 세트 인 터 페 이 스 를 자신의 사건 모니터링 체제 에 추가 합 니 다.잠 금 경쟁 에 실패 하면 감청 세트 인 터 페 이 스 를 자신의 사건 감시 체제 에서 삭제 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.