2024/07 27

[KOSTA] Kafka를 이용한 서비스와 데이터 통합 - 1편

Topcis, Partitions, Offsets파티션토픽은 파티션을 나눌 수 있음토픽당 데이터를 분산 처리하는 단위병렬 처리와 많은 양의 데이터 처리를 위해서 파티션을 늘릴 수 있음(늘리기만 하고 줄이는 것은 안됨)파티션의 인덱스는 0부터 1, 2, ... 을 가짐파티션 별로 증가되는 아이디, Offset 값을 가지게 됨.Offset은 파티션에서만 의미가 있음 토픽과 파티션⭐️ 파티션 안에서는 데이터의 순서가 보장-> 다른 파티션의 경우 데이터의 순서성 보장이 안됨파티션에 데이터가 한 번 쓰여지면 변경이 안됨(write once)key를 주지 않으면 어느 ㅍ티션에 데이터가 들어가는지 모름 Broker Zookeeper분산 애플리케이션 코디네이터주키퍼는 브로커를 관리한다.파티션의 리더 선출을 도와준다...

11장. 뉴스 피드 시스템 설계

뉴스 피드란?=> 뉴스피드는 홈 페이지 중앙에 지속적으로 업데이트되는 스토리들로, 사용자 상태 정보 업데이터, 사진, 비디오, 링크, 앱 활동 그리고 페이스북에서 팔로하는 사람들, 페이지, 또는 그룹으로부터 나오는 '좋아요' 등을 포함한다.  개략적 설계피드발행 뉴스피드생성 두 가지 부분으로 설계피드 발행사용자가 스토리를 포스팅하면 해당 데이터를 캐시와 데이터베이스에 기록한다. 새 포스팅은 친구의 뉴스 피드에도 전송한다.뉴스 피드 생성지면 관계상 뉴스 피드는 모든 친구의 포스팅을 시간 흐름 역순으로 모아서 만든다고 가정한다. 뉴스 피드 API클라이언트가 서버와 통신하기 위해 사용하는 수단이다.HTTP 프로토콜 기반, 상태 정보를 업데이트, 뉴스 피드를 가져오거나, 친구를 추가하는 등의 작업을 수행그 중 ..

10장. 알림 시스템 설계

알림 시스템은 최신 뉴스, 제품 업데이트, 이벤트 등 고객에게 중요할 만한 정보를 비동기적으로 제공한다.알림 시스템을 설계해보자. 문제 이해 및 설계푸시 알림, SMS 메세지 그리고 이메일가능한 빨리 전달되어야 하지만, 시스템에 부하가 있을 때는 약간의 지연이 무방iOS 단말, 안드로이드 단말, 랩톱/데스크톱 지원클라이언트 애플리케이션, 서버측 스케쥴링알림을 받지 않도록 설정하면 더 이상 알림을 받지 않는다. 개략적 설계iOS 푸시 알림, 안드로이드 푸시 알림, SMS 메세지 그리고 이메일을 지원하는 알림 시스템의 개략적 설계를 살펴보자.알림 유형별 지원 방안연락처 정보 수집 절차알림 전송 및 수신 절차알림 유형별 지원 방안 iOS 푸시 알림알림 제공자: 알림 요청을 만드는 자.- 단말 토큰(device..

9장. 웹 크롤러 설계

웹 크롤러는 로봇 또는 스파이더라고 부른다. 웹 크롤러 사용 용도검색 엔진 인덱싱: 크롤러의 가장 보편적인 사례. 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스를 만든다. 구글 봇은 구글 검색 엔진이 사용하는 웹 크롤러다.웹 아카이빙: 나중에 사용할 목적으로 장기보관하기 위해 웹에서 정보를 모으는 절차. 국립 도서관이 크롤러를 돌려 웹 사이트를 아카이빙하고 있다.웹 마이닝: 웹 마이닝을 통해 인터넷에서 유용한 지식을 도출해 낼 수 있다. 유명 금융 기업들이 크롤러를 사용해 주주 총회 자료나 연차 보고서를 다운받아 기업의 핵심 사업 방향을 알아낸다.웹 모니터링: 인터넷에서 저작권이나 상표권이 침해되는 사례를 모니터링할 수 있다. 디지마크 사는 웹 크롤러를 사용해 해적판 저작물을 찾아내서 보고한다.문제 이..

8장. URL 단축기 설계

문제 이해 및 설계 범위면접관에게 질문해서 파악한 설계 요구사항쓰기연산: 매일 1억 개의 단축 URL 생성초당 쓰기 연산: 1억개 / 24/ 3600 = 1160읽기 연산: 읽기 연산과 쓰기 연산 비율 10:1초당 읽기 연산: 11,600 회(1160 * 10) 발생URL 단축 서비스를 10년간 운영하면 1억 * 365 * 10 = 3650억 개의 레코드를 보관축약 전 URL 평균 길이는 10010년 동안 필요한 저장 용량 3650억 * 100 바이트 = 36.5TB 개략적 설계안API 엔드포인트, URL 리다이렉션, URL 단축에 대해 살펴본다API 엔드포인트클라이언트는 서버가 제공하는 API 엔드포인트를 통해 통신하고, 엔트포인트는 REST API로 설계 아래 두 가지 API를 설계URL단축용 엔드포..

[KOSTA] Kafka with Spring Boot - 1편

※ 보편적으로 많이 사용했던 버전을 기준으로 작성 됨. 최신 버전은 구조가 바뀌어 있을 수 있다. ※ - 내용이 많아서 1편과 2편으로 나눴습니다. -  아파치 카프카 개요Apache Kafka(아파치 카프카)는 LinkedIn에서 개발된 분산 메시징 시스템으로써 2011년에 오픈소스로 공개되었음 카프카는실시간으로기록스트림을 게시,구독,저장및처리할수있는분산데이터 스트리밍 플랫폼게시: 아파트 벽보와 같이 게시를 하는데, 포스트를 하는 사람은 포스트만 하면 됨구독: 아파트 벽보에 있는 게시글을 읽는 행위.저장 및 처리: 이전 게시판에 있던 게시글(메세지)를 저장하고 처리할 수 있어야 한다.대용량의 실시간 로그처리에 특화된 아키텍처 설계를 통하여 기존 메시징 시스템보다 우수한 TPS를 보여주고 있음어떤 특정 ..

[기획] 설계서? 명세서? 그게 뭔데...

※ 작성 중입니다. ※ 새로운 프로젝트가 진행 되면서 2주동안 열심히 회의를 진행했다.그런데 막상 개발을 하려고 하는데 관련 문서가 없다. 개발을 하라고 하는데..어떻게.. DB를 설계하고 어떤 기능 구현을 해야되는 걸까... 그렇다 내가 부족해서 문서가 없었다! 더 열심히 이겨내야한다! 01. 메뉴 정하기하루 종일 어떻게 해야 하는지 고민하다가 문득 정리가 되었다. 먼저, 필요한 메뉴를 나열하자!! 어쨌든 필요한 메뉴가 있으면 → 화면이 나오고 → 기능 명세가 나오고→ DB 설계가 될 것으로 생각했다. 예를 들어, 아래 이미지와 같이 일반 사용자가 로그인을 하고 보여줘야 하는 상위 메뉴를 정하고 있다.상위 메뉴에서 보여줘야하는 하위 메뉴를 정한다. 메뉴를 정하는 과정에서 회의에 했던 내용을 반영했다!!..

7장. 분산 시스템을 위한 유일 ID 생성기 설계

분산 시스템에서 'auto_increment' 속성이 설정된 관계형 데이터베이스의 키는 사용이 어렵다.=> 데이터베이스 서버 한 대로는 감당이 불가능하고, 지연 시간을 낮추기가 힘들다. 문제 이해 및 설계 범위면접관에게 질문해서 파악한 설계 요구사항ID는 유일해야한다.ID는 숫자로만 구성되어야 한다.ID는 64비트로 표현될 수 있는 값이어야 한다.ID는 발급 날짜에 따라 정렬 가능해야한다.ID 초당 10,000개의 ID를 만들 수 있어야 한다. 유일 ID 생성분산 시스템에서 유일성이 보장되는 ID를 만드는 방법다중 마스터 복제(multi-master replication)UUID(Universally Unique Identifier)티켓 서버트위터 스노플레이크(twitter snowflake) 접근법 다..