본문 바로가기

Coding/시스템 디자인10

토스 SLASH 23 - 실시간 시세 데이터 안전하고 빠르게 처리하기 정리 아키텍처국내 시세의 경우 한국거래소에서 실시간으로 제공해주는 전문 형식의 데이터를 통해 체결가, 호가뿐 아니라 거래정지, 공매도, 외국인 투자 현황을 표시한다. 시세 플랫폼은 거래소 데이터를 제일 먼저 수신하고 가공한 뒤 내부 서비스들에게 제공한다. 내부 서비스들은 가공된 데이터 중 각자 필요한 정보를 실시간 또는 API를 통해 얻게 된다. 시세 플랫폼은 단순히 전문을 디코딩 및 전달만 하는게 아니라 주식 차트처럼 가공 데이터를 누적하거나 여러정보를 합성하여 제공하기도 한다. 그리고 이러한 시세 플랫폼은 낮은 지연시간과 빠른 장애복구를 최우선 목표로 삼고 있다.시세 플랫폼은 총 3가지 파트로 구성되어있다. 먼저 수신부는 거래소가 제공하는 시세 데이터를 UDP 멀티캐스트 그룹에 접속하여 읽어오는 일을 한.. 2024. 8. 13.
토스 SLASH 22 - 토스뱅크의 완전히 새로운 대출 시스템 정리 아키텍처(왼쪽 아키텍처) 기존 금융권의 경우 대부분의 비즈니스 로직이 계정계라고 불리는 모놀리틱 코어뱅킹 시스템내에 구현된다. 전통적인 금융권 아키텍처에서 채널계라고 불리는 서비스 서버는 사용자와 연계해 제품을 사용하는데 필요한 요청과 응답을 코어 뱅킹 시스템의 전문 규격에 맞게 변환하고 전달하는데에 중점을 두고 있었다.(오른쪽 아키텍처) 토스뱅크는 마이크로 서비스로 구성된 서비스 서버와 모놀리틱으로 구성된 코어뱅킹 서비스를 각각 독립된 API서비스로 정의하고 전문방식이 아닌 HTTP API통신을 통해 필요할 경우 코어뱅킹 시스템과 통신하며 독립된 마이크로 서비스가 비즈니스 로직을 직접 해결할 수 있도록 구성했다. 비즈니스 로직을 처리하는 시스템 구조뿐만 아니라 KCB, NICE, 신용정보원같은 대외기관.. 2024. 8. 8.
Rate Limiter 시스템 디자인 Token Bucket토큰 버켓의 경우 사전에 정해진 용량을 갖는다. 토큰은 주기적으로 사전에 설정된 비율로 버켓에 저장된다. 그리고 버켓이 꽉차게 되면 정해진 용량을 초과하여 토큰을 추가하지 않는다.각 API 요청은 1개의 토큰을 사용한다. 요청이 오면 버켓에 적어도 1개의 토큰이 존재하는지 확인한다. 존재하는 경우 1개의 토큰을 버켓에서 꺼내고 요청이 처리된다. 버켓이 비어있는 경우 요청들은 버려진다. 위 사진을 보면 유저마다 분당 3개의 요청량 제한이 설정되어있다.1번 유저가 10:00:00에 첫 번째 요청을 보냈을 때 토큰은 3개가 존재하므로 해당 요청은 정상 처리되며 잔여 토큰은 2개로 감소한다.10:00:10에 유저의 두 번째 요청이 오고 토큰은 2개가 존재하기 때문에 정상 처리되며 잔여 토큰.. 2024. 8. 7.
토스 SLASH 22 - 애플 한 주가 고객에게 전달 되기까지 정리 해외주식 전체 아키텍처토스증권은 크게 게이트웨이, 채널계, 해외원장, 국내원장 4가지로 이루어져 있다. 대부분의 증권사들의 원장계는 C기반의 모놀리틱 서버로 구성되어있는 반면 토스증권의 해외주식 원장계는 MSA로 구성되어있다. 주문 체결 흐름도고객은 토스증권을 통해 주문을 제출하게 되지만 토스증권은 한국 법인이기에 나스닥과 같은 현지 거래소와 직접 거래할 수 없다. 따라서 해외거래 중개인 브로커를 통해 주문을 제출하게 된다. 브로커를 통해 거래가 이루어지기 때문에 토스증권과 브로커의 주문 정합성은 매우 중요한 요소이다. 앞선 장표의 흐름을 시스템 레벨에서 도식화한 모습은 위와 같다. 고객의 주문은 매매 서버 - 매매 요청 서버를 거쳐 브로커에게 전달되고 브로커가 거래소에 주문을 제출하는 구조이다. 제출된.. 2024. 7. 4.
틴더(Tinder) 시스템 디자인 Problem Statement틴더와 같은 위치 기반 데이팅 어플리케이션을 디자인해본다. 틴더는 오른쪽 스와이프를 통해 좋아요를 보내거나 왼쪽 스와이프를 통해 싫어요를 보낼 수 있고 매칭된 유저와 채팅할 수 있는 기능들을 제공한다.Gathering RequirementsIn Scope이 어플리케이션은 아래의 요구사항을 충족시켜야 한다.유저는 간략한 프로필과 사진을 업로드하여 자신의 프로필을 생성할 수 있다.유저는 지리적으로 근접해있는 지역의 유저를 추천받을 수 있다.유저는 추천받은 유저에게 오른쪽으로 스와이프하여 좋아요를 보내거나 왼쪽으로 스와이프하여 싫어요를 보낼 수 있다.유저는 타 유저와 매칭된 경우 알림을 받을 수 있다.유저가 다른 지역으로 이동해도 해당 지역과 근접한 지역의 유저를 추천받을 수 있.. 2024. 5. 16.
Uber는 어떻게 Redis를 통해 초당 4천만 읽기를 제공하는가 2020년 우버는 Docstore라는 분산 데이터베이스를 출시했다. 이는 MySQL을 기반으로 만들어졌으며 초당 수천만건의 요청을 처리하는 동시에 페타바이트의 데이터를 저장할 수 있었다. 수년에 걸쳐 Docstore는 우버의 모든 비즈니스 분야에서 서비스 구축을 위해 사용되었고 이러한 어플리케이션의 대부분은 낮은 레이턴시와 높은 성능, 그리고 확장성을 요구했다.Challenges with Low latency database reads확장성이 높고 낮은 읽기 지연이 필요한 애플리케이션을 처리할 때 대다수의 데이터베이스는 문제를 맞이한다. 그 중 몇가지는 다음과 같다.디스크에서 데이터를 검색하는 속도는 임계값이 있다. 또한 어플리케이션의 데이터 모델과 쿼리를 최적화하여 대기 시간을 개선하는 것에도 임계값은.. 2024. 5. 7.