개발

· 개발
이벤트 소싱이란?이벤트의 발행 순서를 지키지 않으면 예상치 못한 결과가 발생하는 경우가 존재합니다. 그러한 경우 메시지 브로커를 통해 메시지 처리 순서를 보장할 수도 있지만 이벤트 소싱을 사용하여 순서를 보장할 수 있습니다. 이벤트 소싱은 애플리케이션 상태에 대한 모든 수정 사항이 이벤트로 순차적으로 저장되는 고유한 시스템 설계 패턴입니다. 각 상태 변경을 트랜잭션 로그에 기록한다는 점에서 트랜잭션 데이터베이스 시스템의 작동 방식과 유사합니다. 그러나 이벤트 소싱의 맥락에서 '이벤트'는 '알림'보다 '상태 변경'을 의미합니다. 이벤트 소싱의 핵심 구성 요소는 이벤트의 순서가 보존되는 특수 저장 공간인 이벤트 저장소입니다. 이 시스템은 이전 이벤트를 새 이벤트로 덮어쓰지 않습니다. 대신 새 이벤트를 시퀀스..
· 개발
Competing Consumer Pattern"어떻게 하면 소비자들 사이에서 엄청난 수의 비동기 메시지를 배분할 수 있을까?" 가장 간단한 접근 방식은 소비자들이 서로 경쟁하도록 하는 것이다. 이를 경쟁 소비자 패턴이라 한다.소비자 패턴 동작 방식한 명 이상의 프로듀서가 대기열에 메시지를 추가한다. 이러한 메시지는 수행해야 하는 작업과 같다.이 대기열에서 메시지나 작업을 처리하도록 여러 소비자 인스턴스가 설정된다.각 소비자는 메시지를 검색하고 처리하기 위해 경쟁한다.한 소비자가 메시지를 성공적으로 청구하면 다른 소비자는 메시지를 사용할 수 없게 된다.처리 후 소비자는 메시지를 승인하고 대기열에서 제거한다.중요한 점은 메시지가 한 명의 소비자에 의해서만 처리되도록 하는 것이다. 다시 말해, 소비자가 사용..
· 개발
레디스에서의 확장성레디스를 운영하는 도중 키의 이빅션이 자주 발생한다면 서버의 메모리를 증가시키는 스케일 업을 고려할 수 있다. 키의 이빅션은 레디스 인스턴스의 maxmemory만큼 데이터가 차 있을 때 또다시 데이터를 저장할 때 발생하는 것이므로, 서버의 메모리를 늘리고 레디스 인스턴스의 maxmemory 값을 증가시키는 스케일 업을 통해 더 많은 데이터를 저장할 수 있다. 레디스 클러스터의 기능레디스를 클러스터 모드로 사용하면 추가적인 애플리케이션 아키텍처의 변경 없이 여러 레디스 인스턴스 간 수평 확장이 가능해지며, 데이터의 분산 처리와 복제, 자동 페일오버 기능 또한 사용할 수 있다. 데이터 샤딩데이터 저장소를 수평 확장하며 여러 서버 간에 데이터를 분할하는 데이터베이스 아키텍처 패턴을 샤딩이라 ..
· 개발
고가용성 기능의 필요성복제를 구성하면 마스터 노드에 장애가 발생한 경우에도 데이터는 복제본 노드에 남아 있을 수 있다. 하지만 클라이언트가 마스터 노드에 직접 연결된 상태였다면 아래와 같은 과정을 통해 장애 상황을 복구할 수 있다.복제본 노드에 직접 접속한 뒤 REPLICA OF NO ONE 커맨드를 입력해 읽기 전용 상태 해제애플리케이션 코드에서 레디스의 엔드포인트를 복제본 노드의 IP로 변경배포 센티널이란센티널은 데이터를 저장하는 기존 레디스 인스턴스와는 다른 역할을 하는 별도의 프로그램이며, 센티널의 자동 페일오버 기능을 사용하면 마스터 인스턴스에 장애가 발생하더라도 레디스를 계속 사용할 수 있도록 동작해 레디스의 다운타임을 최소화할 수 있다.모니터링: 마스터, 복제본 노드의 상태를 실시간으로 확인..
· 개발
고가용성가용성이란 일정 기간 동안 서비스를 정상적으로 사용할 수 있는 시간의 비율을 뜻한다.레디스에서 고가용성을 확보하기 위해서는 다음의 두 가지 기능이 필요하다.복제: 마스터 노드의 데이터를 복제본 노드로 실시간 복사하는 기능이다. 마스터 노드의 서버에 장애가 생겨 데이터가 유실된다 해도 복제본 노드에서 데이터를 확인할 수 있다.자동 페일오버: 마스터 노드에서 발생한 장애를 감지해 레디스로 들어오는 클라이언트 연결을 자동으로 복제본 노드로 리다이렉션 하는 기능이다. 이를 통해 수동으로 레디스의 엔드포인트를 변경할 필요가 없어 빠른 장애 조치가 가능하다.두 기능 중 어느 하나라도 정상적으로 동작하지 않는다면 고가용성을 확보할 수 없다. 레디스에서 복제 구조레디스는 멀티 마스터 구조를 지원하지 않으며 마스..
· 개발
Event Notification이는 한 시스템이 다른 시스템에 도메인의 변경 사항을 알리기 위해 이벤트 메시지를 보낼 때 발생한다. 이벤트 알림의 핵심 요소는 소스 시스템이 응답에 크게 신경 쓰지 않는다는 것이다. 종종 응답을 전혀 기대하지 않거나, 소스에서 관심을 갖는 응답이 있더라도 간접적인 경우가 많다. 이벤트를 전송하는 로직 흐름과 해당 이벤트에 대한 어떤 반응에 응답하는 로직 흐름 사이에는 뚜렷한 분리가 있을 것이다. 이벤트 알림은 결합 수준이 낮고 설정이 매우 간단하기 때문에 좋다. 그러나 다양한 이벤트 알림을 통해 실행되는 논리적 흐름이 실제로 존재한다면 문제가 될 수 있다. 문제는 프로그램 텍스트에 명시되어 있지 않기 때문에 이러한 흐름을 파악하기 어려울 수 있다는 것이다. 이러한 흐름을..
belljun
'개발' 태그의 글 목록 (2 Page)