
API 서버 설계 후 SCDF에 회사 업무와 연관되어 공부를 하다가 작년 네이버 DEVIEW에서 발표한 SCDF 관련 자료가 있어 정리해보았다.
영상
영상 자료
SCDF 공식 문서
https://dataflow.spring.io/docs/installation/local/manual/#install-messaging-middleware
배치 : 대량의 데이터를 벌크(일괄)처리하는
스트림 : 무한한 데이터를 실시간(스트림)처리
=> SCDF는 스트림 처리에 가깝다.
부하분산 & 파티셔닝
매일 같이 오픈 되는 음원, 앨범 데이터를 공급사로 공급받아 적재하는 프로세스가 있음.
-> 2019년 8월에 12,700,000곡의 메타 데이터를 적재해달라는 요청이 옴
-> 일간 5천곡 가능 = 6년뒤에나 적재 가능
=> 연말까지 불가
공급사로부터 데이터 받음 - DB 저장 - 배치로 가공 - API로 제공
문제가 된 부분은 AOD JOB(파일을 다루는 JOB)
-> AOP JOB을 늘려봄
-> 10개로 늘리니까 5만곡으로 늘어남(부하분산)
-> 추가 개선 해보겠다.
프로젝트 운영 중 문제
1. 코드뭉치 업로드
2. 전체코드로드에 따른 자원소모
3. 커넥션 잦은 연결/끊음
4. 변경/확장의 어려움
5. 워크플로 관리의 어려움
6. 특정 Job에서 Hadoop을 추가해서 사용하는 경우?
7. Job이 실행도중 Lock이 걸리는 경우 다음 데이터가 처리 되지 못함
고민
젠킨스 : 42
쿼리수 : 976
테이블 : 244
테이터수 : 703,033,612
Jenkins Job Stop : 중지 할 수 있는 기능들은 최대한 찾아서 정리
Function Switch : 위임 가능한 기능들은 상호협력해서 전환한다.
MongDB Modeling : Full Embed, Reference Embed, Subset Pattern
데이터 입수 서버를 듀얼로 열었음.
/v0 -> 레거시
/v1 -> 신규 API 호출(SCDF로 적재 된 데이터)
MongoSyphon : json 파일 제공하면 마이그레이션해주는 기능이 있음
450,000,000곡 -> 쿠버네티스 환경에서 지속적으로 마이그레이션을 할 수 있도록 함
한대 배포해보고 문제 있으면 롤백하고 없으면 하나 배포하고 다음날 또 배포하고...
SCDF란?
Microservice based Streaming and Batch data processing for Cloud Foundry and Kubernetes
Data Flow Server - 전용 Database -> 대쉬보드 제공
Skipper Server - 전용 Database -> DFS에서 위임 받아 실제 배포하는 역할
Supplier<R> Function<T,R>Consumer<T>SpringBatch의 Reader-Processor-Writer와 동일한 개념
어플리케이션 구현 -> 도커허브 업로드 -> SCDF 등록 -> 파이프라인 생성 -> 스키퍼 서버에 요청 -> 스트림 배포
topic name : {streamName}-{applicationLabelName}
시작점을 어떻게 잡는게 좋을까? 일반적인 POST/GET으로 받는데
신규 입수 서버로 요청이 들어오면 어떻게 할까?
CDC는 힘듦, 기존처럼 HTTP는 너무 똑같은데, Destination으로 소비하는 전략 사용
그다음 고민, 이게 맞나?
Directed Acyclic Graph, DAG(대그)
다음 고민, 복잡도 낮추기
모듈을 계층적으로 분석하거나 시스템 복잡도를 측정하는 기법
파드가 늘어나면 발생 할 문제 고민해봐야함
Prometheus? Grafana?
Kubectl
7가지 설치
application.yml에 매칭되는 이름이 있어야함
Prometheus 활용
이렇게 SCDF로 데이터 흐름 관리까지 해봤음.
그런데 해결해야 할 문제는 파일을 빠르게 처리하는 것.
데이터는 이전에도 문제 없었음.
둘 다 빨리 되는데 SCDF로 바꾸면서 데이터 흐름 잘 볼 수 있다는 점은 장점.
근데 아직 파일 어플리케이션 속도는 해소 안됨 -> 스케일링으로 해소
Manual Scaling / Data Partitioning
Manual Scaling : Pod 갯수 조절
Data Partitioning : 파티셔닝
하지만 무작정 갯수 늘려버리면 비용 증가
그래서 SCDF에선 동적으로 컨테이너 수를 조절함.
https://www.youtube.com/watch?v=IDH6X1pmgxc
하루에 5,000 -> 50,000 -> 480,000 -> 현재는 N만곡 처리 가능(공급받는대로)

관련 한국어 자료가 없어 이해하는데 어려움을 겪다가 해당 pdf 자료를 찾게 되었는데 발표 자료다보니 발표 영상을 유튜브에 검색 후 찾게 되었다.
영상을 모두 보고 확실히 전체적인 흐름과 SCDF 제공 기능을 이해할 수 있었고 이전에 Spotify API를 활용한 프로젝트를 진행 한 적이 있는데 당시 데이터를 가져오는데 있어서 전체 데이터를 받아오지 못하여 검색 시 매번 Spotify 서버로 검색 하도록 구현했었던게 기억이 났다. 그리고 트랙 < 앨범 < 아티스트 형식의 구조 때문에 DB 설계에 어려움을 겪었던 기억도 있었는데 이런 음악 관련 서비스를 다시 한번 도전해보고 싶어졌다.