타파스 시스템을 개발하는데 있어서 외부 제품군들을 사용하고 있다. 타파스(TAPAS)는 클라우드 환경에서 마이크로서비스(Microservices) 형태로 운영되는 시스템으로, 다양한 금융 데이터를 실시간으로 처리하고 관리하는 데 최적화되어 있다. 이 과정에서 높은 성능과 확장성을 보장하기 위해 여러 가지 인프라 및 제품을 활용한다. 클라우드 환경에서 동작하는 제품군을 대상으로 한다. c언어의 라이브러리 형태는 여기서 제외한다. 1. 도커/쿠버네티스(k8s) : 타파스 시스템 관리 타파스는 클라우드환경에서 마이크로서비스로 운용되는 시스템이다. 도커를 활용한 이미지를 만들고 k8s에서 운용된다. 좀더 자세한 내용은 도커와 쿠버네티스를 활용한 C 언어 개발 환경 구축(1)(2) 에서 기술했다. 2. 메세지브로커 : 서비스간 통신 메세지 브로커는 마이크로서비스 사이의 통신(송/수신) 기능을 담당한다. 타파스에서는 여러 메세지브로커 가운데 RabbitMQ, Kakfa 를 사용한다. 이제품군에 대한 설명, 장단점은 생략한다. 수신처 브로커 송신처 클라이언트 요청 RabbitMQ/Kafka 요청처리 서비스 요청처리 응답 RabbtMQ/Kafka 클라이언트 응답 실시간 처리 RabbitMQ/Kafka 클라이언트 전송 3. Redis-Cluster : 실시간 시세 데이터 저장소 Redis Cluster는 주식 시세 데이터를 실시간으로 저장하고 관리하는 역할을 한다. 주로 당일 시세데이타를 저장하고 클라이언트의 조회 요청에 사용된다. 4. 관계형 데이터베이스(RDBMS) : 시세 데이터 영구 저장 데이타베이스는 시세 데이터의 히스토리성 데이타를 장기 보관하고, 관리하는 역활을 한다. 타파스에서는 PostgreSQL, MySQL를 사용한다. 당일/일자별 시세데이타 보관, 관리한다. 5. FluentBit-ELK : 로그 관리 타파스에서 출력하는 모든 로그를 한...
거래소로 부터 시세데이타를 수신하는 방법은 크게 2가지 이다.
거래소로 부터 직접 UDP로 받거나 FEP를 통해서 받는 방법이다.
UDP로 부터 시세데이타를 수신하는 방법을 선택했다.
UDP의 포트별로 시세데이타가 구분되어 들어온다.
자세한 정보는 거래소에서 제공하는 전문설계서를 참조하면 된다.
아래표는 간단하게 요약한 표이다.(실제 항목은 아래 항목 보다 많다)
배치/기타 데이타
| 정보제공 | 데이타구분 | UDP포트 |
|---|---|---|
| 증권종목정보 | A0 | 11001 |
| 협의거래결과 | C4 | 11001 |
| 종목이벤트정보 | I6 | 11001 |
| 회원사정보 | M9 | 11001 |
| 업종별 투자자별 통계 | C0 | 11001 |
| 거래상위 5개상위 통계 | B9 | 11001 |
| 현재등락 | B5 | 11001 |
| 프로그램매매 투자자별 통계 | P0 | 11001 |
| 프로그램매매 종목별 집계 | C3 | 11001 |
| 프로그램매매 전체 집계 | J0 | 11001 |
| 공매도정보 | I8 | 11001 |
체결 데이타
| 정보제공 | 데이타구분 | UDP포트 |
|---|---|---|
| 증권체결 | A3 | 11021 ~ 11025 |
| 장운영 | A7 | 11021 ~ 11025 |
| 종목마감 | A6 | 11021 ~ 11025 |
| VI발동/해제 | R8 | 11021 ~ 11025 |
호가 데이타
| 정보제공 | 데이타구분 | UDP포트 |
|---|---|---|
| 증권 우선호가 | B6 | 11031 ~ 11035 |
운영 데이타
| 정보제공 | 데이타구분 | UDP포트 |
|---|---|---|
| 장운영 스케쥴공개 | M4 | 11041 |
UDP데이타 수신
udp_recv
udp포트로 부터 데이타를 받아서 정보에 따라 처리프로세스에 데이타를 전송한다.
처리프로세스
| 데이타 | 처리프로세스 | 기능 |
|---|---|---|
| 배치/기타 | sise_job_grp1 | 데이타를 가공해서 postgres,redis에 저장 |
| 체결 | sise_job_a3 | postgres에 적재 / 마스타는 redis에 업데이트 |
| 호가 | sise_job_b6 | redis에 업데이트 |
| 장운영 | sise_job_grp4 | redis에 업데이트 |
sise_job_grp1
가장 중요한 정보는 증권종목정보(배치)이다. 이항목이 타파스에서 처리하는 모든 정보의 마스타가 된다.
예를들면 삼성전자라 하면 삼성전자에 대한 모든 정보를 종목배치에서 제공한다.
종목코드(A005930), 종목명(삼성전자), 등 ...
데이타를 가공 하고 PostgreSQL처리 스레드, Redis처리 스레드에서 데이타를 처리한다.
sise_job_a3
체결데이타의 정보는 5개 포트로 나누어져 있다. 그래서 sise_job_a3는 각 포트별로 5개가 실행되어야 한다. 5개의 포트로 나누는 기준은 종목배치의 정보분배그룹번호로 분류한다.
전송 데이타량이 많아서 5개로 분배해서 전송한다.
데이타를 가공해서 적재하는 스레드, redis로 현재 체결상태를 유지함. 실시간 체결 자동업데이트를 전송.
DB(PostgreSQL)에는 체결데이타를 수신하는대로 적재한다. redis에는 체결마스타성으로 업데이트를 한다.
예를들어 현재 삼성전자의 가격을 조회를 하면 redis의 정보를 제공하면 된다. redis정보는 현재 정보이다. 오늘 삼성전자의 체결내역을 조회하면 DB에 적재된 내용을 제공한다.
실시간 체결 업데이트는 수신된 체결정보를 클라이언트에 제공하기 위해서 필요하다. 이정보는 autoupdate라는 프로세스가 받아서 처리한다. 이때 메세지브로커는 RabbitMQ를 사용한다.
sise_job_b6
데이타를 가공해서 redis로 현재 호가상태를 유지함. 실시간 호가 자동업데이트를 전송
sise_job_grp4
데이타를 가공해서 redis로 현재 장운영상태를 유지함. 실시간 장운영 자동업데이트를 전송






댓글
댓글 쓰기