타파스 시스템을 개발하는데 있어서 외부 제품군들을 사용하고 있다. 타파스(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 : 로그 관리 타파스에서 출력하는 모든 로그를 한...
클라이언트의 접속을 받아주는 서버 termsvr을 개발한다.
통신프로토콜
클라이언트와의 통신은 소켓과 웹소켓을 지원한다.
단, 소켓인 경우 데이타패킷 앞에 데이타 길이를 붙여서 송수신한다.
타파스에서는 웹소켓을 주로 사용하고자 한다.
타파스에서는 웹소켓을 주로 사용하고자 한다.
데이타 직렬화
모든 데이타는 flatbuffers로 직렬화해서 송수신한다.flatbuffers를 선택한 이유는 작고, 빠르다는 장점 때문이다.또 중요한 것은 file identifier를 지원 한다는 것이다.클라이언트로 부터 받은 데이타를 file identifier만으로 간단히 분배할 수 있다.
접속처리는 스레드로 한다.
클라이언트에서 접속을 하면 스레드로 연결을 해서 작업을 한다.
요청처리
클라이언트의 요청을 작업별로 분배해서 요청큐에 전송한다. 일종의 라우터 역활이다.
예를 들어 Tr0001을 요청하면 메세지브로커를 통해서 tr_work_gr1으로 전송된다.
subs으로 요청하면 메세지브로커를 통해서 구독처리(subscribe)로 전송된다.
이때 분배하는 처리에서 모든 요청데이타를 참조해서 분배를 해야만 했는데 flatbuffers의 file identifier를 사용해서 요청데이타를 참조할 필요가 없이 분배가 가능하다.
단, 한계도 있는데 file identifier은 4자리로 이루어져 있다.
응답처리
응답처리는 링크드리스트 구조로 관리한다. termsvr의 응답처리 스레드에서 메세지브로커로 부터 데이타를 받아서 링크드리스트에 추가후 클라이언트에 전송하는 스레드에 시그널을 보내서 클라이언트에 응답을 전송한다.링크드리스트 구조로 데이타 누락을 방지한다.
실시간처리
실시간(자동업데이트)처리 데이타는 링버퍼의 구조로 관리한다. termsvr의 실시간 처리 스레드에서 메세지브로커로 부터 데이타를 받아서 링버퍼에 추가후 클라이언트에 전송하는 스레드에 시그널을 보내서 클라이언트에 전송한다.링버퍼 용량 보다 많은 데이타 처리시 누락이 될 가능성이 있다.

댓글
댓글 쓰기