주요글: 도커 시작하기
반응형

"A Journey into Reactive Streams" 글 요약(원문은 여기 참고, 번역글은 여기 참고)


스트림

  • 스트림은 시간이 지남에 따라 생성되는 일련의 요소들
  • 시작과 끝이 없을 수 있음
스트림과 배열의 차이
  • 스트림 처리 시스템에서 모든 스트림 요소를 접근할 수는 없음
  • 요소가 다른 속도로 발생할 뿐만 아니라 모든 요소를 처리할 거라 보장할 수 없음
  • 스트림이 아직 존재하지 않을 수도 있고, 끝 개념이 없음

리액티브 스트림


리액티브 스트림 목표

  • 비즈니스 개발자가 스트림 처리를 위한 저수준 작업에 신경쓰지 않도록 추상화 수준을 높이는 것
스트림 처리 영역의 도전 과제를 해결하기 위해
  1. 무한 버퍼 없이, 소비 비율에 따라 리액티브(push)와 인터랙티브(pull) 모델을 자동 전환
  2. 라이브러리, 시스템, 네트워크, 프로세스 간 상호운영
비동기성
  • 컴퓨팅 자원을 병렬 사용하기 위해 필요 (동기 블로킹 호출 -> 자원 활용의 악!)
  • 비동기 경계 개념이 스펙 핵심에 위치
    • 비동기 경계 -> 시스템 컴포넌트 결합 제거, 시간에 대한 결합 제거
역압(back pressure)
  • 스트림 발생과 구독자 간의 발생/처리 속도 차 발생
    • 스트림 참영자가 흐름 제어에 참여해서 꾸준하게 운영 상태를 유지하고 매끄럽게 저하시킬 수 있게 함으로써 탄력성을 제공한다.
  • 데이터 양방향 흐름 제어
    • 구독자가 퍼블리셔에 demand 신호
    • 퍼블리셔는 안전하게 요청한 개수의 요소 제공
    • demand는 비동기로 요청 -> 자원 낭비 제거
    • demand는 그 다음 상류까지 전파: 전체 흐름에서 역압은 과부하에서 응답할 수 있는 기회를 줌
  • 리액티브 시스템은 사실상 push 기반
    • 구독이 느리고 퍼블리셔가 빠르면 pull처럼 동작
    • demand(1) = pull
  • 주요 가치 : 모든 호환 라이브러리 간 탄력성


+ Recent posts