시스템 설계
-
분산 키-값 저장소 설계시스템 설계 2022. 8. 30. 23:27
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 이번 챕터에서는 키-값 저장소 설계에 대해서 공부한 내용을 정리했다. 키 값 저장소란? 키 값 저장소는 비 관계형 데이터베이스로 키-값 데이터 쌍을 저장하며, 내부의 데이터는 키를 통해서만 접근할 수 있기 때문에 키를 고유 식별자로 가져야 한다. 키는 일반 텍스트 일수도 있고, 해시 값일 수도 있다. 키는 성능상의 이유로 짧을수록 좋으며, 값은 문자열, 객체, 리스트 등 어떤 값도 가능하다. 대표적인 키 값 저장소로 다이나모 DB, Memcached, Redis 등이 있다. 어떠한 특징을 갖는 키-값 저장소를 살펴볼 것인가? 해당 챕터에서는..
-
분산 환경에서의 장애감지: Gossip Protocol시스템 설계 2022. 8. 28. 17:43
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트 입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 분산 시스템에서는 보통 두 대이상의 서버가 똑같이 한대의 서버에 장애가 발생한 것을 감지해야 해당 서버에 장애가 발생했다고 간주한다. 모든 노드 사이에 멀티캐스팅 채널을 두어, 노드의 장애를 발생할 수 있지만 이는 노드 수가 늘어나면 비효율적이다. 이러한 분산 환경에서 장애를 감지할 때는 gossip protocol을 이용하는 것이 효율적이다. 동작원리 - 각 노드는 멤버쉽 목록을 유지 - 멤버쉽 목록은 멤버 ID와 heartbeat counter 쌍의 목록을 나타냄 - 각 노드는 주기적으로 자신의 heartbeat counter를 증가시..
-
분산 환경에서의 일관성 처리: 정족수 합의시스템 설계 2022. 8. 28. 15:07
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트 입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 다중화된 노드에 데이터를 분산 저장할 때, 정족수 합의 알고리즘을 이용해서 일관성 수준을 조절한다. N = 사본의 갯수 W = 쓰기 연산에 대한 정족수로 쓰기 연산이 성공한 것으로 간주되려면, 적어도 W개의 서버로부터 쓰기 연산이 성공했다는 응답을 받아야 한다. R = 읽기 연산에 대한 정족수로 읽기 연산이 성공한 것으로 간주되려면, 적어도 W개의 서버로부터 읽기 연산이 성공했다는 응답을 받아야 한다. 예시 다음은 N=3일 때 key1을 통해서 val1을 서버에 저장할 때다. 참고로 중재자는 클라이언트와 노드 사이의 Proxy이며, 노드가..
-
안정 해시 설계시스템 설계 2022. 8. 2. 22:35
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트 입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 수평적 규모 확장성 구조를 위해서는 데이터나 요청을 서버에 균등하게 나누는 것이 중요하다. 이번 포스팅에서는 수평적 규모 확장성 구조에 왜 안정해시 설계가 필요한지에 대해서 작성한다. 우선 안정 해시 설계에 대해서 알아보기전에, 어떤 문제를 풀려고 하는지에 대해서부터 알아보자. 다음 문제에 주목하자. 해시 키 재배치(rehash) 문제 4개의 캐시 서버가 있다고 가정하자. 보편적으로 데이터를 4개의 캐시 서버에 고루 배정할 때 다음과 같은 해시 함수를 사용할 수 있다. serverIndex = hash(key) % 4 예를 들어 hash(..
-
처리율 제한 장치(Rate Limiter) 설계시스템 설계 2022. 7. 31. 17:20
[가상 면접 사례로 배우는 대규모 시스템 설계]를 읽고 작성하는 포스트입니다. 틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 이번 포스팅은 처리율 제한 장치의 개념, 설계할 때 고려해야 할 부분 등에 대한 내용을 정리한다. 처리율 제한 장치(Rate Limiter)란? - 처리율 제한 장치는 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치다. - 특정 기간 동안 전송되는 클라이언트의 요청을 제한하는 장치다. - 정의된 임계치를 넘어가면 이후에 들어온 모든 요청들의 처리를 중단한다. 구체적으로 다음과 같은 경우들을 예로 들 수 있다. - 사용자는 초당 2회 이상의 새 글을 올릴 수 없음 - 같은 IP 주소로 하루에 10개 이상의 계정을 생성할 ..
-
대규모 시스템에서 데이터베이스 사용시스템 설계 2022. 7. 24. 23:12
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 대규모 시스템 설계에서 필요한 데이터베이스 사용에 대해 학습한 내용을 정리했다. 어떤 데이터베이스를 사용할 것인가 데이터베이스에는 여러가지 종류가 있지만, 크게 RDBMS와 NoSQL 이 두가지에 대해서 알아본다. 1. RDBMS 자료를 테이블, 행과 열을 통해서 표현한다. 테이블의 관계에 따라 Join이 가능하다. 정규화를 거쳐 데이터 중복 없이 한번만 저장할 수 있다. 스키마로 인해 데이터가 유연하지 못하다. Mysql, Oracle, postgresql, sqlite 2. NoSQL Not only SQL이라는 슬로건에서 생겨난 데이터베이스로 key와 value로 데이터를 관리한다. 관계형 모델을 사용하지 않으며..
-
캐시(Cache)와 CDN(Content Delivery Network) 정리시스템 설계 2021. 9. 21. 13:16
애플리케이션은 데이터베이스 쿼리를 통해 필요한 데이터를 가져온다. 하지만 빈번한 데이터베이스 호출은 성능 문제를 야기할 수 있으며 이는 캐시를 통해서 문제를 완화할 수 있다. 1. 캐시 계층 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨씬 빠르다. 캐시 계층을 둠으로써 성능을 개선시킬 수 있고, 데이터베이스로 가는 부하도 줄일 수 있다. 캐시계층은 다음과 같은 방식으로 동작한다. 클라이언트에서 요청을 받으면 요청을 받은 웹서버는 캐시에 응답이 저장되어 있는지 보고, 저장되어 있으면 클라이언트에게 반환하고, 없다면 데이터베이스에 쿼리를 보내 데이터를 찾은 후 반환한다. 대표적인 캐시 오픈소스로 memcached와 redis가 있다. 2. 캐시 사용의 유의점 - 데이터 갱신은 ..