Zero to Hero

소규모 서비스와 대규모 서비스의 차이

1. 확장성 확보, 부하분산 필요

스케일 업이 아닌 스케일 아웃으로 진행된 느 확장의 경우 요구되는 서버, DB 간 동기화 이슈 해결

 

2. 다중성 확보

특정 서버가 고장 나거나 성능이 저하되더라도 서비스를 계속할 수 있는 구성으로 할 필요가 있다.

대규모 서비스일수록 잠깐의 기능 정지로 인해 많은 손실을 가져오기 때문이다.

 

3. 효율적 운용 필요

서버가 100대를 넘어갈 때 현재 서버들의 상태를 파악할 수 있어야 하고, 상태에 따라서 적절한 조치를 빠르게 취할 수 있어야 한다. 최소한의 인력으로 대규모 시스템을 건강한 상태로 유지하는 것이 필요하다.

 

4. 개발자 수, 개발 방법의 변화

표준화를 위한 교육 및 팀 매니지먼트가 필요하다.

 

5. 대규모 데이터의 처리

가장 중요한 부분.

병목현상을 야기하는 어떤 기술과 알고리즘을 적용해 디스크 I/O를 줄일 수 있을 것인가를 고려해야 한다.

 

대규모 데이터 처리의 어려운 점

1. 메모리 내에서 계산할 수 없다.

대규모 데이터는 너무 방대해서 그것을 모두 메모리에 올릴 수 없다. 다시 말해서 메모리 내에서 계산할 수 없고, 디스크 I/O 가 반드시 병행된다.

 

2. 메모리 내에서 계산할 수 없게 되면 디스크에 있는 데이터를 검색하고, 이로 인해 발생하는 I/O를 어떻게 대처할 것인지가 중요한 포인트다.

 

3. 메모리와 디스크의 속도 차이는 pow(10,5) ~ pow(10,6) 정도다.

 

4. 또 데이터가 커지면 커질수록 메모리에서 처리 못하고 디스크상에서 처리할 수밖에 없는 요건이 늘어난다.

 

디스크는 왜 늦을까?

1. 메모리는 전기적인 부품임으로 탐색 속도에 그다지 영향을 받지 않는다.

 

2. 하지만 디스크는 탐색하기 위해 헤드, 원반 등 하드웨어들이 이동하면서 데이터를 읽는다. 즉 메모리와는 달리 회전 등의 물리적인 동작을 수반하고 이런 차이 때문에 속도에 영향을 준다.

 

3. 아무리 효율적으로 디스크를 탐색한다 하더라도 빛의 속도에 근접시킬 순 없다. 메모리는 1회 탐색 시 마이크로 초가 걸리는 반면, 디스크는 수 밀리 초가 걸린다.

 

4. OS 레벨에서 이를 어느 정도 커버하기 위해 데이터를 1바이트가 아니라 4KB 정도 한꺼번에 읽도록 해 1회의 디스크 회전으로 읽는 데이터수를 많게 한다. 하지만 이 또한 밀리 초가 걸리기 때문에 속도 차이를 피할 수 없다

 

5. 또 전송속도도 메모리에 비해 100배 이상 느리다. 메모리는 7.5GB/초, 디스크는 58MB/초 정도 걸린다.

 

부하 조정

1. CPU 부하의 조정은 상대적으로 간단하다.

 

같은 구성의 서버를 늘리고 로드밸런서로 분산

웹, AP 서버, 크롤러 등을 이용

 

2. I/O 부하의 규모 조정은 어렵다.

DB, 대규모 데이터 등

 

 

대규모 데이터를 다루기 위한 급소

1. 어떻게 하면 메모리에서 처리를 마칠 수 있을까?

즉 디스크 seek 횟수를 최소화하고 국소성을 활용한 분산 처리를 실현해야 한다.

 

2. 데이터량 증가에 강한 알고리즘 및 데이터 구조를 사용하기

선형 탐색을 이분 탐색으로

 

3. 데이터 압축, 정보검색 기술 사용

대규모 서비스를 지탱하는 기술
국내도서
저자 : 이토 나오야,다나카 신지 / 진명조역
출판 : 제이펍 2011.02.28
상세보기

'Review' 카테고리의 다른 글

대규모 서비스를 지탱하는 기술 03  (0) 2021.01.12
대규모 서비스를 지탱하는 기술 02  (0) 2021.01.12
친절한 SQL 튜닝 04  (0) 2020.12.30
친절한 SQL 튜닝 03  (0) 2020.12.30
친절한 SQL 튜닝 02  (0) 2020.12.30
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!