Back-end/네트워크

Connection Pool& Keep-Alive

Ho's log 2021. 5. 19. 23:45

Connection Pool

DB에 접근하는 서비스 요청 처리 과정

1. 매번 요청마다 connection이 필요하다.

2.매번 요청마다 connection을 생성한다.

3. connection을 통해 요청을 처리한다.

4.connection을 닫는다.

 

결론 

1. 애플리 케이션이 느려진다.

2.사용자 수가 많아져 커넥션 수가 너무 많아지면 서버가 죽을 수 있다.

 

고려사항

1. Connection Pool이 너무 작다면, 대기하는 요청이 많아진다.

2. Connection Pool이 너무 크다면, 메모리 낭비가 심해진다.

3. 접속자 수, 서버 부하 등을 고려해 적절한 크기로 조정한다.

 

 

 

HTTP(TCP) 소프트웨어 개발시 고려 사항

1. TCP handshake 설정

2. 인터넷 혼잡을 제어하기 위한 TCP Slow Start

3. 데이터를 한데 모아 한번에 전송하기 위한 네이글 알고리즘

4. TCP 편승 확인 응답을 위한 확인 응답 지연 알고리즘

5. Time_wait 지연과 포트고갈

 

TCP Slow Start

급작스러운 부하와 혼잡을 막기 위한 목적

TCP의 전송할 수 있는 패킷 수는 TCP 커넥션이 만들어진지 얼마나 지났는지 영향을 받는다

데이터가 성공적으로 전송됨에 따라 패킷 수 늘려감

Opening The Congestion Window

 

Time_WAIT

Close 한ㅈ 쪽에서 Time_Wait이 발생 

IP주소와 포트번호를 메모리에 저장

같은 IP주소와 포트번호를 사용하는 TCP Connection을 일정 시간 동안 생성하지 않기 위해서 잘못 된 패킷을 받아 오동작 할 수있음

 

HTTP(TCP)통신의 문제점

1. Tcp handshake 설정

2. 인터넷 혼자을 제어하기 위한 TCP Slow Start

3. Time_wait 지연과 포트고갈

 

->병렬 커넥션과 지속 커넥션을 통한 Connect Pool 방식 

 

병렬 커넥션

장점

HTTP 클아이언트가 여러개의 커넥션을 맺음으로써 여러개의 트랙잭션을 병렬로 처리

페이지를 더 빠르게 내려 받는 효과

최신 브라우저느 6-8개의 병렬 커넥션

 

단점 

다수의 커넥션은 메모리 많이 소모하고 자체적인 성능 문제 발생

TCP Slow Start가 여러개의 커넥션에 적용

각 트랙잰션마다 handshake 

 

지속 커넥션

장점

커넥션 맺음(handshake) 최소화

Tcp slow Start 최소화 (재사용)

연결이 최소화 되어서, Time_Wait의 숫자가 줄어듬

 

단점

잘못 관리 할경우 연결되어 있는 커넥션이 쌓이면 불필요한 리소스가 발샌

 

병렬 커넥션 + 지속 커넥션

적은 수의 병렬 커넥션만을 유지하고 그것을 지속하는 것이 가장 효과적

=HTTP Connect Pool

 

두 가지 지속 커넥션 타입

1.  HTTP/1.0 + keep - Alive 커넥션

 

Keep-Alive handshake

1. 클라이언트는 커넥션을 유지하기위해 ' Connection : Keep - Alive' 헤더를 포함시킨다

2. 이 요청을 받은 서버는 다음 요청도 이 커넥션을 통해 받고자 한다면, 응답 메세지에 같은 헤더를 포함시켜 응답한다.

3. 응답에 'Connection: Keep-Alive'가 없으면, 클라이언트는 서버가 Keep-alive를 지원하지 않으며, 서버가 커넥션을 끊을 것이라  추정한다.

Keep-Alive 커넥션 제한과 규칙

1. 엔티티 본문이 정확한 Content-Length 값과 함께 멀티파트 미디어 형식을 가지거나, 청크 전송 인코딩으로 인코드 되어야 한다.

2. 프락시와 게이트웨이는 메세지를 전달하거나 캐시에 넣기 전에 Connection 헤더를 제거해야 한다.

3.  Keep-alive는 사용하지 않기로 되어  HTTP/1.1 명세에서 빠졌지만, 아직도 브라우저와 서버간에 Keep-alive가 널리 사용되기 때문에, Keep-alive를 처리할수  있는 HTTP애플리케이션을 개발 해야 한다

Dump Proxy

 

Proxy-Connection

2. HTTP/1.1 '지속' 커넥션 

1. HTTP/1.0의 keep-alive 커넥션과는 달리 HTTP/1.1의 지속커넥션은 기본으로 활성화 되어있다.

2. 끊으려면 'Connection : close' 헤더를 명시해야 한다.

3. 클라이언트와 서버는 언제든지 헤더 없이 클라이언트를 끊을 수 있다.

 

 

 

https://www.youtube.com/watch?v=MBgEhSUOlXo 

 

'Back-end > 네트워크' 카테고리의 다른 글

TLS  (0) 2021.05.30
Foward Proxy, Reverse Proxy  (0) 2021.05.22
요청 응답 흐름 과정  (0) 2021.05.12
TCP/ UDP  (0) 2021.05.07
인증과 인가  (0) 2021.04.29