당근 인프라의 gcp 활용법
추천시스템 w/Dataflow 대규모 데이터 파이프라인 구성
Dataflow
- 완전관리형 데이터 처리 서비스 (클러스터 관리 없이)
- 실시간 스트리밍 배치 처리 모두 지원
- 자동확장, 오류 복구, 리소스 최적화
아키텍쳐 / 동작방식
- 입력 : bigQuery, kafka, Cloud Storage, Pub/Sub
- 처리 : Apache beam 파이프라인 실행(ETL, 변환, 집계)
- 출력 : Cloud Spanner, bigQuery, Cloud Storage, Pub/Sub → 파이프라인 단일 소스로 관리 가능
장점
코드 재사용 가능 운영 오버헤드 최소화 -> 개발자는 로직에만 다른 서비스(DB,DW Event Stream)와 손쉬운 연계
당근 활용 사례
- 실시간 & 배치 게시글 임베딩 생성 파이프라인(GPU Inference)
- 실시간 & 배치 카테고리 (텍소노미) 분류 파이프라인 *kafka에서 생성된 데이터도 1년치도 한 달치도 동일한 코드로 한 번에 배치 작업 가능
- 전사 ML 훈련 데이터 가공 (bigQuery데이터 텀프, 데이터 가공)
대규모 데이터 파이프라인 구성
→ n대 이상의 워크로 Scale Out 하는
pcollection에 추가된 데이터 용량 - 1주일 통계 피크4PB 가량
당근 테크 밋업(2024) 글(https://tech-meetup.daangn.com/) 참고
Q&A
-
빔으로만 파이프 라인을 구성하는지? Spark 와 같은 백업 파이프라인도 가동이 되고 있는지? Apache beam 러닝커브는 어떻게 해결하고 있는지? → 텐서플로우를 쓰기 위해 Apache beam을 기존에 사용하고 있어서 가능했음. Spark는 ML, 추천시스템쪽에서는 사용하고 있지 않음.
-
실시간 파이프라인, 배치를 하는 이유는? 그리고 GCP에서 제공하는 임베딩 API를 쓰지 않고 별도의 임베딩 모델을 사용하는 이유는? → 마이크로 배치, 준 실시간도 있음. 임베딩 API, 자체 데이터에 맞춰 튜닝한 모델을 쓰기도 함
ML Infrastructure with GCP
01 Service Growth in 2024
Kubeflow
파이썬 기반으로 컴포넌트 확장이 가능, 컴포넌트 개발의 자유도가 높음. → 컴포넌트 구현 방식이 제각각이라는 뜻.
TFX
Protobuf
- 유사한 파이프라인 문서를 모아두고 실험을 쉽게 할 수 있도록 구조를 잡아줌.
- 파이프라인은 증가하여도 구조화가 잘되어서 유지가 가능하나 인프라의 문제는 여전함
VertexAI 파이프라인
- Kubeflow + TFX pipelines
- 파이프라인 내 식별
Prompt Studio
당근의 LLM Router 와 결합하여 구축 사용중인 플랫폼
Q&A
멀티클라우드 환경에서 GCP를 keyless로 쓰는 방법
OIDC란?
- OAuth 2.0 사용자 인증 프로토콜
- RP 받는 쪽인 토큰의 클레임을 검증 받음
- 이 앱이
당근에서의 GCP 리소스 접근방식
- Service Account // GCP 내에서는 그대로 사용 외부에서 Service Account 를 이용할 때 key를 이용해서 접근
- Kontrol? 당근의 사내 플랫폼. 배포 Menifesto를 작성하여 배포
대규모 이미지 서비스
S3, CloudFront
이미지 서비스의 중요도
- 개발환경 3개 지역 운영환경 4개
- 특정 이미지의 경우 유효기간 Signed URL 형태의 제공이 필요
- 동적으로 이미지 조절 및 변경 필요 → 비즈니스 로직을 동시에 처리하면서 서빙이 필요
GCP를 사용하는 이유
- BigQuery, 사용을 위해 이미지 원본 자체를 GCP에 있으면서 CDN도 사용
user -> cdn -캐시미스-> origin
user -> cloud cdn -동적 리사이징 및 포맷 변경작업(Cloud Run)-> cloud Storage
user -> cloud cdn -캐시 미스-> cloud load balancing -동적 리사이징 및 포맷 변경작업(Cloud Run)-> cloud Storage
cloud load balancing? 왜 ? GCP 권장사항 로드밸런서가 필요.
cloud cdn
- 캐시 모드 캐시 키 : URL에 포함되에 있는 쿼리 매개변수가 조금이라도 바뀌면 캐싱 미스가 발생 그러면 Cloud Run에 가서 원본에 대한 동적 조절이 일어나도록 함.
- 제한된 콘텐츠 : Signed URL 에 맞춰 만료된 경우 404
- 원본 세부정보 / 연결된
- cloud CDN 요청을 받기 위한 프런트엔드 구성 및 SSL 통신을 위한 TLS 인증서 연결
- Signed URL 처리 : 요청이 서명되지 않은 경우?(서명 관련된 값이 쿼리 매개변수가 없으면 바이패스함),
Cloud Run
- 캐시 미스로 원본 요청을 할 경우 애플리케이션 수준에서 서명 검증 요청 헤더값에서 x-client-request-url 사용
- 라우팅 규칙 설정시 쿼리 매개변수도 함께 설정할 수 있음.
- cloud Storage 간 데이터 전송 비용은 무료
GCP 모니터링
로그 탐색기
단순 문자열
Metricss Explorer에서 지표 시각화를 통한 대시보드 구축도 가능 그라파나나 Bigquery 연계 cdn을 통해서 들어온 Lb를 탄 요청을 BigQuery에 쌓는 플로우 CDN Latency 지표 알림 구축
배포방식
- Github Actions 로 자동 배포
- revision_tarffic 배포 버전에 따라서 트래픽 조정?
- no_traffic 옵션을 활성화 해야 신규 배포 때 트래픽 전환 가능 최신 배포를 100% 만든 뒤에 트래픽을 조정할 것
- 7개 인스턴스를 빠르게 배포해야 하고, 파이프라인을 재사용
- 캐시 키를 설정할 수 있음
- 유효기간이 있는 서명 검증 설정 가능
- Cloud CDN 원본으로 지정하려면 LB와 NEG가 필요
- x-client-request-url 요청 헤더로 서명 원본확인
- cloud Storage 간 데이터 전송 비용 절감 가능
- Log Router로 로그를 BigQuery로 적재 가능
- 배포 때 트래픽 분산 가능
Q&A cdn 캐싱 시간을 클라우드에서 정의하거나 원본이 바뀌 었을때 무조건 내려주도록 처리를 해야 할 필요가 있음
This line appears after every note.
Notes mentioning this note
There are no notes linking to this note.