본문 바로가기

Architecture

(9)
[Architecture]뉴스 피드 시스템설계 개요이 시스템의 핵심은 효율적인 데이터 분배 메커니즘인 'Fanout'에 있습니다. Fanout-on-Write와 Fanout-on-Read 전략을 적절히 조합하여, 수백만 명의 사용자에게 실시간으로 관련성 높은 콘텐츠를 제공할 수 있습니다.이 시스템은 크게 피드 발행과 뉴스 피드 생성 두 가지 주요 프로세스로 구성됩니다. 피드 발행 과정에서는 새로운 콘텐츠를 효율적으로 저장하고 배포하며, 뉴스 피드 생성 과정에서는 개별 사용자에 맞춘 최신 콘텐츠를 신속하게 조합합니다.성능 최적화를 위해 캐싱, CDN, 비동기 처리 등의 기술을 활용하며, 이를 통해 대규모 트래픽과 데이터를 효과적으로 관리합니다.시스템 요구사항뉴스 피드 시스템은 다음과 같은 요구사항을 충족해야 합니다.모바일 및 웹 플랫폼 지원사용자가 새..
[Architecture]아키텍처 설계와 검토의 핵심 원칙 개요현대 소프트웨어 시스템의 복잡성이 증가함에 따라 효과적인 아키텍처 설계와 지속적인 검토의 중요성이 더욱 커지고 있습니다. 이 글에서는 아키텍처링의 필요성, 주요 아키텍처 유형, 그리고 클라우드 환경에서의 아키텍처 검토 원칙에 대해 살펴봅니다. 특히 AWS Well-Architected 프레임워크를 참고하여, 클라우드 기반 시스템 설계 시 고려해야 할 핵심 원칙들을 소개합니다.아키텍처링의 필요성아키텍처링은 시스템의 전체적인 구조와 동작 방식을 설계하는 중요한 과정입니다. 이는 시스템의 성능, 확장성, 유지보수성, 그리고 비용 효율성에 직접적인 영향을 미칩니다.주요 아키텍처 유형모놀리식 아키텍처하나의 독립한 애플리케이션에서 비즈니스 로직을 진행하는 시스템 구성장점:배포나 디버깅이 용이개발 초기 단계에서 ..
[Architecture]알림시스템 설계 개요이 글은 푸시 알림, SMS, 이메일을 통합한 확장 가능한 알림 시스템의 설계와 구현 방법을 다룹니다. 연성 실시간 시스템으로 설계되어 높은 부하에도 대응할 수 있으며, 다양한 단말을 지원합니다.요구사항 분석알림 시스템은 다음 요구사항을 충족해야 합니다:지원 알림 유형: 푸시, SMS, 이메일성능 특성: 연성 실시간(soft real-time) 시스템, 높은 부하 시 약간의 지연 허용지원 단말: iOS, Android, 노트북, 데스크톱사용자 설정: opt-out 기능(사용자가 알림을 받지 않도록하는 기능) 지원확장성: 천만 건의 모바일 푸시, 백만 건의 SMS, 5백만 건의 이메일 처리 가능알림 유형별 지원 방안iOS 푸시 알림iOS 푸시 알림 흐름:알림 제공자 → APNS → iOS 단말알림 제공..
[Architecture]분산 키-값 저장소 설계 개요키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스입니다. 이 저장소에 저장되는 값은 고유 식별자를 키로 가져야 하며, 키와 값 사이의 이런 연결 관계를 "키-값" 쌍이라고 합니다. 키는 유일해야 하며 성능상의 이유로 짧을수록 좋습니다.이 글에서는 다음 연산을 지원하는 키-값 저장소를 설계하고 분석합니다.put(key, value): 키-값 쌍을 저장소에 저장한다.get(key): 인자로 주어진 키에 연결된 값을 꺼낸다.문제 이해 및 설계 범위 확정분산 키-값 저장소 설계 시 고려해야 할 주요 요구사항은 다음과 같습니다:키-값 쌍의 크기는 10KB 이하이다.큰 데이터를 저장할 수 있어야 한다.높은 가용성을 제공해야 한다: 시스템 장애가 있더라도 빨리 응답해야 한다.높은 규모 확장성..
[Architecture]개략적인 규모를 추정하는 방법 목차개략적인 규모 추정의 중요성응답 지연 값의 이해가용성에 관한 핵심 지표실제 예제: 트위터 시스템 규모 추정효과적인 규모 추정을 위한 팁개략적인 규모 추정의 중요성개략적인 규모 추정은 시스템 설계의 핵심 단계 중 하나입니다. 이는 제안된 설계가 요구사항을 충족시킬 수 있는지를 판단하는 데 필수적입니다. 효과적인 추정을 위해서는 다음 요소들에 대한 이해가 필요합니다:2의 제곱수응답 지연(latency) 값가용성 관련 수치이러한 요소들을 이해하고 활용함으로써 더 정확하고 신뢰할 수 있는 시스템 설계를 할 수 있습니다.응답 지연 값의 이해2010년 구글의 제프 딘이 발표한 응답 지연 값은 현대 컴퓨터 시스템의 성능을 이해하는 데 중요한 지표가 되었습니다. 이 값들을 바탕으로 몇 가지 핵심 인사이트를 도출할 ..
[Architecture]처리율 제한 장치 설계(Rate limiting) 개요 처리율 제한 장치(rate limiter)는 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치입니다. 이 기술은 서비스나 애플리케이션에 너무 많은 요청이 한꺼번에 몰리는 것을 방지하여, 서버가 안정적으로 운영될 수 있도록 돕습니다. 예시: 특정 기간 내에 전송되는 클라이언트의 요청 횟수를 제한 사용자는 초당 2회 이상의 새 글을 올릴 수 없습니다. 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없습니다. 같은 디바이스로 주당 5회 이상 리워드(reward)를 요청할 수 없습니다. API 처리율 제한 장치를 두면 좋은점 DoS(Denial of Service) 공격에 의한 자원 고갈(Resource Starvation)을 방지할 수 있습니다. 비용을 절감할 ..
[Architecture]안정 해시 설계(consistent hash) 개요 수평적 규모 확작성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는게 중요합니다. 안정 해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술입니다. 당면한 문제 : 해시 키 재배치(rehash) 문제 전통적인 해시 테이블에서 서버(노드)를 추가하거나 제거할 때 대부분의 키가 재배치되어야 하는 문제가 발생합니다. 이는 시스템에 큰 부하를 주고, 수평적 확장성을 제한하는 주요 원인이 됩니다. 서버의 개수 변하지 않을때: 문제 없음 서버의 개수가 변할때: 대규모 캐시 미스 발생 문제가 발생한 1번 서버에 보관되어 있는 키 뿐만 아니라 대부분의 키가 재분배 되었다. 1번 서버가 죽으면 대부분 캐시 클라이언트가 데이터가 없는 엉뚱한 서버에 접속하게 된다. 해결 방법: 안정 해시(consis..
[Architecture]대규모 애플리케이션을 위한 아키텍처 설계 가이드 개요 데이터베이스 선택, 애플리케이션의 확장, 로드밸런싱, 캐싱, CDN 활용, 데이터베이스 샤딩 등의 전략을 통해 효율적이고 확장 가능한 웹 시스템 아키텍처를 설계할 수 있습니다. 요약: 사용자 수에 따른 규모 확장성 웹 계층은 Stateless해야 합니다. 이는 시스템이 더 많은 사용자와 트래픽을 수용할 수 있도록 만듭니다. 모든 계층에 다중화를 도입합니다. 이는 시스템의 부하를 분산시키고 가용성을 높입니다. 가능한 한 많은 데이터를 캐시합니다. 이는 응답 시간을 단축하고 시스템의 전반적인 성능을 향상합니다. 정적 콘텐츠는 CDN을 통해 서비스합니다. 이는 전 세계적으로 빠른 콘텐츠 전달을 가능하게 합니다. 데이터 계층은 샤딩을 통해 확장합니다. 이는 데이터 관리를 보다 효율적으로 만듭니다. 각 계층..