대용량 시스템 아키텍처
왜 대용량 처리는 어려운가?
부하가 상당하여 단일 서버나 데이터베이스로는 감당하기 어려운 상황에서, 서버의 스케일 업과 스케일 아웃에서 고민했듯이 다수의 서버와 데이터베이스를 하나처럼 운영해야 한다.
하지만, 동기화와 데이터 일관성 문제 등이 복잡하게 얽혀있다
게다가, 웹 서비스들은 24시간 무중단 운영을 전제로 하므로, 잘못된 코드 한 줄이 서비스 전체에 영향을 미치는 범위가 큽니다.
그리고, 서비스 간 복잡하게 얽힌 의존성은 시스템 복잡도를 급격히 증가시킵니다.
대용량 처리시 지켜야 할 점
고가용성
- 사용자는 언제든지 서비스를 이용할 수 있어야 합니다.
- 장애 점을 최소화하고 복구 시간을 단축하는 데에 중점을 두어야 합니다.
확장성 - 시스템 규모와 사용자 수가 증가하면서 데이터와 트래픽이 증가할 때, 이를 감당할 수 있는 충분한 용량을 확보해야 합니다.
관측 가능성 - 시스템에서 문제가 발생했을 때, 신속하게 인지하고 그 문제의 범위를 최소화하는 방안을 도입해야 합니다.
대용량 시스템 아키텍처 발전사
클라이언트 -> 서버 -> 데이터 베이스
단일 서버와 데이터베이스가 모든 클라이언트 요청을 처리하는 구조입니다.
이 구조는 간단하고 명확하지만, 사용자와 데이터 양이 증가하면서 스케일링 문제를 겪게 됩니다.
클라이언트 - 로드밸런서 - 서버들 - 데이터베이스
부하 분산의 필요성을 인식하고 로드 밸런서를 도입하여 여러 서버에 요청을 분배하게 됩니다.
이는 서버 부하를 줄이지만, 단일 데이터베이스로 인한 병목 현상을 완화시키지는 못합니다.
클라이언트 - 로드밸런서 - 서버들 - 데이터베이스, 캐시
성능 저하 문제를 해결하기 위해 캐시를 도입합니다.
캐시는 자주 접근하는 데이터를 빠르게 가져올 수 있게 해줍니다.
적절한 캐시 전략을 세우는 것은 전체 시스템 성능 향상에 중요한 요소가 됩니다.
(클라이언트 - 로드밸런서 - 서버들 - 데이터베이스, 캐시) + 비동기 큐 - 대외 기관
서비스가 외부 기관과 연결되며, 비동기 큐를 도입하여 성능 저하 문제를 해결합니다.
이는 시스템이 높은 부하를 감당하도록 돕습니다.
이러한 아키텍처의 발전은 시스템의 복잡성을 관리하고, 사용자 요구에 빠르게 대응할 수 있는 능력을 갖추는데 중점을 둡니다. 기술의 발전은 끊임없이 진행되고 있으며, 그 과정에서 항상 시스템의 고가용성, 확장성, 관측 가능성을 유지하는 것이 중요합니다.
점점 더 커져가는 서비스
중요한 것은 저 기술을 사용하는 것이 아니라 왜 이런 아키텍처를 사용하는지를 알아야 합니다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
소프트 파싱과 하드 파싱 (0) | 2023.06.01 |
---|---|
MySQL 아키텍처 (0) | 2023.06.01 |
서버의 스케일 업과 스케일 아웃 (0) | 2023.06.01 |
Session 개요 with Spring (1) | 2023.05.25 |
Cookie (0) | 2023.05.25 |