CheerUp_Cheers
[북미팅 후기] 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1&2 본문
늦은 북미팅 후기지만, 스터디를 하고 있던 기술서적의 역자께서 북미팅을 진행한다고 하셔서 참여 해보았다.
왜 역자의 북미팅을?
라고 생각하는 분들도 있을 거라고 생각한다. 단순히 책에 대한 번역을 진행하신것 아닌가?
하지만, 해당 기술서적을 읽어보니 단순히 번역만을 해서는 본연의 책이 전달하고자 했던 내용을 담기는 어려워 보였다.
또한, 해당 역자의 개발 경험을 들어보고 싶었다.
북미팅의 진행 순서는 역자 소개 > 질문 > 어려웠던 책 내용설명(안정 해시설계) > 마무리 질문으로 진행되었다.
역자 소개에서는 역자가 어떻게 기술서적에 대한 번역을 진행하게 되었고, 유명 해외 기업까지 이직을 하며 개발을 할 수 있었는지와 PM으로써 팀원들을 대하게 되는 태도의 변화 등 여러 경험들을 간접적으로 느껴볼 수 있었다.
또한, 북미팅에 참여했던 다른 분들이 IT 개발을 하면서 궁금했던 내용들을 들을 수 있었고 꽤나 신선했던 경험이였다고 생각한다.
그리고 서적에서 가장 많은 문의가 있었다고 하는 '키-값 저장소 설계'에 대해서도 친절하게 설명을 해주셨다. 내용은 서적에서 이미 읽었던 내용이라 복습한다는 느낌으로 듣고 있었지만, 가장 흥미롭게 보였던 것은 키-값 저장소 설계를 위해 스텝별로 문제를 해결하는 과정이였다.
예를 들면 아래와 같다.
데이터 파티션으로 고르게 나누기 위해, 안정 해시에 대한 내용을 이해해야 한다.
안정 해시
목표 : 데이터를 서버에 균등하게 나누어야 한다.
1) N개의 캐시서버를 만들고, 해시 함수로 나누자.
서버풀이 고정, 데이터 분포가 균등할 때는 잘 작동.
=> 서버가 추가되거나 기존서버가 삭제된다면 대부분의 키가 재분배되어 캐시 미스 발생.
2) 해시공간과 해시링을 만들자.
서버추가나 서버제거 시에는, 키 가운데 일부만 재배치하면 된다.
=> 파티션 크기를 균등하게 유지하는게 불가능
키의 균등 분포(uniform distribution)를 달성하기 어려움.
3) 가상노드를 사용하기
실제 서버를 가르키는 가상노드가 많아질 수록 키의 분포는 균등 해짐.
분산 키-값 저장소 설계
그리고 본론인 설계 순서이다.
목표 : 단일이 아닌 분산 키-값 저장소 설계를 해야 한다.
1) CAP 정리를 참고해서 요구사항에 맞는 시스템을 선택한다.
일관성, 가용성, 파티션을 모두 만족하는 시스템은 없다.
2) 정족수 합의 프로토콜로 적절한 동기화를 진행한다.
N= 사본개수, W=쓰기 연산의 정족수, R=읽기연산의 정족수
일관성 수준에 따라 값을 조정.
W+R > N이 강한 일관성이 보장됨(보증할 데이터가 하나는 겹치기 때문)
=> 장애 처리는?
3) 장애 감지와 장애해소 전략 선택
A. 장애 감지
- 멀티 캐스팅 채널 구축
=> 확실하나 너무 비효율적
- 가십 프로토콜 솔루션
B. 임시 장애 처리
- 엄격한 정족수
=> 가용성을 확실히 보장함, 느슨한 정족수가 가용성을 더 높일 수 있음
- 느슨한 정족수
장애서버를 제외하고 건강한 서버가 임시로 처리.
=> 영구 장애(해당 서버가 계속 죽어있다면..)는?
C. 영구 장애 처리
사본과의 일관성이 망가진 상태를 탐지하고 전송 데이터를 줄이기 위해 반-엔트로피 프로토콜 구현.
이런 순으로, 목표를 위해 하나씩 해결하면서 진행하는 확인할 수 있었고, 이를 통해 소프트웨어 문제 해결을 위해서 완벽한 답안은 없고 풀어나가야함을 알 수 있었다.
여튼 생각보다 북미팅은 흥미로웠다. 가볍게 참여했다가 서적의 내용을 보고 머리도 쓰게되고, 참여한 타 개발자분들의 질문들에서 보이는 열정을 느낄 수 있어 반성하게 되었다.