Reference

    [대규모 시스템 설계] 12장. 채팅 시스템 설계

    📕 목차1. 채팅 시스템2. 프로토콜3. 개략적 설계안4. 데이터 모델5. 상세 설계6. 개인적인 추가 고민1.  채팅 시스템 📌 과거와 현재 채팅 시스템 차이💡 책에 나온 내용은 아니고, 예전에 어딘가에서 읽었던 내용인데 출처가 기억 안 나서 정확성이 떨어집니다.과거에는 채팅 프로그램을 위해 서버가 하는 일은 그저, 두 클라이언트의 연결을 돕는 일이 고작이었다.아마, stateless 환경의 HTTP 프로토콜 방식만으로는 한계가 있었기 때문이 아닐까 싶긴 한데, 그렇게 할 수밖에 없었던 이유를 당췌 못 찾겠다. 아무튼, 1:1 실시간 소통이 고작이라면 위 방식도 기능을 제공함에 있어 문제가 되진 않을 것이다. (데이터 보존 원칙같은 건 전부 무시하고, 순수하게 기능 제공 측면만을 고려했을 때)하지..

    [대규모 시스템 설계] 7장. 분산 시스템을 위한 유일 ID 생성기 설계

    📕 목차1. 유일 ID 생성기2. 개략적 설계3. 상세 설계1. 유일 ID 생성기 📌 auto_increment는 답이 될 수 있을까?DB가 단일 서버라면 auto_increment가 답이 될 수 있다.하지만 사용자 트래픽이 높은 곳이라면 단일 DB만으로는 요구 사항을 감당할 수 없을 것이다.그래서 DB 서버를 분산화하면, 더 이상 auto_increment만으로는 유일성을 보장할 수 없기에 이를 동기화하는 작업이 필요한데 지연 시간(delay)을 낮추기가 매우 힘들어질 수 있다. 그리고 NoSQL을 사용한다면, 애초에 선택지가 존재하질 않는다는 문제가 존재한다. (여기서부터는 책에서 나온 내용이 이해가 안 가서, 추가 자료 조사와 추론을 기반으로 작성했습니다.) 🤔 DB를 다중화?샤딩을 통해 ma..

    [대규모 시스템 설계] 2장. 처리율 제한 장치의 설계

    📕 목차1. 처리율 제한 장치(Rate Limiter)2. 토큰 버킷 알고리즘3. 누출 버킷 알고리즘4. 고정 윈도 카운터 알고리즘5. 이동 윈도 로깅 알고리즘6. 이동 윈도 카운터 알고리즘7. 개략적인 설계8. 분산 환경 처리율 제한 장치9. 추가로 고려해볼 것들1. 처리율 제한 장치(Rate Limiter) 📌 필요성DoS(Denial of Service) 공격에 의한 자원 고갈 방지불필요하게 서버를 많이 두지 않아도 되므로 비용 절감특히 유료 외부 API 호출하는 API에 대해서 과금 횟수 절감서버 과부화 방지 나도 전화번호로 인증 코드를 송신하는 API가 있는데, 해당 API에 처리율 제한 장치를 마련해두었다. 📌 일반적인 요구 사항설정된 처리율을 초과하는 요청은 정확하게 제한한다.낮은 응답..

    [대규모 시스템 설계] 1장. 사용자 수에 따른 규모 확장성

    💡 해당 내용은 "가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 참조하여 작성하였습니다. 📕 목차1. 단일 서버2. 데이터베이스3. 수직적 규모 확장 vs 수평적 규모 확장4. 캐시5. 콘텐츠 전송 네트워크(CDN)6. 무상태(stateless) 웹 계층7. 데이터 센터8. 메시지 큐9. 로그, 매트릭 그리고 자동화10. 데이터베이스의 규모 확장11. 백만 사용자, 그리고 그 이상더보기✒️ 요약 아래 내용은 요약일 뿐, 절대 정답이 아니다!• 웹 계층은 무상태 계층으로• 모든 계층에 다중화 도입• 가능한 한 많은 데이터를 캐시할 것• 여러 데이터 센터를 지원할 것• 정적 콘텐츠는 CDN을 통해 서비스할 것• 데이터 계층은 샤딩을 통해 그 규모를 확장할 것• 각 계층은 독립적 서비스로 분할할 것..