대규모 서비스를 지탱하는 기술 - 3장

couque·2022년 2월 9일
0

03. OS 캐시와 분산

8강 - OS의 캐시 구조

  • 디스크 - 메모리의 속도 차가 10~100만배이므로, OS는 디스크 내의 데이터에 빠르게 액새스하는 구조가 갖춰져있다.
  • OS는 메모리를 이용해 디스크 액세스를 줄이는데, 이를 OS캐시라 한다.
  • Linux의 경우는 이를 페이지 캐시라고 한다.
      • page란 OS가 물리 메모리를 확보/관리하는 단위다.

가상 메모리 구조

  • 논리적인 선형 어드레스를 물리적인 물리 어드레스로 변환하는 과정
  • 물리적인 하드웨어를 OS에서 추상화하기 위해 존재함.
  • OS는 메모리를 직접 프로세스로 넘기는 것이 아니라, 커널 내에서 메모리를 추상화하고 있다.
  • OS는 프로세스에서 메모리를 요청받으면 필요한 만큼 페이지를 확보해 프로세스에 넘긴다.

Linux의 페이지 캐시 원리

  • 프로세스가 OS에 데이터를 요청한다.
  • OS는 디스크로부터 4kb의 블록을 읽어낸다.
  • 메모리상에 데이터를 위치시킨다. ⇒ 페이지 작성
  • OS는 프로세스에게 메모리에 존재하는 가상 어드레스를 안내한다.
  • 프로세스가 메모리에 액세스한다.

→ 데이터 읽기가 끝난 후 데이터가 불필요해도, 할당된 메모리를 해제하지 않고 남겨둔다. 이를 통해 다른 프로세스가 데이터에 액세스할 때, 남겨두었던 페이지를 사용할 수 있으므로 디스크를 읽으러 가지 않는다.

즉, 커널이 한번 할당된 메모리를 해제하지 않고 남겨두는 것을 페이지 캐시라고 한다.

VFS

  • VFS는 Virtual File System으로 가상 파일 시스템이다.
  • 다양한 함수를 가진 파일 시스템(ext3, ext2, ...)을 통일하는 것이 VFS의 역할이다.
  • VFS는 페이지 캐시 구조를 가지고 있다.

Linux는 페이지 단위로 디스크를 캐싱한다

Q. 메모리 여유분이 1.5GB인데, 4GB 파일을 캐싱할 수 있을까?

  • OS는 읽어낸 블록 단위로 캐싱하기 때문에, 특정 파일의 일부분만 캐싱한다.
    • 따라서 파일 캐시보다 페이지 캐시라고 말하는 것이 적절하다.
  • LRU: Least Recently Used, 가장 오래된 것을 파기하고 새로운 것을 남겨놓음
  • 위의 케이스에서 4GB 파일을 전부 읽게 되면 어떻게 될까?
  • LRU로 인해 최근에 읽은 부분이 캐시에 남고 과거에 읽은 것은 파기된다.

→ 따라서, DB를 계속 구동시키면 캐시가 점점 최적화되어가므로, 부하가 내려가는 특성이 있다.

9강 - I/O 부하를 줄이는 방법

캐시를 전제로 한 I/O 줄이기

  • I/O 대책의 기본은 캐시에 의한 경감을 전제로 한다.
    • 다루고자 하는 데이터의 크기에 주목
    • 데이터 압축
    • 경제적인 비용의 밸런스 고려 (메모리)

복수 서버로 확장시키기

  • 데이터를 전부 캐싱할 수 없는 규모가 된다면? → 복수서버로의 확장 고려
  • CPU 부하분산에는 단순히 늘린다.
  • I/O 분산에는 국소성을 고려한다.
    • 캐시 용량을 늘리는 것이 중요하다고 했는데, 캐싱할 수 없는 비율을 그대로 단순히 대수를 늘리게 되면 병목이 다시 발생하기 때문이다.

10강 - 국소성을 살리는 분산

  • 데이터에 대한 액세스 패턴을 고려해 분산시키는 것 → 국소성을 고려한 분산
  • 간단하게 말하면, A 데이터에 접근하고자 할때, A 캐시가 많이 있는 쪽으로 요청을 분배하는 것이다.

파티셔닝

  • 파티셔닝은 한 대였던 DB서버를 여러 대의 서버로 분할하는 방법을 말한다.
  • 간단하게 테이블 단위 분할이 있다.

테이블 단위 분할

  • 각 테이블을 분할해 다른 서버로 관리한다.

테이블 데이터 분할

  • 특정 테이블 하나를 여러 개의 작은 테이블로 분할한다.
  • ex) 사용자 id의 첫 문자로 데이터 파티셔닝

요청 패턴을 으로 분할

  • 시스템의 용도 별로 섬으로 나누는 방식이다.
  • 해당 책에서는 HTTP의 User Agent를 보고 통상의 사용자 & 봇 & 이미지 등의 AP, DB 서버를 나눴다.
  • 통상의 사용자 같은 경우 국소성으로 안정되고 높은 캐시 적중율을 낼 수 있다는 이점이 있다.
  • 봇 액세스가 많은데, 광범위하고 통상의 데이터를 보지 않으므로 나눠 두었다고 한다.
  • 하테나는 국소성을 통해 캐시 효율을 높여 대처한다.

페이지 캐시를 고려한 운용의 기본 규칙

  • OS 기동 직후에 서버를 투입하지 않는 것
    • 캐시가 쌓여 있지 않으므로 오직 디스크 액세스만 발생한다.
    • 그렇다면? 시스템이 다운될 수도 있다.

부하 분산의 기본 지식: OS 캐시, 멀티 스레드나 멀티 프로세스, 가상 메모리 구조, 파일 시스템

0개의 댓글