DEV/System Design 5

GFS와 RocksDB의 Block Cache 모델 비교 (feat. OS Page/Buffer Cache)

GFS 논문에는 아래와 같은 내용이 나온다. Linux의 buffer cache를 믿고 file data를 cache하지 않는다고 한다.Neither the client nor the chunkserver caches file data. Client caches offer little benefit because most applications stream through huge files or have working sets too large to be cached. Not having them simplifies the client and the overall system by eliminating cache coherence issues. (Clients do cache metadata, howev..

DEV/System Design 2025.04.13

Possibilities of Performance Bottlenecks for Storage (feat. RocksDB)

File Storage와 Object Storage를 조금이나마 사용해보면서 Storage의 성능 측정을 어떤 기준으로 해야하는지 불명확하게 알고 있었다. 우연히 접한 RocksDB의 Possibilities of Performance Bottlenecks에서 관련된 내용을 발견해서 정리해본다.System Metrics들어가기에 앞서.. Write는 Bandwidth, READ는 IOPs로 구분해서 접근하는 것부터 신선하다..!Disk Write Bandwidth : SSD drive가 허용하는 것 이상으로 write를 시도할 수 있다. 이 때에는 주로 compaction에서 문제가 발생한 것일 수 있다. 무리한 write는 read까지 느리게 만들 수 있다. write가 read까지 영향을 줄 수 있는..

DEV/System Design 2025.04.12

개략적인 규모 추정 :: 숫자에 대한 감 잡기

개략적인 규모 추정구글 엔지니어 Jeff Dean에 따르면 개략적인 규모 추정이란 보편적으로 통용되는 성능 수치상에서 사고 실험을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합할 것인지 확인해보는 과정을 이야기합니다.2의 제곱수분산 시스템에서 사용하는 데이터의 양은 크게 커질 수 있으나, 데이터 볼륨의 단위를 2의 제곱수로 어떻게 표현하는지 알아야 합니다.위와 같은 제곱수에 대한 어느정도의 감을 머릿속에 집어넣어두는 것은 꽤 중요합니다.예를 들어, 이전 포스팅에서 GFS에서 가정한 Individual STREAMING READ operation size는 대략 수백 KB ~ 1MB라고 했습니다."넉넉 잡아 1MB라고 생각하고 2^20정도이구나" 정도의 숫자에 대한 감을 기억해두면 개력적..

DEV/System Design 2025.04.12

CAP Theorem in Google File System

IntroductionGFS에서는 시스템 디자인을 할 때 기존의 방식을 재검토했던 4가지를 소개합니다.First, component failures are the norm rather than the exception.File System은 비싸지 않은 수많은 머신에서 수많은 Client의 요청을 받기 때문에 시스템 결함은 일반적인 현상이다.Second, files are huge by traditional standards. Multi-GB files are common.여러개의 객체를 다루어야할 때, 작은 여러개의 파일로 나누어서 관리하기보다, 일반적으로 하나의 큰 파일을 생성해서 관리한다.Third, most files are mutated by appending new data rather tha..

DEV/System Design 2025.04.12

현실 세계에서의 CAP Theorem

What is CAP Theorem분산 시스템을 설계할 때에는 CAP 정리를 이해하고 있어야 한다. CAP 정리는 일관성(Consistency), 가용성(Availability), 파티션 감내(Partition Tolerance)라는 세 가지 요구사항을 동시에 만족하는 분산 시스템을 설계하는 것을 불가능하다는 정리다. 우선 각 요구사항의 의미부터 명확히 정리하고 넘어가자.일관성 Consistency : 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐에 관계없이 언제나 같은 데이터를 보게 되어야 한다.가용성 Availability : 분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야 한다.파티션 감내 Partion Tolerance : 파티션은..

DEV/System Design 2025.04.12