N° 01 — 목록
'Partitioning' (3)
-
Software Architecture/Distributed SystemsDistributed Systems - 10. 일관적 해싱
일관적 해싱 — 노드 추가/제거 시 최소 이동2014년 한 시스템이 4개 노드로 운영되다가 트래픽이 늘어 5개로 확장했다. 해시 파티셔닝(05편)을 썼기 때문에, 노드가 4→5로 바뀌자 전체 데이터의 80%가 다른 노드로 이동해야 했다. 클러스터가 몇 시간 동안 비정상적으로 동작했고, 확장은 실패로 끝났다. 노드 하나를 추가했을 뿐인데 데이터 대부분이 움직이는 현상 — 이건 해시 분할의 근본적 한계다. 이 한계를 해결하는 기법이 일관적 해싱(consistent hashing)이다. 1997년 David Karger 등이 발표한 이 기법은 — 노드가 추가·제거될 때 데이터 이동을 최소화한다. 오늘날 Dynamo, Cassandra, Memcached, CDN이 쓰는 핵심 기법이다.비유로 감 잡기 — 원형 ..
-
Software Architecture/Distributed SystemsDistributed Systems - 05. 파티셔닝과 샤딩
파티셔닝과 샤딩 — 데이터가 한 노드에 안 들 때2019년 한 SaaS 회사의 주문 테이블이 2TB를 넘겼다. 단일 PostgreSQL 인스턴스에 적재했더니 디스크 I/O가 병목이 돼 쿼리가 10배 느려졌다. 가장 비싼 인스턴스로 올려도 한계가 드러났다 — RAM에 인덱스가 다 안 들어가서 디스크 읽기가 폭증했다. "더 비싼 서버"라는 해결책이 다했던 시점이다. 다음 단계는 — 데이터를 여러 노드로 나누는 것, 즉 파티셔닝(partitioning) 또는 샤딩(sharding)이다. 둘은 같은 개념의 다른 이름이다 (샤딩은 주로 데이터베이스 맥락에서, 파티셔닝은 더 일반적으로 쓰인다). 이 글은 데이터를 어떻게 나눌까, 나누면서 생기는 새로운 문제를 어떻게 다룰까를 다룬다.비유로 감 잡기 — 도서관 책을 ..
-
Data & Platform/Event StreamingKafka - 02. topic and partition
topic과 partition — 메시지를 어디에, 어떻게 쌓을 것인가쇼핑몰에서 주문이 들어온다. 이 주문 데이터를 어디에 쌓을까? Kafka에선 topic이라는 곳에 넣는다. "주문" topic, "클릭 로그" topic, "결제" topic처럼 용도별로 topic을 나눠 메시지를 분류한다. 그런데 주문이 초당 수만 건씩 쏟아지면 topic 하나로는 감당이 안 된다 — 그래서 topic을 여러 조각으로 쪼개는데, 그 조각이 partition이다.여기서 대부분이 처음 만나는 함정이 하나 있다. partition 수는 나중에 늘릴 수 있지만, 늘리는 순간 같은 key의 메시지가 다른 partition으로 흩어진다. "사용자 A의 주문은 항상 같은 partition에 있을 것"이라는 가정이 한 번에 깨진다...