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

  • 데이터가 너무 많으면 메모리 내에서 처리를 다 하기 어렵다.
    • 데이터 건수가 많아진다는 것은 그만큼 I/O도 많아진다는 것
    • 어떻게 대처하는 것이 좋을까?
  • 탐색속도 차원에서 메모리는 디스크보다 만배에서 십만배 이상 빠르다.
    • 디스크는 왜 느릴까?
    • 메모리는 전기적 부품이므로 물리적 구조는 탐색속도와 연관이 없다.
    • 하지만 디스크는 실제로 '물리적' 이동이 수반된다. (헤드의 이동과 원반의 회전)
    • OS는 디스크에 데이터를 저장할 때 회전횟수를 최소화 하도록 데이터를 저장한다.
  • 탐색속도 뿐만아니라 전송속도 또한 차이가 난다.
  • 병목 규명작업의 기본적인 흐름
    • Load Average 확인
      • 시스템 전체의 부하상황을 나타내는 지표
      • 병목의 원인이 어딘지 판단할 수는 없음
    • CPU 병목일 경우
      • 디스크나 메모리 용량 등 그 밖의 부분에서는 병목이 되지 않는 이상적인 상태 (프로그램 로직, 알고리즘 개선해야함)
      • 프로그램이 폭주해서 CPU에 필요이상의 부하가 걸리는 경우 (오류제거 필요)
    • I/O 부하가 높은 경우
      • 프로그램으로부터 입출력이 많아서 부하가 높은 상황
      • 스왑이 발생해서 디스크 액세스가 발생하고 있는 상황
      • 메모리 증설, 데이터 분산, 캐시서버 도입, 프로그램 개선이 필요함

강의6 규모조정의 요소

  • 규모조정(scaling), 확장성(scalability)은 서버 부하 분산과 연관되어 있다.
    • Scale-out은 하드웨어를 횡으로 전개해서 확장성을 확보해가는데 이 때 CPU 부하의 확장성을 확보하기는 쉽다.
    • 그러나 DB 서버 측면에서는 I/O 부하가 걸린다.
  • 웹 애플리케이션과 부하의 관계
    • 서버는 CPU 부하만 걸리니까 분산이 간단함 (데이터를 갖고있는 것이 아님)
    • I/O는 동기화의 문제에 직면한다.
  • 멀티태스킹 OS와 부하
    • 하드웨어는 일정 주기로 CPU에 인터럽트를 건다 (Timer)
    • 이 타이머 인터럽트마다 Load Average 값이 계산됨
    • 커널은 타이머 인터럽트가 발생했을 때 실행가능 상태인 태스크와 I/O 대기인 태스크의 개수를 세어둠
    • 그 값을 단위시간으로 나눈 것이 Load Average값으로 보고됨
    • 처리를 실행하려고해도 실행할 수 없어서 대기하고 있는 프로세스의 수를 말한다.
      • CPU의 실행권한이 부여되기를 기다리고 있는 프로세스
      • 디스크 I/O가 완료하기를 기다리고 있는 프로세스

강의 7 대규모 데이터를 다루기 위한 기초지식

  • 대규모 데이터를 다루는 방법을 두 가지 관점에서 바라보자
    • 프로그램을 작성할 때의 요령
    • 프로그램 개발의 근간이 되는 기초라는 점에서 전제로서 알아두었으면 하는 것
  • 프로그램을 작성할 떄의 요령
    • 어떻게 하면 메모리에서 처리를 마칠 수 있을까?
      • 디스크 seek 횟수 최소화
      • 국소성을 활용한 분산 실현
    • 데이터량 증가에 강한 알고리즘 사용하기
      • 선형검색 대신 이분검색 사용 (o(n)에서 o(logn))
    • 데이터 압축이나 검색기술과 같은 테크닉 활용
  • 프로그램 개발의 한층 아래 기초
    • OS 캐시
    • 분산을 고려한 DMS 운용
    • 알고리즘과 데이터 구조

+ Recent posts