개발관련 도서/대규모 서비스를 지탱하는 기술

1. 대규모 서비스에서 발생가능한 문제(#대규모 서비스를 지탱하는 기술)

prden 2021. 5. 1. 10:40

1. 대량의 액세스가 있는 서비스에서 서버 1대로 처리할 수 없는 부하를 처리하는 방법

1) Scale-out : 저가의 하드웨어를 횡으로 나열해서 확장성 확보하는 전략

 ※ scale-out 전략 도입 시 발생 가능한 문제 : 로드밸런서 사용에 따른 데이터 동기화 처리 문제, 네트워크 통신의 지연시간 발생 문제

2) Scale-up : 하드웨어의 성능을 높여 처리능력을 끌어올리는 방법

 

2. 다중성 확보

 - 특정 서버가 고장 나거나 성능이 저하될 때 서비스를 계속할 수 있도록 구성해야 함.

 

3. 서버가 100대일 경우

 - 어떤 서버가 무슨 역할을 하는지 파악 어렵다.

 - 뿐만 아니라 각 서버가 어떤 상황에 처해있는지 이를 테면 해당 서버에 대한 부하가 괜찮은지, 디스크 용량이 충분한지, 보안 설정에 미비한 점은 없는지 등 파악이 어렵다. 

-> 물론 감시용 소프트웨어, 정보관리 툴 등을 사용해 파악할 수 있음

 

4. 대규모 데이터량에 대한 대처

- 컴퓨터의 데이터 처리 구조 :

  1) 하드디스크에서 데이터를 로드해서 메모리에 저장 :

     하드디스크에서 데이터를 읽어올 때는 헤드 이동이나 디스크 원반의 회전이라는 물리적 동작이 수반된다. 따라서 전기적으로 읽어들이기만하면 되는 메모리나 캐시 메모리에 비해 10의 6승~10의 9승이나 되는 속도 차이가 발생한다. 

  2) 메모리에 저장된 데이터를 CPU가 패치(fetch)해서 특정 처리를 수행

  3) 메모리에서 패치된 명령은 보다 빠른 캐시(cache) 메모리에 캐싱된다. 

--> 디스크 -> 메모리 -> 캐시 메모리 -> CPU

 * 디바이스 간 속도차를 흡수하기 위해 OS는 데이터를 메모리에 캐싱해둠으로써 문제를 해결함. 그러나 데이터량이 많아지면 처음부터 캐시 미스가 많이 발생하고 그 결과 디스크로의 I/O가 많이 발생한다. 디스크 I/O가 대기에 들어선 프로그램은 다른 리소스가 비어있어도 읽기가 완료되기까지는 다음 처리를 수행할 수 없고 이것은 시스템 전체의 속도 저하를 초래한다.