통합 지점
- 나비패턴
- 많은 입력 -> 중앙 시스템 -> 많은 출력
- 모노리스
- 거미줄 패턴
- 부지런히 정리한다면 계층간 호출이 이루어지는 형태로 정리됨
- 그렇지 않으면 서비스의 수보다 연결의 수가 더 많아짐
- 나비패턴은 최대 2N개의 연결, 거미줄 패턴은 최대 2^N개의 연결
- 연결은 통합 지점으로, 각 연결은 시스템의 안정성을 떨어뜨림
- 통합 지점은 시스템에서 일급 살인자
- 이제 통합 지점에서 구체적으로 어떻게 문제가 발생하고 이때 어떤 조치를 취할 수 있는지 살펴봄
소켓 기반 프로토콜
오전 5시 문제
- 출시한 사이트가 오전 5시 정각마다 완전히 정지되는 패턴 발생
- 서로 다른 30여개의 인스턴스에서 실행중, 5분마다 서버상태를 점검중이었는데 그 사이 어떤 일이 발생중
- 재시작하면 상태가 정상화되었음
- 3일째 되는날 스레드 덤프를 확인
- 오라클 JDBC 라이브러리 안, 정확하게는 OCI 호출안에서 블록되는것을 확인
- 다음은 tcpdump와 이더리얼 차례
- 보여지는 내용이 너무나 적었음
- 소수의 패킷이 애플리케이션 서버에서 데이터베이스 서버로 전송되었지만 응답이 없었음
- 데이터베이스에서 애플리케이션 서버로 아무것도 들어오지 않았음
- 모니터링상에서는 데이터베이스는 정상 작동, 블록된 잠금이 없었고 실행중인 작업도 없었음
- 위상황에서 서비스 정상화를 위해 서버를 재시작함
- 다음날도 똑같은 상황 반복 발생
- 이번에는 데이터베이스의 네트워크 트래픽을 살펴볼 수 있었지만 트래픽이 전혀 없었음
- 방화벽의 데이터베이스 쪽 트래픽이 전혀 없다는 것은 매우 중요한 단서
- 가설을 세우고 즉시 애플리케이션의 자원 풀 클래스를 역컴파일해서 가설 확인 시작
- 소켓 연결은 추상화된 개념
- 네트워크 끝단 컴퓨터 메모리에 존재하는 객체일뿐
- 일단 연결되면 TCP 연결은 아무런 패킷 전송없이 며칠이고 존재가능
HTTP 프로토콜
업체 제공 API 라이브러리
통합 지점 문제 대응책
연쇄 반응
연계 장애
사용자
트래픽
지나친 서비스 비용
불쾌한 사용자
해로운 사용자
블록된 스레드
블록 지점 파악
라이브러리
자기 부정 공격
척도 효과
처리 능력 불균형
도그파일
지렛대 원리
응답 지연
제한 없는 결과