대규모 시스템 설계6 [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 11장 뉴스 피드 시스템 설계 뉴스 피드 홈페이지 중앙에 지속적으로 업데이트되는 스토리들 사용자 상태 정보 업데이트, 사진, 비디오, 링크, 앱 활동 등등 1단계 : 문제 이해 및 설계 범위 확정 모바일 앱을 위한 시스템인지, 웹을 위한 시스템인지 둘 다 지원해야 함 중요한 기능으론 어떤 것이 있는지 사용자는 뉴스 피드에 새로운 스토리를 올릴 수 있어야 함 친구들이 올리는 스토리를 볼 수도 있어야 함 뉴스 피드에는 어떤 순서로 스토리가 표시되어야 하는지? 단순히 시간 흐름 역순으로 표시된다고 가정 한 명의 사용자는 최대 몇 명의 친구를 가질 수 있는지? 예시 : 5000명 트래픽 규모? 매일 천만 명이 방문한다고 가정 피드에 이미지나 비디오 스토리도 올라올 수 있는지? 스토리에는 이미지나 비디오 등의 미디어 파일 포함 가능 2단계 :.. 2023. 3. 19. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 10장 알림 시스템 설계 알림 시스템은 어느 서비스나 항상 고민하게 되는 부분이라 생각한다. 실제로 서비스를 구현할 때, 다양한 고민들을 하게 되는데, 설계에 대한 초점에서 바라본 건 새로웠다. 알림 시스템 고객에게 중요할 만한 정보를 비동기적으로 전송 모바일 푸시 알림, SMS 메시지, 이메일 세 가지로 분류 1단계 : 문제 이해 및 설계 범위 확정 시스템이 지원하는 알림 종류 푸시 알림, SMS 메시지, 이메일 실시간 시스템 여부 연성 실시간 시스템이라고 가정 (시스템 부하 시 약간의 지연 무방) 지원해야 하는 종류의 단말 iOS, 안드로이드, 랩톱/데스크톱 알림을 만들 수 있는 주체 클라이언트 애플리케이션 or 서버 측의 스케줄링 알림을 받지 않도록 설정도 가능해야 함 하루에 보낼 수 있어야 하는 양 천만 건의 모바일 푸시.. 2023. 3. 18. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 9장 웹 크롤러 설계 웹 크롤러란 검색 엔진에서 널리 쓰는 기술로, 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 것이 주된 목적이다. 웹 크롤러는 몇 개 웹페이지에서 시작하여 그 링크를 따라 나가면서 새로운 콘텐츠를 수집한다. 검색 엔진 인덱싱 : 크롤러의 가장 보편적인 용례. 크롤러는 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스를 만든다. 일례로 Googlebot은 구글 검색 엔진이 사용하는 웹 크롤러다. 웹 아카이빙 : 나중에 사용할 목적으로 장기보관하기 위해 웹에서 정보를 모으는 절차이다. 웹 마이닝 : 웹 마이닝을 통해 인터넷에서 유용한 지식을 도출해 낼 수 있다. 웹 모니터링 : 크롤러를 사용하면 인터넷에서 저작권이나 상표권이 침해되는 사례를 모니터링 할 수 있다. 이례로 디지마크사는 웹크롤러를 사용해 해적판 .. 2023. 3. 12. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] Chapter 7. 분산 시스템을 위한 유일한 ID 생성기 분산 시스템에서 유일성이 보장되는 ID를 만드는 방법은 여러가지이다. 다중 마스터 복제 (multi-master replication) UUID (Universally Unique Identifier) 티켓 서버 (Ticket Server) 트위터 스노플레이크 (Twitter Snowflake) 접근법 다중 마스터 복제 이 접근법은 데이터베이스의 auto_increment 기능을 활용하는 것이다. 다만 다음 ID의 값을 구할 때 1이 아니라 k만큼 증가시킨다. 여기서 k는 현재 사용중인 데이터베이스의 서버의 수다. 데이터베이스 수를 늘리면 초당 생산 가능 ID수도 늘릴 수 있기 때문에 규모 확장성 문제를 어느정도 해결 가능하다. 여러 데이터센터에 걸쳐 규모를 늘리기 어렵다. ID의 유일성은 보장되지만 그.. 2023. 3. 2. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 6장 키-값 저장소 설계 키-값 저장소 설계 키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스이다. 이 저장소에 저장되는 값은 고유 식별자를 키로 가져야한다. 키와 값 사이의 이런 연결관계를 “키-값” 쌍이라고 지칭한다. 키-값 쌍에서의 키는 유일해야 하며 해당 키에 매달린 값은 키를 통해서만 접근할 수 있다. 키는 일반 텍스트일 수도 있고 해시값일수도 있다. 성능상의 이유로 키는 짧을수록 좋다. 키-값 쌍에서의 값은 문자열일 수 도 있고 리스트일 수도 있고 객체일 수도 있다. 키-값 저장소는 보통 값으로 무엇이 오든 상관하지 않는다. 키-값 저장소로 널리 알려진 것으로는 아마존 다이나모, memcached, 레디스 같은 것들이 있다. 문제 이해 및 설계 범위 확정 완벽한 설계는 없다. 읽기, 쓰기 그리고 .. 2023. 2. 28. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 5장. 안정 해시 설계 해시 키 재배치(rehash)문제 N개의 캐시 서버가 있을 때 이 서버들에 부하를 균등하게 나누는 보편적인 방법은 아래의 해시함수를 사용하는 것. serverIndex = hash(key) % N (N은 서버의 개수) 이 방법은 서버 풀의 크기가 고정되어 있을 때 그리고 데이터 분포가 균등할 때는 잘 동작함. 하지만 서버가 추가되거나 기존 서버가 삭제되면 문제가 생긴다. 1번 서버의 동작 중단 시 서버 풀은 크기가 3으로 변함. 그 결과 키에 대한 해시 값은 변하지 않지만 나머지 연산을 적용하여 계산한 서버 인덱스 값은 달라질 것으로 예측 가능하다. 따라서 1번 서버가 죽으면 대부분 캐시 클라이언트가 데이터가 없는 엉뚱한 서버에 접속하게 된다. 그 결과 대규모 캐시 미스가 발생 가능. 안정해시는 이용하여.. 2023. 2. 28. 이전 1 다음 반응형