[Reactive Programming] Reactor Pattern
개요
- 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를 만든다