웹 서버 교육 : 이경환 수석님
웹 서버를 두 대로 늘리면?
로드 밸런서, 공유 스토리지는 있다고 가정
- 우리 조가 생각한 문제점 및 해결법
- 세션 동기화 문제 (서버끼리의 통신)
- 캐시 문제 (서버끼리의 통신)
- 장애 대처 (로드밸런서)
- 웹 서버 1대, 디비 서버 1대
- SPOF : 웹, 디비 뭐든 하나만 죽으면 (Single Point Of Failure)
-
세 대의 서버
- 부하 분산 (LB : Load Balancing)
- 두 서버에 트래픽을 분배
- 고가용성 (HA : High Availability)
- 예) 장애 시에 대기 서버를 활용. 트래픽을 분배하지는 않음.
- 부하분산과 고가용성
- 가장 흔한 것이 L4
L7 헬스체크
- HAProxy (SW L4)
- 사내 교육 : 개발자를 위한 L4
- DNS RR(Round Robin)을 이용
- TTL(Time to Live)을 아무리 짧게 해도 브라우저 캐시가 문제
- 서버쪽 JVM 캐시
- 세션 공유
- 로그인 정보 등을 공유해야함
- 쿠키를 이용할 수도 (데이터 양에 제한)
- 웹 서버 로컬 디스크에 공유 정보를 저장할 수 없음
- 구글 앱엔진과 같은 자동 스케일링을 해주는 인프라의 중요 제한 사항
- 두 서버간 컨텐트를 공유하려면
- DB. NAS/NFS, Redis
- 가장 흔한 것이 L4
웹 서버 두 대로 정상 서비스가 될까?
각 서버가 전체 트래픽의 50% 이상을 받으면…
- 한 대에 문제가 생기면 다른 한 대가 전체 요청을 처리 할 수 없어 결국 전면 장애로 이어짐!!
L4에 대해 조금만 더
-
DSR(Direct Server Return) 모드
L4가 양방향 프록시라면
- 모든 웹 서버가 받는 트래픽을 L4가 다 받아야함
- DSR 모드라면 L4의 부담을 줄여줄 수 있음 (웹->클라이언트 direct)
- 적당한 예
- 요청 패킷이 적은 케이스
- 일반적인 웹 요청
- 파일 다운로드
- 적합하지 않은 예
- 요청 패킷이 많은 케이스
- 파일 업로드와 같은 웹 요청. 업로드 할 때는 L4를 거치지 않도록 예외처리
- SMTP
-
L7과 L4
웹 서버 기술교육을 들으며 느낀 점
- 사실 그저 코드를 작성하여 로컬에서의 서비스를 만드는 것은 학부때 혼자서도 해볼 수 있었고, 여러 교육기관을 통해서도 할 수 있었다.
- 하지만 NHN basecamp에서는 나의 서비스를 여러 서버로 운영해보며 그에 대한 문제점과 해결법을 마주할 수 있었고, NHN Cloud의 Object Storage나 deploy를 이용하여 간단하게 배포를 하는 등 혼자서는 전혀 할 수 없었던 부분들을 해보며 시야를 넓힐 수 있어서 좋았다.
- 이번주에는 인증서버 DB에 샤딩을 적용하는 것을 해보게 된다. 내용은 다행히 이해가 갔고, 이제 구현을 앞둔 단계에서 막막함이 있는데, 이 또한 해결하고 더 성장 할 것에 기대가 된다.