공부용 블로그

Apache MPM이란? 본문

설계/WebServer

Apache MPM이란?

tomato212 2018. 8. 11. 02:14

1. MPM 이란?


- MPM이란 받아들인 요청을 처리하기 위해 자식들에게 분배하는 방식으로 대표적으로 Prefork / Worker 방식이 있다.

리눅스의 경우는 prefork가 기본방식이며, 컴파일시 옵션을 -with-mpm=worker 로 줄 경우 worker방식으로 설정된다.

- 서버는 특정 사이트의 요구조건에 더 특화될 수 있다.

예를 들어 높은 확장가능성(scalability)이 필요한 사이트는 worker와 같은 쓰레드 MPM을 사용하고,

안정성과 오래된 소프트웨어와의 호환성이 필요한 사이트는 preforking MPM을 사용할 수 있다.

추가로 사용자 아이디로 여러 호스트를 서비스하는 것(perchild)과 같은 특별한 기능도 제공된다.


(아파치 공식 홈페이지 참고)

https://httpd.apache.org/docs/2.4/ko/mpm.html



2. Worker 방식


이 다중 처리 모듈 (MPM)은 하이브리드 다중 프로세스 다중 스레드 서버를 구현합니다. 

스레드는 요청을 처리하기 위해 프로세스 기반 서버보다 적은 수의 시스템 자원으로 많은 수의 요청을 처리 할 수 ​​있습니다

그러나 여러 스레드를 사용할 수 있는 여러 프로세스를 유지함으로써 프로세스 기반 서버의 안정성을 유지합니다.


이 MPM을 제어하는 ​​데 사용되는 가장 중요한 지시문은 


각 하위 프로세스가 배포하는 스레드 수를 제어하는 ​​THREADSPERCHILD(각 와 

시작할 수 있는 최대 총 스레드 수를 제어하는 ​​MAXREQUESTWORKERS입니다.




StartServer : 시작시 생성된 하위 서버 프로세스의 수. 프로세스의 수가 로드에 따라 동적으로 제어되므로 일반적으로 이 매개변수를 조정할 이유가 거의 없음

worker의 기본값은 3, prefork의 기본값은 5


MinSpareServer : 유지하고자 하는 최소의 자식 프로세스의 수

MaxRequestsPerChild : 재생산까지 처리해야 하는 횟수(가장 큰 숫자를 설정해야 cpu용량이 좋아지므로 프로세스가 더 많은 요청을 처리할 수 있음)


ThreadsPerChild : 


=> 프로세스 생성을 최소화 하면 트래픽이 몰렸을 때 응답속도를 줄일 수 있지만 평소에도 100개의 프로세스가 유지되어야 한다(MinSpareServer를 100으로 설정한 경우)는 trade-off가 있음





2. Synchronous / Asynchronous


Synchronous


동기화란 <컴퓨터> 작업 사이의 수행 시기를 맞추는 것. 

사건이 동시에 일어나거나일정한 간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다.


웹서버에서 동기화는 프로세스나 쓰레드의 동기화를 말한다.


스레드 동기화는 두 개 이상의 동시 프로세스 또는 스레드 critical section 이라고 하는 특정 프로그램 세그먼트를 

동시에 실행하지 않도록 하는 메커니즘으로 정의


Q. 왜 동시에 실행하지 않도록 하냐?


예를 들어 1, 2, 3 개의 프로세스가 있다고 가정하십시오. 

세 개의 프로세스가 모두 동시에 실행 중이며 공통 리소스 (중요 섹션)를 공유해야합니다. 

여기서는 동기화를 사용해야 합니다. 

이 공유 자원에 액세스 할 때 충돌을 피하십시오. 따라서 프로세스 1과 2가 모두 해당 리소스에 액세스하려고 하면 

한 번에 하나의 프로세스에만 할당되어야합니다. 프로세스 1에 할당 된 경우 다른 프로세스 (프로세스 2)는 

프로세스 1이 해당 리소스를 해제 할 때까지 대기해야 합니다.



-----------------------------------------------------------------------------------------------------------------------------------------

*critical section 

In concurrent programming, concurrent accesses to shared resources can lead to unexpected or erroneous behavior, so parts of the program where the shared resource is accessed are protected. This protected section is the critical section or critical region. It cannot be executed by more than one process at a time. Typically, the critical section accesses a shared resource, such as a data structure, a peripheral device, or a network connection, that would not operate correctly in the context of multiple concurrent accesses.


공유된 리소스에 대한 동시 접근은 예상치못한 에러를 발생시킬 수 있다. 

따라서 그 공유된 리소스가 있는 프로그램의 일부를 보호한다. 

이 보호되는 부분을 임계섹션 혹은 임계영역 이라고 한다. 

-----------------------------------------------------------------------------------------------------------------------------------------


고려해야 할 또 다른 동기화 요구 사항은 특정 프로세스 또는 스레드를 실행해야하는 순서입니다. 예를 들어 비행기 표를 사기 전까지는 비행기 탑승을 할 수 없습니다. 마찬가지로 우리는 자격 증명 (즉, 사용자 이름과 암호)의 유효성을 검증하지 않고 전자 메일을 검사 할 수 없습니다. 같은 방법으로 ATM은 올바른 PIN을 제공하기 전에는 서비스를 제공하지 않습니다.




Q. 아파치가 php 모듈을 직접 적재할 수 있다 => 무슨 의미??