최우선 목표: 낮은 레이턴시, 빠른 리커버리
아키텍처

스크린샷 2023-06-08 오후 3.41.34.png
수신부에서 데이터를 모두 전달하기엔 많은 부하가 발생함 이를 해결하고자 메세지 브로커를 수신부 - MQ - 처리부 방식으로 구현 이로써 수신부의 데이터는 한번만 전달 되면 됨
하지만 아이러니 하게도 MQ를 사용하면 지연시간이 늘어남
그래서 MQ의 선택이 중요한데 kafka(지연시간 15ms)가 아닌 Redis Pub/Sub(지연시간 3ms) 사용
하지만 처리부가 느리면 결국 데이터는 지연 될수 밖에 없음
처리부 에서도 수신하는 부분과 비즈니스로직은 별도의 구조로 분리 되어야 함 → 블락킹을 막기 위해서
그러나 쓰레드를 사용하면 순서가 바뀔수 있어 문제가 생길수 있고 이벤트 루프를 사용하면 직렬화를 해야 하기때문에 대용량 트래픽이 발생하면 문제가됨 그래서 선택한 방법은 또다시 pub/sub을 사용함 즉 연결점을 redis로 직접 연결 했기 때문에 직렬화 해줄 필요가 없어짐
배치, DB저장 등의 무거운 작업은 별도의 이벤트 루프를 만들어 처리