반응형
기본적으로 스프링에서 대규모 요청이 왔을 경우, 톰캣 기반으로 되어있어 쓰레드 풀에 들어있는 객체에 자리가 있다면 동시요청중 쓰레드 풀만큼의 숫자정도 요청은 받을 수 있다.
하지만 그걸 넘어서면 어떻게 될까?
큐에 저장이 되고, 쓰레드가 요청을 처리하면 빈 쓰레드에 그 큐에 들어있는 값들이 처리가 되기 시작한다.
그럼 설정해둔 큐 사이즈를 넘어서는 요청이 더 들어오면?
바로 오류가 난다.
그럼 이런 현상을 방지하기 위해서는 어떻게 해야할까?
수직적 규모 확장 vs 수평적 규모 확장
수직적 규모 확장
- 단순히 성능을 늘리거나, 메모리를 늘리는 방법
- 처리속도를 빠르게 만들어서 쓰레드가 빠르게 비워지도록 함.
- 단, 컴퓨터의 성능향상에는 한계가 있으므로, 어디까지나 한계가 존재하고, 자동 복구나 다중화가 되지않음
- 서버가 다운되면? 그냥 그대로 끝남. 사용자는 오류가 난 화면밖에 볼 수 없음
수평적 규모 확장
- 같은 일을 하는 서버를 여러개 띄워서 요청을 처리시키는 방법
- 요청이 동시에 들어와도, 로드밸런서(요청을 분배하는 역할)가 요청을 분배하여 처리
- 만약 로드밸런서로 처리하다가 너무 많은 요청이 있다 싶으면 추가적으로 인스턴스(서버)를 더 띄워서 처리할 수 있음
그런데 만약 데이터베이스에 접근해야하는 요청이라면 어떻게 될까? 하나의 데이터베이스에 모든 요청이 몰릴 것이다.
이런 문제를 해결하기 위한 것이 데이터베이스 마스터-슬레이브 구조다.
마스터 - 슬레이브
이 구조는 읽기와 쓰기를 나누는 것으로, 읽기연산은 부 데이터베이스에서 하고, 쓰기 연산은 주 데이터베이스에서 처리한다.
그리고 읽기 연산을 하는 부 데이터베이스는 여러개를 두어, 분산하여 처리할 수 있으므로 성능이 더욱 개선된다. 데이터도 여러 지역에 복제해둠으로써 하나의 데이터베이스에 장애가 발생하더라도, 다른 서버에 있는 데이터를 가져와서 서비스할 수 있다.
만약 데이터베이스서버가 하나 다운된다면 어떤 현상이 일어날 것인가?
부 데이터베이스 서버중 하나를 주 데이터베이스 서버로 변경하고 쓰기 정보를 처리하게 된다.
반응형
'JAVA > 웹 프로그래밍 딥하게 파보기' 카테고리의 다른 글
stmt와 pstmt의 차이 (2) | 2024.12.18 |
---|---|
왜 무상태여야하는가? (1) | 2024.12.09 |
스프링의 역할 (1) | 2024.12.06 |
자바로 HTTP 네트워크 요청이 전송되는 원리를 알아보자 (1) | 2024.12.04 |
웹 프로그래밍 딥하게 파보기 (2) | 2024.11.28 |