ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP 완벽 가이드 4장 커넥션 관리
    Web Dev/7. 네트워크 2021. 1. 14. 21:15
    728x90

    다른 많은 중요한 내용이 있었지만, 성능관련 내용 특히 정리하기

     

    - TCP 성능 관련 중요 요소

    • TCP 커넥션의 핸드셰이크 설정
    • 인터넷의 혼잡을 제어하기 위한 TCP의 느린 시작(slow-start)
    • 데이터를 한데 모아 한번에 전송하기 위한 네이글 알고리즘
    • TCP편승 황인응답을 위한 확인 응답 지연 알고리즘
    • TIME_WAIT 지연과 포트 고갈

    -HTTP 커넥션 관리

    • connection 헤더란? 
      • HTTP는 클라이언트와 서버 사이에 프락시 서버, 캐시 서버 등과 같은 중개 서버가 놓이는 것을 허락한다. HTTP 메시지는 클라이언트에서 서버(혹은 리버스 서버)까지 중개 서버들을 하나하나 거치면서 전달된다. 
      • 두개의 인접한 HTTP 애플리케이션이 현재 맺고 있는 커넥션에만 적용될 옵션을 지정해야할때가 있다. 이때 HTTP Connection 헤더필드를 사용하고, 이 값들은 다른 커넥션에는 전달하면안된다. 
      • 커넥션 정보는 홉 별이라 다른데로 넘어갈때는 지워야한다. 
    • 순차적인 트랜잭션
      • 매번 커넥션맺고 끊고 slow start때매 지연이 있다. 
    • TTP 커넥션의 성능을 향상 시키는 방법 네가지
      • 병렬(parallel) 커넥션: 여러개의 TCP 커넥션을 통한 동시 HTTP 요청
        • 커넥션마다도 메모리를 소모하기때문에 꼭 성능이 더 좋은 것은 아니고, 백명의 사용자가 100개씩 커넥션 맺고 그러면 큰일나서 많아도 한번에 4개정도 처리하게 한다고 한다. 
      • 지속(persistent) 커넥션: 커넥션을 맺고 끊는데서 발생하는 지연을 제거하기 위한 TCP 커넥션의 재활용
        1. 처리가 끝난후에도 커넥션이 게속 열려있는것이라, 클라이언트나 서버가 끊기 전까진 커넥션이 계속 열려있는 것을 말한다. 
        2. HTTP 1.0의 Keep-Alive: 여기서 도입해가지구, 지속커넥션을 하기위해썼다.
        3. HTTP/1.1에서는 이게 명세에서는 빠졌다.근데 많이 쓰이고 있어서 애플리케이션은 그것을 처리할 수있게 개발해야한다.
          1. HTTP/1.0 keep-alive 커넥션을 구현했으면 요청에 Connection: Keep-Alive 헤더를 포함시킨다.
          2. 서버는 요청을 받고, 지원가능하면 응답에 Connection: Keep-Alive를 포함시킨다.
          3. 클라이언트는 그러면 이 응답을 보고 응답에 Connection: Keep-Alive 가 있으면, 오 커넥션 열려있구나,  없으면 음.. 안되는구나 한다. 
          4. 근데 요청했다고 무조건 해주는건아니고, 상황 봐가면서 한다고 한다 .
        4. Keep Alive 와는 멍청한 프락시 문제가있다.
          1. 멍청한 프락시는 Connection: Keep-Alive 를 보고 뭔지 모르고 그냥 다음 홉에 패스해버리는데, 이 서버는 Keep-Alive하라고 시키니까, 커넥션을 열어둔다. 
          2. 그리고 서버가 Keep-Alive 하겠다고 답변 보내고, 또 이 멍청한 프락시가 고걸 그대로 클라이언트에 갖다준다. 이때 아주 서버와 클라이언트는 단단히 오해가 생겨버렸다. 둘다 Keep-Alive 되있는줄아는데, 멍청한 프락시는 그게 뭐요? 하는 중인것이다.
          3. 그래서 다음에 클라이언트는 당연히 Keep-Alive인줄알고 요청을 보냈는데, 프락시 서버는 서버로부터 Connection을 close하라고 안와서 의아한 상태에 빠져버렸다. 그래서 클라이언트가 요청을 계속 보내고 서버도 Keep-Alive라고하니까 막상 답장은 보내는데, 멍청한 프락시는 뭐요, 왜 종료를 안하는거요? 하는 상태에 빠져버리는 것
      • 파이프라인(pipelined) 커넥션: 공유 TCP 커넥션을 통한 병렬 HTTP 요청
      • 다중(multiplexed) 커넥션: 요청과 읃압들에 대한 중재

     

     

    후기

    댓글

Designed by Tistory.