-
대용량 처리를 위한 MySQL 이해Programming Language/Spring 2023. 5. 25. 02:03반응형
대용량 서버를 구축하기 위해서는 어떤 것들을 알아야할까
- Spring, MySQL, MongoDB, Redis, Kafka, MSA, ...
- 서버 개발자의 핵심은 데이터다.
- 대용량 시스템이 어려운 이유는 결국 많은 양의 데이터에서 시작된다.
- 어떻게 많은 양의 데이터를 안정적으로 삽입, 갱신, 조회할 것이냐?
- 정규화, 인덱스, 트랜잭션, 동시성 제어
웹의 기본 아키텍처
- 클라이언트
- 서버
- 데이터베이스
웹의 요구 사항이 점점 복잡해짐
- 클라이언트
- 웹 서버
- 웹 애플리케이션 서버
- 데이터베이스
웹 서버, 웹 애플리케이션 서버는 왜 나누어져 있을까?
- 태초에는 웹 서버만 있는 형태에서 웹의 복잡도가 증가함에 따라...
- 관심사의 분리 / 관측 가능한 시스템 / 효율적인 리소스 사용
대용량 시스템의 모습
왜 데이터베이스가 병목일까?
- 스케일 업(scale up)과 스케일 아웃(scale out)
스케일 업 스케일 아웃 유지보수 및 관리 쉬움 여러 노드에 적절히 부하 분산 필요 확장성 제약이 있음 스케일 업에 비해 자유로움 장애복구 서버가 1대, 다운타임이 있음 장애 탄력성이 있음 언제 스케일 아웃이 가능한가?
- 같은 입력에 대해서는 항상 같은 결과를 반환
그렇다면 데이터베이스를 스케일 아웃을 하기는 어려울까?
- 데이터베이스는 '데이터'라는 상태를 관리하고 있어 서버보다 스케일 아웃을 하기 위해서는 훨씬 많은 비용이 필요
- 현대 서버 아키텍처는 상태관리를 데이터베이스에 위임하고 서버는 상태관리를 하지 않는 방향으로 발전
- 스케일 아웃 외에도 데이터베이스는 디스크의 데이터를 접근해서 가져온다.
대용량 시스템 아키텍처 맛보기
대용량 트래픽 / 데이터 처리는 왜 어려울까?
- 하나의 서버 또는 데이터베이스로 감당하기 힘든 부하
- 다수의 서버와 데이터베이스를 마치 하나인 것처럼
- 웹 서비스들은 24시간 무중단
- 잘못된 코드 한줄이 미치는 영향의 범위가 크다.
- 여러 마이크로서비스들이 복잡한 의존 관계를 가진다.
대용량 시스템이 어려운 이유
- 하나의 서버로 감당하기 힘들어 대부분 여러개의 서버 또는 데이터베이스를 사용함
- 여러개의 서버에서 유입되는 데이터의 일관성을 보장할 수 있어야함
- 코드 한줄이 데이터에 미치는 영향 범위가 굉장히 커짐
- 여러 서비스들이 얽혀있어 시스템 복잡도가 상당히 높음
그렇다면 대용량 시스템은 어떠해야하는가?
- 고가용성
- 언제든지 서비스를 이용할 수 있어야한다.
- 확장성
- 시스템이 비대짐에 따라 증가하는 데이터와 트래픽에 대응할 수 있어야 한다.
- 관측가능성
- 문제가 생겼을 때 빠르게 인지할 수 있어야 하고 문제의 범위를 최소화할 수 있어야 한다.
대용량 시스템의 아키텍처는 어떤 모습을 하고 있는지 점진적으로 시스템을 발전시켜보자
반응형'Programming Language > Spring' 카테고리의 다른 글
[Spring In Action] 14. 클라우드 구성 관리 (0) 2023.08.06 [Spring In Action] 12. 리액티브 데이터 퍼시스턴스 (0) 2023.06.05 Microservice와 Spring Cloud 소개 (0) 2023.05.05 [Spring In Action] 11. 리액티브 API 개발하기 (0) 2023.03.24 @Transaction(readOnly = true) (0) 2022.11.21