errors.EADDRINUSE: 로컬에서 로컬로 요청을 넣는 상황에서, 로컬이 사용할 수 있는 포트 개수가 모두 찼을 때 값이 나온다.(서버가 죽은 상태는 아) 포트가 같은 (내가 내 컴퓨터에 요청을 보내는 경우와 같은) 경우 제대로 측정하기 어렵다.
따라서 가용 포트번호가 없을 때 파란색 막대 그래프가 생기는 것이라고 볼 수 있겠다!
데드락이 걸리는 이유
1초에 10개를 처리할 수 있는 상황에 20개씩 요청이 들어온다면, 10개는 처리되지만 10개는 쌓이는 상황이온다.
10초 후, 더 이상 요청을 받지 않는다고 해도 쌓인 100개의 요청을 처리하느라 10초가 더 필요한 상황인데 이렇게 기존 요청도 처리하면서 새 요청까지 받아야 하는 상황이 오면 데드락에 걸린다. 서버 입장에서 이것을 방지하기 위해 타임 아웃을 걸 수 있다. 타임 아웃이란 내가 설정한 시간 동안 처리 안된 요청은 그냥 버리는 것이다. 이때 사용자 입장에서는 서버가 작동 안 된다고 생각할 수 있다.
그럼에도 부하가 크다면 서버는 죽어버린다..
이러한 상황이 많이 발생하는 경우는 DB에 요청이 많을 때다. DB 요청 시 처리 방법은 커넥션을 맺고, 쿼리문을 날리고, 커넥션을 끊는 방법 세가지가 있는데 이때 메시지 큐를 사용하면 좋다. 제일 비용이 많이 드는 커넥션을 맺고 끊을 때 요청 내역을 메시지 큐에 쌓아두는 것이다. 메시지 큐는 렘, CPU에 임시로 저장하는 것이지 디비에 저장하는 것이 아니라 비용이 적다.이렇게 메시지 큐를 쌓아두는 것으로 부하를 줄일 수 있다. INSERT INTO 시에도 한 번에 집어 넣어야 하는 데이터가 많다면 BULK INSERT를 사용해 대용량 로드를 사용하는 방법이 있다.
'MSA' 카테고리의 다른 글
아틸러리를 활용한 스트레스 테스트 (1) | 2024.02.28 |
---|---|
동시성 처리의 중요성과 방법 (1) | 2024.01.26 |
CQRS 패턴 적용기 - 배민 우아콘 정리 (1) | 2023.12.09 |
MSA로 전향한 11번가의 사례 (1) | 2023.12.06 |