Reactive manifesto (4/11)

세젤게으름뱅이·2025년 4월 23일

Spring Webflux

목록 보기
10/16

Reactive manifesto

Reactive?

  • reacting to events or situaions rather than acting first to change or prevent something
  • (무언가를 바꾸거나 예방하기 위해) 먼저 행동하기 보다는 사건이나 상황에 반응하는

Reactive manifesto

  • 소프트웨어 아키텍쳐에 대한 선언문
  • Reactive system의 특성을 강조하고, 구축에 필요한 가이드라인 제공
  • 4가지의 핵심 가치를 제시
    • Responsive : 응답성
    • Elastic : 유연성
    • Resilient : 복원력
    • Message Driven : 메시지 기반
  • 각 작은 구조들이 reactive해야만 전체 시스템 또한 reactive 하다고 할 수 있다.

Responsive (응답성)

요구사항

  • 문제를 신속하게 탐지하고 효과적으로 대처
  • 신속하고 일관성 있는 응답 시간 제공
  • 신뢰할 수 있는 상한선을 설정하여, 일관된 서비스 품질을 제공

결과

  • 가능한 한 즉각적으로 응답
  • 사용자의 편의성과 유용성의 기초
  • 오류 처리를 단순화
  • 일반 사용자에게 신뢰를 조성하고, 새로운 상호작용 촉진

Resilient (복원력)

요구사항

  • 복제, 봉쇄, 격리, 위임에 의해 실현
  • 장애는 각각의 구성 요소에 포함 (봉쇄)
    • 구성요소 : 시스템을 구성하는 각각의 컴포넌트
    • MSA에서는 서버들, 하나의 서버 안에서는 객체
  • 구성 요소들은 서로 분리 (격리)
  • 복구 프로세스는 다른 (외부의) 구성 요소에 위임 (위임)
    • 복구 프로세스가 내부에 존재하면, 복구 프로세스 또한 장애우려
  • 필요한 경우 복제를 통해 고가용성이 보장 (복제)

결과

  • 장애에 직면하더라도 응답성을 유지
  • 시스템이 부분적으로 고장이 나더라도, 전체 시스템을 위험하게 하지 않고 복구할 수 있도록 보장
  • 구성 요소의 클라이언트는 장애를 처리하는데에 압박을 받지 않음.

Elastic (유연성)

요구사항

  • 경쟁하는 지점이나 중앙 집중적인 병목 현상이 존재하지 않도록 설계
  • 구성 요소를 샤딩하거나, 복제하여 입력을 분산
    • Resilient의 복제 : 하나의 문제가 생겨도 다른걸로 대응하기 위함
    • Elastic의 복제 : 하나의 요청을 분산해서 처리
  • 실시간 성능을 측정하는 도구를 제공
  • 응답성 있고 예측 가능한 규모 확장 알고리즘을 지원

결과

  • 작업량이 변화하더라도 응답성을 유지
  • 입력 속도의 변화에 따라 이러한 입력에 할당된 자원을 증가시키거나 감소
  • 상품 및 소프트웨어 플랫폼에 비용 효율이 높은 방식으로 유연성을 제공

Message Driven (메시지 기반)

요구사항

  • 비동기 메시지 전달에 의존
  • 명시적인 메시지 전달
  • 위치 투명 메시징을 통신 수단으로 사용
  • 논블로킹 통신

결과

  • 구성 요소 사이에서 느슨한 결합, 격리, 위치 투명성을 보장하는 경계를 형성. 이 경계는 장애를 메시지로 지정하는 수단을 제공
  • 시스템에 메시지 큐를 생성하고, 모니터링하며 필요시 배압을 적용
  • 유연성을 부여하고, 부하 관리와 흐름제어를 가능하게
  • 단일 호스트든 클러스터를 가로지르든 동일한 구성과 의미를 갖고 장애르 ㄹ관리
  • 수신자가 활성화가 되어 있을 때만 자원을 소비할 수 있기 때문에 시스템 부하를 억제

Reactive manifesto 정리

  • 핵심가치 - 가능한 한 즉각적으로 응답
  • 첫 번째 형태 : 장애에 직면하더라도 응답성을 유지
  • 두 번째 형태 : 작업량이 변화하더라도 응답성을 유지
  • 방법 : 비동기 non-blocking 기반의 메시지 큐를 사용해서 통신
profile
🤦🏻‍♂️

0개의 댓글