Reactive-Programming

Reactive manifesto

caporatang 2024. 4. 15. 23:52
반응형

Reactive manifesto ?

Reactive manifesto란 Reactive 시스템을 만들기 위해 갖추어야할 조건들을 제시하는 일종의 선언문이다.

이 선언문에는 4 가지의 핵심 가치를 제시하고 있다. 핵심 가치는

  1. Responsive (응답성)
    응답성을 만족하려면 문제를 신속하게 탐지하고 효과적으로 대처할 수 있어야하고, 신속하고 일관성 있는 응답 시간을 제공해야 하며 신뢰할 수 있는 상한선을 설정하여 일관된 서비스 품질을 제공해야 한다.
    이러한 요구사항을 만족한다면 사용자에게 즉각적으로 응답되는 서버를 제공할 수 있다. 그리고 오류 처리를 단순화하고 사용자 측면에서 편의성과 유용성의 기초가 된다.

응답성은 일관성 있게 ! 응답을 빠르게 내려줄 수 있게 시스템을 구성해야 한다!

  1. Resilient (복원력)
    복원력을 만족하려면, 복제, 봉쇄, 격리, 위임 이 부분들을 만족해야 복원력을 만족한다고 할 수 있다.
  • 장애는 각각의 구성 요소에 포함 (봉쇄)

  • 구성 요소들은 서로 분리 (격리)

  • 복구 프로세스는 다른(외부의) 구성 요소에 위임 (위임)

  • 필요한 경우 복제를 통해 고가용성이 보장 (복제)

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

장애와 관련된 부분, 장애에 직면하더라도 응답성을 유지할 수 있어야 한다!

  1. Elastic (유연성)
    유연성은 경쟁하는 지점이나 중앙 집중적인 병목 현상이 존재 하지 않도록 설계 해야하며, 구성 요소를 샤딩하거나 복제하여 입력을 분산해야 한다. 그리고 실시간 성능을 측정하는 도구를 제공하고 응답성 있고 예측 가능한 규모 확장 알고리즘을 지원해야 한다.

이러한 요구사항을 만족한다면 작업량이 변화하더라도 응답성을 유지할 수 있고, 입력 속도의 변화에 따라 이러한 입력에 할당된 자원을 증가시키거나 감소 시킬 수 있어야한다. 상품 및 소프트웨어 플랫폼에 비용 효율이 높은 방식으로 유연성을 제공해야 한다.

작업량이 변화하더라도 응답성을 유지할 수 있어야 한다.

  1. Message Driven (메세지 기반)
    메세지 기반은 비동기 메세지 전달에 의존해야 하고, 명시적인 메세지를 전달해야한다. 그리고 위치 투명 메세징을 통신 수단으로 사용해야하고, 논블로킹으로 통신해야 한다.

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

정리하자면 다음과 같다.

  1. 비동기 통신 : 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장한다.
  2. 메세지 큐 : 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
  3. 복원력 : 구성 요소 사이에 경계를 형성하여 직접적인 장애의 전파를 막고 장애를 메세지로 지정해서 위치와 상관 없이 동일하게 장애를 관리한다.
  4. 탄력성 : 구성 요소 사이에 경계를 형성하여 각각의 구성 요소를 독립적으로 확장 가능하게 만들고, 자원을 더 쉽게 추가하거나 제거한다.

결국 Reactive manifesto의 핵심가치는, 가능한 한 즉각적으로 응답되어야 한다.
가능한 한 즉각적으로 응답되어야 한다는건, 첫 번째 형태로 장애에 직면하더라도 응답성을 유지해야 하고 두 번째 형태로 작업량이 변화 하더라도 응답성을 유지해야 한다.
이 첫번째 두번째 방법이 Message Driven, 비동기 non-blocking 기반의 메세지 큐를 사용하면 지켜질 수 있다는 가이드이자 선언문이라고 할 수 있다...

이 사이트에 들어가면 선언문 원본을 읽어보고, 서명도 가능하다.
https://www.reactivemanifesto.org/

반응형

'Reactive-Programming' 카테고리의 다른 글

Project reactor  (0) 2024.04.21
HotPublisher, ColdPublisher  (0) 2024.04.17
Reactive_streams  (0) 2024.04.17
Reactive programming  (0) 2024.04.16
함수 관점에서 동기와 비동기 Blocking, Non-blocking  (0) 2024.04.14