Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
패스트캠퍼스 환급챌린지 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가 커널과 통신하면서 완료된 애들이 있는지 능동적으로 물어보는 형태
- 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,
- callback과 future 지원
※ 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다. https://bit.ly/48sS29N