본문 바로가기

대규모 시스템 설계

대규모 서비스

우리가 많이 사용하고, 많은 데이터를 가지고 있는 서비스
  • 많은 사용자 트래픽
  • 많은 사용자 데이터
  • 사용자 트래픽/데이터의 빠른 증가량

애플리케이션의 인기가 증가하여 트래픽이 감당할 수 없을 정도로 늘어나 며칠 동안 서비스가 안 된다면 어떤 일이 벌어질까?

-> 초기 관심을 보이던 유저들이 이탈한다.

 

* 서비스가 죽지 않도록 트래픽을 감당할 수 있도록 만들어야 한다.

대규모 서비스가 가져야 할 특성

  • 확장성(Elastic)
    • 트래픽에 따라 서비스의 가용량을 늘이고 줄이는 것이 쉬워야 한다.

  • 장애회복성(Resiliency)
    • 서비스에서 장애가 발생하였을 때, 가능한 메뉴얼한 처리 없이 자동적으로 회복되어야 한다.
    • SPOF(Single Point of Failure)가 없어야 한다. * 해당 지점에서 장애가 발생하면 전체 서비스에 장애를 낼 수 있는 부분* 한 대의 물리 서버는 무조건 SPOF가 존재한다.

  • 자동화(Automation)
    • 배포부터 장애 처리 등, 예상 가능한 대부분 기능은 자동화되어서 버튼 클릭 한 두 번 정도로 진행되어야 한다.
    • 사람이 손으로 직접 건드리는 경우 새로운 장애가 발생할 수 있다.
    • OS와 기본적인 Network 설정 이외에 모든 설정을 설치 스크립트 하나로 처리해야 한다.* Iac(Infrastructure as Code)

  • 모니터링(Monitoring)
    • 서비스 상태는 항상 모니터링되어야 한다.

 

* 대규모 서비스는 SPOF를 줄이는 걸 목표로 한다.


SPOF 제거하는 방법

  • 서버 늘리기
    • API Server, DB Server를 한 대만 두지 않고 여러 대를 두고 하나의 장애가 발생해도 문제없게 만든다.
    • 모든 부분에서 최소 이중화가 되어야 한다.

  • Switch, Route 등의 서버 외의 하드웨어 부분도 고려한다.
    • Switch에서 장애가 발생하면 연결된 서버들은 통신할 수 없다.

  • Network의 Bandwidth 한계를 고려한다.
    • 10G 스위치에 10 Gbps 이상의 데이터가 전달되려고 하면, Capoacity를 넘어가는 순간부터 패킷 드랍이 발생한다.