개발자는 기록이 답이다

패스트캠퍼스 환급챌린지 15일차 미션 (2월 15일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기 본문

패스트캠퍼스

패스트캠퍼스 환급챌린지 15일차 미션 (2월 15일) : Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지 강의 후기

slow-walker 2024. 2. 15. 23:09

 

1. Proactor Pattern

 

reactor 패턴의 단점들을 보완하기 위해 고안된 패턴이다.

 

2. Reactor의 문제점

  • Reactor에서 단일 쓰레드와 Selector를 통해서 이트처리
    • Selector가 커널과 통신하면서 완료된 애들이 있는지 능동적으로 물어보는 형태
  • 당하기 든 트래이 부여되거나 이트 처리에 오랜시간이 리는 경우 전체시스템에 영향수 있다

1. 단일 스레드 한계
Reactor가 단일 쓰레드에서 이벤트를 처리하다 보니, 해당 쓰레드에서의 작업이 많아질 경우 처리 속도가 저하될 수 있습니다. 이는 다수의 요청이 동시에 처리되어야 하는 상황에서 성능 문제를 유발할 수 있습니다.

2. Blocking 작업의 문제
Reactor는 단일 쓰레드에서 모든 이벤트를 처리하므로, 한 이벤트 처리가 블로킹 작업으로 인해 시간이 오래 걸릴 경우 다음 이벤트들의 처리도 지연될 수 있습니다. 이는 전체 시스템에 영향을 줄 수 있으며, 특히 I/O 작업에서 발생할 수 있습니다.

3. 트래픽 부하에 대한 어려움
단일 쓰레드에서의 이벤트 처리는 트래픽 부하가 증가할 때 확장하기 어려울 수 있습니다. 다수의 동시 요청을 처리하려면 여러 쓰레드 또는 프로세스를 사용해야 하는데, Reactor가 단일 쓰레드이므로 이를 구현하기 어려울 수 있습니다.

4. 시스템 전체 영향
Reactor에서 어떤 이벤트 처리가 지연되면 해당 쓰레드에서 다른 이벤트들도 대기해야 합니다. 이는 전체 시스템에 영향을 주어 사용자 경험을 저해시킬 수 있습니다.

5. 해결책의 한계
Reactor에서 이러한 문제를 해결하려면 비동기적으로 처리되는 작업을 분산하거나, 다수의 쓰레드를 사용하는 등의 추가적인 구현이 필요합니다. 이는 코드 복잡성과 유지보수 어려움을 초래할 수 있습니다.

이러한 문제를 완전히 해결하려면 멀티스레딩이나 분산 시스템과 같은 방법들을 고려해야 합니다. Reactor를 사용하는 경우에도 특히 I/O 작업과 같이 블로킹이 예상되는 부분에 대한 대안을 고려하는 것이 중요합니다.

 

3. Proactor pattern

 

  • I/O 트를 시스템()에 등하고 이트 완료시 시스템이 직접 완료 안
  • 콜백을 실행하여 I/O 트를 처리
  • Reactor에서는 정 부분이 병목이 되 지만, Proactor에서는 단일 쓰레드, Selector병목 지점이 없다
  • I/O 트 완료를 전달하는 주체가 누구인가?
    • Reactor: selector
    • Proactor:

4. Java AIO

  • Java 1.7 부터 NIO2를 지원
  • AsynchronousChannel을 지원
  • AsynchronousSocketChannel, AsynchronousFileChannel
  • AsynchronousServerSocketChannel,
  • callbackfuture 지원

※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N