1. 미체결 주문 서버간의 데이터 전달 kafka사용

AS-IS

image.png

laravel 미체결 데이터 입력후 생성된 미체결 idx의 데이터를 nodejs로 전달합니다.

image.png

nodejs에서는 입력데이터를 확인하여 주문정보에 데이터를 넣습니다. 이러한 방식은 데이터 유실의 가능성이 있습니다.

TO-BE

kafka를 사용하면 디스크에 랜덤으로 쓰는것이 아니라 순차적으로 쓰기 때문에 속도가 빠르고 또 메모리에도 임시적으로 저장해 두기 때문에 빠르게 읽어 올 수 있습니다.

또한 토픽안에 여러개의 파티션이 구성되어 있고 각 파티션에는 리더와 팔로워가 구성되어 있으며 리더와 팔로워는 복제를 하고 있습니다. 리더의 문제가 발생시 팔로워를 리더로 승격 시킴으로써 데이터 안전성을 유지할 수 있습니다.

image.png

Exchange앱에서 사용자에게 전달 받은 값과 기본 코인정보를 결합하여 kafka로 전송합니다.

image.png

MAJOR, MINOR 코인의 설정에 따라 동적으로 kafka 토픽을 생성하고 리스너를 등록합니다. 이는 다양한 코인 마켓에 대한 메시지를 처리하기 위해 각 코인에 대한 리스너를 생성하고 있습니다.

image.png

onMessage의 구현을 통해 전달받은 메시지의 레코드를 미체결 서비스로 전달할수 있습니다.

2. 미체결 주문 정렬 우선순위큐 대체

image.png

거래소의 체결은 매수(구매)는 항상 높은 가격부터 체결이 되고 매도(판매)는 항상 낮은 가격부터 체결이 됩니다.

그리고 같은 가격대에 주문이 쌓여 있을때는 오래된 주문 먼저 체결이 되야 합니다.

AS-IS