가상 면접 사례로 배우는 대규모 시스템 설계 기초 / 알렉스 쉬 / 인사이트
처음 개발을 배울때는 적당히 코드만 쳐도 돌아가니까 시스템에 대해서 큰 고민을 하지 않았었다. 그러나 경력이 어느정도 쌓여가면서 단순히 코드만 치는게 아니라 내가 입력한 코드들은 어떤 환경에서 돌아가도록 구성하고, 어떻게 '잘' 돌아가게 만들지에 대한 고민이 필요하다고 느껴졌다. 잘 돌아가는 환경을 구축하려면 Best Pratice
라고 불릴만한 좋은 예제들을 많이 접해야 내가 원하는 시스템을 구축 할 수 있다고 생각이 들었다. 그러다가 만난 이 책으로 여러 대규모 시스템들이 어떻게 동작하면 좋을지 배울 수 있는 좋은 기회였다.
아래는 책을 보면서 배우거나 고려해야 할 내용들에 대해 간단히 작성한 내용이다.
안정 해시는 해시 테이블 크기가 조정될 때 평균적으로 오직 k/n
개의 키만 재배치하는 해시 기술이다.
여기서 k는 키의 개수이고, n은 슬롯의 개수다.
만약 키가 100개고 슬롯이 10개라면, 10개의 키만 재배치 하는 것이다.
기본구성대로 간다면 서버 하나가 죽었을때 특정 서버에만 몰리는 현상이 발생 할 수 있다.
가상노드를 통해 분포를 최대한 균등하게 올릴 수 있다.
그러나 너무 커지면 데이터 저장 공간이 부족해질 수 있으므로 결정(Tradeoff)이 필요함.
서비스에 부하가 걸릴만큼 많은 연관 데이터를 가지고 있는 키로 트위터에서 버락 오바마의 계정 같은 예시가 있다. 트위터 시스템 디자인 영상에서 이 핫키에 대한 방안에 대한 설명을 들을 수 있다.
클라이언트가 서버에 주기적으로 요청을 보내서 응답을 확인하는 방법
요청을 보낸 후 연결을 유지하다가 특이점(서버에서 반응 혹은 타임아웃)이 왔을 때 응답하는 방법
양방향 연결을 통해 서버가 클라이언트에게 비동기 메세지를 보낼 때 널리 사용하는 방법
N개의 DB에서 auto_increment 기능 활용
여러 데이터센터에 걸쳐 규모를 늘리기 어려움
컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트 수
만들기 단순하고 서버 사이 조율이 필요없어 동기화 이슈 X, 규모 확장도 쉬움
ID만으로는 시간순 정렬이 불가능, 숫자가 아닌 값도 들어가는 이슈가 있음
티켓을 발급해주는 하나의 서버를 두는 방식
구현이 쉽고, 유일성이 보장됨
Single-Point-Of-Failure 위험성이 있음
sign비트 - 1비트(음수 양수 구분용)
타임스탬프 - 41비트
데이터센터ID - 5비트
일련번호 - 12비트