• Publisher 로 부터 Subscriber 에게 끊임없이 전달되는 데이터를 안정적으로 처리하기 위한 방식

✏️ Publisher 와 Subscriber 간의 프로세스

  1. sub 이 pub 에게 subscribe() 로 구독함
  2. 구독이 성공하면 sub 에게 onSubscribe 시그널을 보냄
  3. sub 은 pub 에게 requset 시그널을 보냄
  4. pub 은 구독자들이게 onNext 시그널을 사용해 데이터를 보냄
    • 이 과정을 Emit 이라고 함
  5. 3번부터 반복됨
  6. pub 에서 더이상 emit 할 데이터가 없다면 onComplete 시그널을 보냄

⚠️ 이 과정에서 error 가 발생한다면 onError 시그널을 보내면서 프로세스가 종료됨

✏️ Backpressure

  • pub 에서 emit 되는 데이터를 sub 에서안정적으로 처리해 과부하가 걸리지 않게 하는 작업
    • sub 이 request 를 할 때 적절하게 처리할 수 있는 수준의 데이터 개수를 pub 에게 요청하는 방식
    • 이 때 Buffer 는 요청한 데이터를 담는 바구니 역할을 하게 된다.

📍 Reactor 의 Backpressure 전략

  • IGNORE
    • Backpressure 를 적용하지 않음
  • ERROR
    • Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
      Exception 을 발생시킴
  • DROP
    • Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
      buffer 밖에서 대기하는 먼저 emit 된 데이터부터 Drop 시키는 전략
    • 이때 drop 된 data 는 sub 에게 전달되지 않음
  • LATEST
    • Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
      버퍼 밖에서 대기하는 가장 최근(나중)에 emit 된 데이터부터 버퍼에 채우는 전략
    • Drop 은 Buffer 가 가득 찬 시점에 모든 밖에 위치한 데이터를 drop 하지만,
      Latest 는 가장 최근에 요청된 데이터만 남기고 drop 하는 차이점이 있다.
  • BUFFER
    • Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
      buffer 안의 데이터를 drop 시키는 전략
    • BUFFER DROP-LATEST
      • Buffer 가 가득 차면 가장 마지막 data 를 drop
    • BUFFER DROP-OLDEST
      • Buffer 가 가득 차면 가장 처음 data 를 drop
profile
잘못된 내용 PR 환영

0개의 댓글