작성
·
38
0
안녕하십니까 강사님.
강의를 잘 듣고있던 중에 질문이 생겨서 드립니다.
AsyncExcutor의 설정값을 설정하는 부분에서
서비스 앞단에서 대고객 트래픽을 받을때 maxPoolSize를 무한으로 설정하고, 큐의 크기를 0으로 두어서 빠르게 스레드를 생성하여 요청을 처리한다고 하셨습니다. 또한 그 설정을 한 스레드 풀의 작업들은 대체로 레디스 캐싱된 값을 뿌려주는것과 같이 응답시간이 빠르게 보장된 요청의 경우에 위와같은 설정값을 설정한다고 이해했습니다.
실제 실무에서 위와같이 설정해도 무한대까지 스레드가 생기지는 않으니 문제가 없다?고 하신것 같은데 그 이유가 잘 이해가 안되는 것 같습니다.
제 나름대로 추론을 해봤는데요. 우선 redis에 캐싱된 결과를 뿌리는 요청을 예로 들어서 보면, I/O 바운드 작업이므로 스레드가 빠르게 증가하여 요청을 처리하는게 중요하고, 스레드가 증가하더라고 CPU 사용량의 증가가 CPU 바운드 작업처럼 크게 증가하지 않을것이다. 따라서 스파이크 트래픽이 발생해도 서버가 죽거나 문제가 생기지는 않을것이다.
이렇게 생각을 해봤는데 좀 더 정확한 답변을 듣고싶어서 질문드립니다!
답변 2
0
안녕하세요 파이리이2님! ☺
캐싱된 값반환을 예시로 들어주셨는데요~ 일단은 운영체제나 JVM의 자원제한으로인해 (프로세스당 최대 스레드수제한 등) 스레드 생성자체가 무한대로 생성되지는 않습니다. 그리고 응답이 빠르게 보장된 요청들의 경우 스레드 자체가 오래 점유되지 않고 풀에 반환되어 재사용됩니다. 이로인해 스레드 수가 계속해서 증가하기보다는 일정수준에서 안정화가 됩니다. 이 설정의 목적은 처리 가능한 요청을 큐에 쌓아 지연시키는 대신 즉시 스레드로 빠르게 처리하는 것입니다.
요지는 요청을 처리를 할수는 있는데도불구하고 제한을 걸어 일부요청이 지연이 생기거나 하는경우를 방지하는것입니다. 순간적인 burst 상황에서는 스레드 수가 일시적으로 증가할 수 있어 메모리 사용량이 커질 위험이 있긴합니다만, 이를 대비하기 위해 과거트래픽패턴을 기반으로 자원을 휴리스틱하게 설정하거나, 모니터링 시스템을 통해 스레드 수와 메모리 사용량을 실시간으로 확인해야 합니다. 이벤트성 트래픽은 대부분 사전에 예측 가능하므로 캐시 클러스터 확장, 웜업등을 통해안정성을 확보할 수 있겠죠.
추가로 전제조건은 응답이 빠르게 와야하는것입니다. 캐싱시스템을 찌른다면 히트율에 신경을 써서 구축을해야될것이고 외부서비스라면 서킷등을 통해 응답시간을 보장받아야할거구요!
답변이 좀 되었을까요 🙏
0
안녕하세요, 인프런 AI 인턴입니다. 파이리이2님,
AsyncExecutor 설정에 관한 내용은 고위험 및 고성능 요구사항 상황에서 트래픽 처리 능력을 향상시키기 위한 중요 설정입니다. 다음과 같이 설명드릴 수 있습니다:
I/O 바운드 작업: 말씀하신 대로 Redis에 캐싱된 데이터를 처리하는 경우, I/O 바운드 작업은 스레드의 비율이 CPU에 큰 부담을 주지 않고 높은 동시성을 처리할 수 있는 환경입니다. 이런 설정은 스레드가 빈번하게 생성될 수도 있지만, 각 스레드가 짧은 시간 동안만 실행되기 때문에 효율적으로 CPU를 사용할 수 있습니다.
스레드 풀 설정: maxPoolSize를 무한대로 설정하고 queueCapacity를 0으로 두는 구성은 서비스 요청 처리를 빠르게 하기 위한 전략입니다. 트래픽이 폭증할 경우, 스레드가 빠르게 생성되어 요청을 즉각적으로 처리하게 됩니다. 이는 CPU 자원보다는 네트워크 및 I/O의 대기 시간에 더 큰 영향을 받는 환경이기 때문에 가능한 설정입니다.
실무 적용: 실제로 무한대로 설정한다고 해서 스레드가 무작위로 계속 생성되는 것은 아닙니다. 서버의 하드웨어 자원 및 프로세스 설정에 따라 자연스럽게 제한이 걸리며, Java의 ExecutorService 등의 라이브러리가 합리적인 선에서 스레드 풀을 관리합니다.
리스크 관리: 서버가 다양한 종류의 요청을 처리할 경우, 이러한 세팅이 아닌, 보다 보수적인 스레드 풀 설정을 사용하는 것이 더 안전할 수 있습니다. 하지만, 성능을 극대화해야 하는 환경에서는 이와 같은 접근이 도움이 됩니다.
유사한 상황 및 설정에 대한 기존 질문 답변을 참고하시기를 권장드립니다:
이 답변이 파이리이2님의 이해에 도움이 되기를 바랍니다. 추가적으로 궁금한 점이 있으시면 언제든지 질문 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.