타파스 시스템을 개발하는데 있어서 외부 제품군들을 사용하고 있다. 타파스(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 : 로그 관리 타파스에서 출력하는 모든 로그를 한...
환경파일 모듈은 pfconf.c 이다. 프로세스에서 환경파일을 참조해서 설정값을 가져올때 사용하는 함수를 작성한다. 주로 프로세스 실행시 프로세스의 설정을 파일로 관리할때 사용한다.
| 함수 | 설명 |
|---|---|
| getConfItem | 아이템 메모리확보 |
| freeConfItem | 아이템 메모리해제 |
| getConfSection | 섹션 메모리확보 |
| freeConfSection | 섹션 메모리해제 |
| getConfData | 환경파일의 모든내용을 메모리로 로드 |
| makeConfList | getConfData의 내용으로 섹션/아이템으로 만듬 |
| reload | 환경파일을 다시 읽어드림 |
| prtConfList | 환경파일을 출력 |
| getInt | 해당하는 섹션에서 키값을 찾아 int형으로 리턴 |
| getString | 해당하는 섹션에서 키값을 찾아 string형으로 리턴 |
| getSectionCount | 섹션수를 리턴 |
| getSectionName | 해당하는 세션을 구함 |
| getSectionPos | 해당하는 세션의 pos를 구함 |
| getItemCount | 섹션의 아이템수를 리턴 |
| getItemInfo | 섹션의 아이템을 구함 |
| dispose | 모든 자원을 해제 |
| initConfSt | 환경파일을 메모리로 읽어들이고 섹션/아이템으로 만듬 |
환경파일은 xml형태를 취한다. 중요한 개념은 섹션과 아이템이다. 섹션은 [섹션명]으로 정의해서 그룹의 형태이고 아이템은 키=값의 형태로 정의한다.
아래와 같은 xml형태의 환경파일을 다룬다.
pfconf.h
사용할 변수와 사용가능한 함수포인트를 선언한다.
pfconf.c
CONF_ST에는 생성자를 2개 제공한다. 환경파일명을 환경변수에서 가져올때 initConfStFromEnv()함수를 사용한다.
생성자에서는 환경파일 전체를 메모리에 로드해서 사용한다. 환경파일에서 섹션/아이템을 자료구조 링크드리스트(Linked-List)를 사용한다.
이렇게 하는 이유는 여러개의 키값을 가져올 경우 매번 파일을 오픈하고 검색해서 가져와야 하는 부하가 생기는걸 방지하기 위함이다.
pfconf 사용
my.conf 환경파일로 생성하면 my.conf파일 전체를 메모리에 섹션, 아이템으로 로드한다. 제공하는 함수를 통해서 섹션/아이템의 값을 가져올 수 있다. 사용이 완료되면 반드시 dispose()를 호출해야 한다.
댓글
댓글 쓰기