고동시성 환경에서의 AI 요청 비동기 스케줄링 큐
·
ai
요구사항유저의 AI 질의 요청을 순서와 가중치에 따라 데드락 없이 안전하게 큐잉소모시키는 지수 백오프(Exponential Backoff) 기반 스케줄러 알고리즘 작성문제사항멀티스레드 환경(유저 수천 명)에서 AI 질의 요청이 쏟아진다외부 AI API(예: OpenAI, Claude)는 분당 요청 제한(Rate Limit)이 걸려 있다 클라이언트와 서버의 3-way-hanshake을 통해 세션을 맺으면 생성되는 소켓을 Poller events 큐에 넣게 되면 요청에 대한 적절한 처리를 하게 되고 워커 스레드인 http-nio-8080-exec-X 스레드를 통해 Spring Boot의 DispatcherServlet에 접근을 하게 된다. 이때 적절한 컨트롤러를 찾아서 처리를 할텐데 http-nio-8080..
3-Way Handshake 부터 Tomcat을 지나 스프링 부트 시작점 까지
·
spring boot
클라이언트에서 서버와 세션을 맺기 위해서 3-Way Handshake 진행 후 세션을 맺는다 이때 Socket 생성을 한다. 톰켓은 생성된 소켓을 감지하는 Acceptor 클래스가 있다 Runnable 인터페이스를 상속받고 있어 스레드 생성이 가능하다. Acceptor 스레드가 생성된 Socket의 주소를 serverSocketAccept() 매서드를 통해 내부 객체로 변환한다. 이때 2개의 구현체가 있는데 각각 반환 하는 값이 다르고 동작이 추가된다. NioEndpoint는 SocketChannel 반환후 setSocketOptions(..) 실행, 이 메서드 내부에서 NioSocketWrapper로 감싸지게 된 후 poller.register(...) 메서드를 통해 PollerEvent 객체가 Po..
Stateful (상태 유지) - Stateless(무 상태)
·
HTTP
Stateful 상태 유지를 예로 들자면 고객 : 이 책이 얼마인가요?직원 A : 1000원입니다. (책 상태 유지) 고객 : 2권 살게요직원 A : 2000원입니다 현금이나 카드로 결제하시나요?. (책, 2권 상태 유지) 고객 : 현금으로 할게요.직원 A : 알겠습니다. (책, 2권, 현금 상태유지)이 처럼 한 명의 직원에게만 물어보거나 다른 직원에게 인수인계 하는 방식으로 상태가 유지가 될 수 있을 것이다 하지만. 고객 : 이 책이 얼마인가요?직원 A : 1000원입니다. 고객 : 2권 살게요직원 B : ( 무엇을 2권 산다는 거지? ) 고객 : 현금으로 할게요.직원 C : ( 무엇을 현금으로 한다는 거지...? ).고객이 매장을 둘러보다가 전부 다른 직원들에게 이런 말을 한다면 직원들은 물음표..