- 대규모 서비스란 방대한 양의 데이터를 처리해야 하는 서비스
- 방대한 양이라고 하는게 굉장히 포괄적인데 어떤 모습으로 생각할수 있냐면..
- 사용자는 100만명 이상, 1500만 UU (Unique User) / 월
- 수십 억의 액세스 / 월 (기본 GByte 단위라고 함)
- 하드웨어 서버는 500대 이상
소규모 서비스와의 차이
확장성 확보, 부하분산 필요
- scale-out, 서버 갯수를 늘려 시스템의 처리 능력을 높여주는 방식
- scale-up, 하드웨어의 성능을 높여 처리 능력을 높여주는 방식
- 요청을 어떻게 분배하느냐의 차이, 로드 밸런서 적용
- 데이터 동기화 필요, 한쪽에 갱신된 내용을 다른쪽에서도 똑같이 파악하고 갱신해야 함
- 네트워크 통신간의 Latency, ms, ns 단위여도 컴퓨터에 있어선 매우 긴 시간이기에 이런 통신 오버헤드를 최소한으로 줄일 필요가 있음
다중성 확보
- scale-out을 하면 서버가 늘어난만큼 서버의 고장률도 필연적으로 늘어난다
- 서버가 고장나더라도 급격하게 부하가 증가하여도 견딜수 있는 방어 시스템이 필요
효율적 운용 필요
- 서버가 100대를 넘어서게 되면 관리가 매우 어려워짐, 부하는 괜찮은지, 디스크 용량은 충분한지, 보안설정엔 이슈가 없는지 등등
- 이는 대부분 정보관리를 위한 소프트웨어 또는 툴을 사용하여 자동화를 하고 있음, 모니터링 툴도 따로 있고
대규모 데이터량에 대한 대처
- 데이터는 디스크 → 메모리 → 캐시 메모리 → CPU 이렇게 몇 단계를 경유해서 처리한다
- 조금 더 상사하게는 디스크에서 데이터를 로드해 메모리에 저장
- 메모리에 저장된 데이터를 CPU가 fetch하여 처리 수행
- 메모리에서 fetch한 명령은 캐시 메모리에 캐싱
- 각 단계간에 속도 차이가 나기에 OS가 데이터를 메모리에 캐싱하여 속도에 영향을 주지 않는 등의 방법을 사용하고 있음
- 하지만 서비스가 어느 정도 규모가 커지면 데이터가 증가하기에 이런 대처만으론 대응할수 없다
데이터 센터