우리가 많이 사용하고, 많은 데이터를 가지고 있는 서비스
- 많은 사용자 트래픽
- 많은 사용자 데이터
- 사용자 트래픽/데이터의 빠른 증가량
애플리케이션의 인기가 증가하여 트래픽이 감당할 수 없을 정도로 늘어나 며칠 동안 서비스가 안 된다면 어떤 일이 벌어질까?
-> 초기 관심을 보이던 유저들이 이탈한다.
* 서비스가 죽지 않도록 트래픽을 감당할 수 있도록 만들어야 한다.
대규모 서비스가 가져야 할 특성
- 확장성(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에서 장애가 발생하면 연결된 서버들은 통신할 수 없다.
- Switch에서 장애가 발생하면 연결된 서버들은 통신할 수 없다.
- Network의 Bandwidth 한계를 고려한다.
- 10G 스위치에 10 Gbps 이상의 데이터가 전달되려고 하면, Capoacity를 넘어가는 순간부터 패킷 드랍이 발생한다.