Reactive manifesto (4/11)
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 기반의 메시지 큐를 사용해서 통신