[Reactive Programming] Reactor Pattern

DaeHoon·2023년 7월 23일
0

개요

  • Reactor pattern은 동시에 들어오는 서비스 처리 요청을 관리하는 이벤트 처리 패턴이다.
  • service handler는 들어오는 요청들을 demultiplexing 해서 request handler에게 동기적으로 전달
  • accept, read, write 이벤트들을 한 곳에 등록하여 관찰하고, 준비 완료된 이벤트들을 request handler에게 전달한다.
    • selector를 이용한 java nio 처리와 비슷하다!

기본 요소

  • Resources : 시스템에 Input을 제공하거나 시스템에서 나온 결과를 Consume하는 모든 Resources.
  • Synchronous Event Demultiplexer (Event Handler): 모든 자원을 Block하기 위해 Event Loop를 사용한다. Resource에서 Blocking없이 동기화 연산을 시작할 수 있게 됐을 때, Demultiplexer가 자원을 Dispatcher에 보낸다.
  • Dispatcher : 요청 핸들러의 등록과 해제를 처리한다. 디멀티플레서에서 연결된 Request Handler에 자원을 할당한다.
  • Request Handler : Request Handler와 연결된 Resource가 정의된 애플리케이션

구현

  • Reactor, Selector, Acceptor, EventHandler 구현체로 구성
  • Acceptor는 EventHandler 구현체의 일부. accept 이벤트에만 집중
  • EventHandler 구현체는 read 이벤트에만 집중

Reactor

  • 별도의 쓰레드에서 실행. 여러 요청의 이벤트를 등록하고 감시하며, 이벤트가 준비되면 dispatch 한다.
    • 별도의 쓰레드에서 동작해야 한다 -> Runnable을 구현하고 별도의 쓰레드에서 run을 실행
    • 여러 요청의 이벤트를 등록하고 감시한다 -> Selector를 사용
    • 이벤트가 준비되면 dispatch 한다 -> EventHandler 인터페이스를 만들고 call

Event Handler

  • Reactor로부터 이벤트를 받아서 처리한다.
    • EventHandler의 처리가 Reactor에 영향을 주지 않아야 한다. -> Event Handler에 별도의 쓰레드 실행
    • Reactor로부터 이벤트를 받아서 처리 -> accept 이벤트와 read 이벤트 각각을 처리할 수 있는 EventHandler를 만든다
profile
평범한 백엔드 개발자

0개의 댓글