[네이버공유] Buzzvil System Overviews
High-level overview
버즈빌의 주요 서비스는 BuzzAd와 BuzzScreen이 있습니다. BuzzAd는 광고와 관련된 모든 기능을 담당하며 그 외 컨텐츠 할당 및 SDK가 직접적으로 필요한 API는 모두 BuzzScreen에서 담당합니다.
주의해야할 부분은 포인트 적립에 대한 관리인데 다음과 같이 역할을 나누어 가지고 있습니다.
BuzzAd: 액션형 광고, 비디오 광고 포인트 적립.
BuzzScreen: 랜딩, 잠금해제, 기본 포인트 및 웰컴포인트와 같은 광고과 직접적인 관련이 없는 포인트 적립.
각 서비스에 적립된 포인트 정보는 메세지 브로커를 거쳐 Postbacksvc로 전달됩니다. Postbacksvc는 퍼블리셔 서버의 포인트 적립 API를 호출합니다.
SDK 관점
SDK 관점에서 바라봤을 때 직접적으로 연결되어 있는 서비스는 BuzzScreen 외에도 다른 몇가지 서비스가 더 있습니다.
Authsvc: SDK 세션을 인증하는 역할을 수행합니다. 인증을 위해 필요한 account 정보는 Accountsvc에서 관리하고 있습니다.
Accountsvc: 유저 account를 관리하는 서비스입니다. 실제 account정보는 BuzzScreen에 보관되어 있으며 이 데이터를 Accountsvc로 마이그레이션을 계획하고 있습니다.
Configsvc: SDK의 설정값을 관리하는 서비스입니다.
Abtestsvc: Configsvc가 SDK의 설정값을 abtest하기 위한 목적으로 사용하고 있습니다. Abtestsvc는 Configsvc 외에도 다른 서비스가 사용할 수 있도록 일반적인 목적으로 설계되었으나 현재 많이 활용되고 있지는 않습니다.
BI-event-logging: SDK 발생한 이벤트를 수집하는 서비스입니다. Google analytics와 유사한 역할을 수행하는 서비스라고 생각하면 됩니다.
BuzzScreen 관점
BuzzScreen과 BuzzScreen-api는 원래 하나의 서비스였습니다. 이후 여러개의 서비스로 분리되었으나 MySQL를 비롯한 여러 persistent는 공유해서 사용하고 있습니다. 장기적으로 각 서비스별로 독립적인 persistent를 사용하도록 분리할 계획을 가지고 있습니다. 각 서비스의 역할은 다음과 같습니다.
BuzzScreen-api: Authsvc, Configsvc 등 일반적인 기능을 제외한 대부분의 SDK가 필요로로 하는 API를 담당합니다. 주요 API로는 SDK init API, 광고/컨텐츠 할당 API, 컨텐츠 이벤트 수집 API, 포인트 적립 API 등이 있습니다. 이중 광고 할당은 BuzzAd에게 다시 위임하며 포인트 적립은 BuzzScreen 서비스에 위임합니다. 포인트 적립 기능은 BuzzScreen에서 Buzzscreen-API로 이전하는 것을 계획하고 있습니다.
BuzzScreen: UI backend, 컨텐츠 크롤링 및 관리, 포인트 적립, account table 관리 등의 기능을 담당합니다.
Content-dedupsvc: BuzzScreen에서 크롤링된 컨텐츠중에 유사/중복 컨텐츠를 찾아냅니다. BuzzScreen MySQL 디비에서 컨텐츠 정보를 가져와 분석을 하고 그 결과를 BuzzScreen에 API로 통보합니다.
Renderer: 크롤링한 컨텐츠 이미지를 BuzzAd SDK의 요구사항에 맞게 다시 렌더링 하여 새로운 이미지로 만드는 기능을 담당합니다.
Postbacksvc: 잠금화면 기본 리워드 및 CPC/CPM 광고에 대한 랜딩 리워드는 BuzzScreen에 적립이 되고 Postbacksvc를 통해 포인트 적립 요청을 매체사에 전달합니다.
BuzzAd 관점
BuzzAd는 버즈빌의 서비스중 가장 핵심적인 광고와 관련된 모든 기능을 담당하고 있습니다. BuzzAd SDK는 BuzzScreen 서비스를 거쳐 BuzzAd로 부터 광고를 받아옵니다. 광고에서 발생된 impression과 같은 이벤트는 BuzzAd SDK에서 BuzzAd 서비스로 직접적으로 호출됩니다.
Videorecordsvc: 비디오 광고에서 발생한 이벤트를 수집하는 서비스입니다.
Geosvc: 지역 이름을 폴리곤 좌표로 변환하는 API를 제공합니다. BuzzAd에서 광고의 지역 타게팅을 위해 사용합니다.
Realtime ad event counter: BuzzAd에서 수집한 impression, click, conversion event는 광고 별, 지면 별, 시간 별로 발생 횟수를 집계하여 최종적으로 Redis에 저장됩니다.
Adpacingsvc: 실시간 광고 예산제어를 담당합니다. Statsvc를 통해 현재 광고 예산 소진 상태를 조회하고 예산을 다 소진한 광고를 BuzzAd에게 알려 광고 집행이 종료될 수 있도록 합니다.
Postbacksvc: CPC/CPM을 제외한 나머지 모든 광고의 리워드는 BuzzAd에 적립이 되고 Postbacksvc를 통해 포인트 적립 요청을 매체사에 전달합니다.
BuzzAd - ADN demand 연동
BuzzAd는 직영업 광고 디맨드 뿐만 아니라 adnetwork를 통해서도 광고를 받아 옵니다. 대부분의 adnetwork 광고는 Adnsvc를 통해 받아오지만 일부 adnetwork 광고는 여전히 BuzzAd가 직접 Adnework server와 연동되어 있으며 이 부분은 Adnsvc로의 완전한 마이그레이션이 필요합니다. Adnreportsvc는 adnetwork에서 발생한 광고성과를 조회하는 역할을 수행하며 이 데이터는 최종적으로 Statssvc로 전달됩니다.
Dash 관점
Dash는 광고/컨텐츠 운영, 성과 관리 및 SDK운영을 위해 필요한 모든 기능을 제공하는 어드민입니다. BFF(Backend for frontend)인 dash-api-gateway를 통해 내부 서비스들과 통신하고 있습니다. 초기 설계시에는 BuzzScreen, BuzzAd가 각자의 어드민을 가지고 있었고 현재 Dash/Dash-api-gateway 기반으로 통합, 이전 되었습니다. 현재 서비스간의 디펜던시가 복잡하게 얽혀있는데 장기적으로 서비스간의 통신을 최소화하고 Dash-api-gateway가 각 서비스와 직접 통신하는 것이 설계의 방향입니다.
Renderer: 광고 게제 지면 생성을 위해 사용합니다.
Statssvc: 광고, 컨텐츠의 리포트 정보를 관리합니다.
Billingsvc: Statssvc의 데이터를 활용하여 정산 기능을 담당합니다.
Data pipeline
마이크로서비스에서 생성된 데이터는 Data lake인 S3에 보관이 되며 주로 Athena를 이용해 data trasform을 수행합니다. 주요 raw data및 mart데이터는 redshift에 적재되어 있습니다. Statssvc는 S3, Redshift에서 서비스에 필요한 데이터를 로딩하여 사용합니다.