• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Reactor pattern
        2023년 11월 19일
        • starryeye
        • 작성자
        • 2023.11.19.:36
        반응형

        이번 포스팅에서는 Reactor pattern 에 대해 알아보겠다.

         

        reactor pattern 의 목표

        한정된 스레드로 동시에 들어오는 요청을 효율적으로 처리 가능

         

        Reactor 패턴

        대표 사용 기술

        Java NIO, Selector, epoll

         

        특징

        Selector 기반의 Java NIO 를 사용하기 때문에

        동기 non-blocking 으로 동작한다. (IO 관점)

         

        작동 방식

        accept, read, write 등의 이벤트(준비 완료)들을 한 곳(Selector)에 등록하여 모니터링

        -> Selector 사용, Multiplexing

        준비 완료 이벤트(처리될 준비가 됨)일 경우에는 request handler 에게 전달한다.

        -> Demultiplexing

         

        대표 컴포넌트

        Reactor

        별도의 스레드에서 실행한다.(한 개)

        -> 이를 Event Loop 라 부르기도 한다. (특히, Netty 에서..)

        여러 요청의 이벤트를 등록하고 감시하며, 준비 완료 이벤트(처리될 준비가 됨)이면 dispatch 한다.

         

        Handler (Event Handler)

        Reactor 로 부터 이벤트를 받아서 처리한다.

        (함수형 인터페이스)

        Handler 의 실행이 Reactor 에 영향을 끼치지 않아야한다. (스레드 분리) 

         

        참고

        Handler 실행과 Reactor 실행 스레드를 분리하지 않는다면..

        Reactor 의 단일 스레드가 Handler 의 실행도 책임 지게 되는데..

        Handler 의 처리시간이 길면 해당 서버 전체에 영향을 주게 된다.

         

         

        쉬운 이해를 위한 그림

        위 그림에서 Dispatcher 는 Reactor 라고 생각해도 된다.

         

         

        적용 사례

        Reactor 패턴은 Netty, Node.js 등에서 사용된다.

         

         

         

        한계점

        1. Reactor 에서 단일 스레드로 동작한다.

        따라서, 감당하기 힘든 트래픽이 생기면 SPOF 가 될 수 있다.

         

        2. reactor pattern 은 Java NIO, Selector, epoll 기술에 근본을 두고 있기 때문에

        IO 관점에서 동기 non-blocking 이다.

        Event Handler 에서 blocking 로직이 있거나 처리 시간이 긴 로직이 존재하는 상태에서

        동시 요청이 많다면 한정된 스레드 이상의 자원이 필요하게 되어

        시스템 전체에 영향이 생긴다.

        따라서, Event Handler 의 로직엔 blocking 로직과 처리 시간이 긴 로직을 피해야한다.

         

         

        읽어보면 좋을 듯..

        "Scalable IO in Java" of Doug Lea

        https://gee.cs.oswego.edu/dl/cpjslides/nio.pdf

         

        반응형

        'Spring Reactive Stack > Netty' 카테고리의 다른 글

        Netty 2  (0) 2024.01.21
        Netty 1  (0) 2024.01.17
        Proactor pattern  (0) 2023.11.20
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바