Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Improving Adserver
Search
Buzzvil
April 21, 2021
Programming
0
180
Improving Adserver
By Claud
Buzzvil
April 21, 2021
Tweet
Share
More Decks by Buzzvil
See All by Buzzvil
220903_GFS
buzzvil
0
490
Git 해부하기 2 + 3
buzzvil
0
42
Metastable Failure
buzzvil
0
250
Git 해부하기
buzzvil
0
55
Introduction to Plate Solving
buzzvil
0
43
Airbnb Minerva
buzzvil
0
350
Shape up 방법론
buzzvil
0
970
Buzzvil Billing Data Pipeline
buzzvil
0
580
Journey of Dash's release-cycle
buzzvil
0
200
Other Decks in Programming
See All in Programming
CSC305 Lecture 06
javiergs
PRO
0
210
フロントエンド開発に役立つクライアントプログラム共通のノウハウ / Universal client-side programming best practices for frontend development
nrslib
7
3.9k
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
160
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
500
階層構造を表現するデータ構造とリファクタリング 〜1年で10倍成長したプロダクトの変化と課題〜
yuhisatoxxx
3
930
Pythonスレッドとは結局何なのか? CPython実装から見るNoGIL時代の変化
curekoshimizu
5
1.5k
Six and a half ridiculous things to do with Quarkus
hollycummins
0
120
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
210
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
240
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
200
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
170
CSC509 Lecture 02
javiergs
PRO
0
410
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
580
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
It's Worth the Effort
3n
187
28k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Become a Pro
speakerdeck
PRO
29
5.5k
How to train your dragon (web standard)
notwaldorf
96
6.3k
Transcript
Improving BuzzAd CI Claud Choi @ Buzzvil 2021-04-21
buzzad의 악명
Why? Slowest tests in BuzzAd
Buzzad test
History
모든 것의 시작 Let’s integrate codecov into buzzad
Drone migration • AS-IS ◦ Node / Python lint, Python
test → Jenkins CI ◦ Python type check / formatting → Drone CI • TO-BE ◦ Only use Drone CI
Drone migration
First Codecov Report
After drone migration • Seems going well
But.. • 버즈애드 테스트가 느려졌어요..
But.. • 간헐적으로 ci 느려지는 현상 발생 • 리소스 문제로
인한 일시적인 현상으로 생각함
None
None
문제 인식 • CI가 너무 느려서 생산성에 영향을 주고 있다
• 속도를 개선할 수 있는 방법?
Distributed testing • pytest-xdist ◦ 여러 프로세스에서 TC를 병렬적으로 수행
◦ 리소스 vs 수행 시간
Problems • We have dependencies ◦ Do we need databases
per worker?
Problems • We have dependencies ◦ Do we need databases
per worker? ◦ No we just need table/indices per worker table pytest gw1_table w1 gw2_table w2 gw3_table w3
Problems • We have dependencies ◦ Do we need databases
per worker? ◦ No we just need table/indices per worker
Failing test cases • Unexpected external dependency ◦ 테스트 도중
생성된 file log를 test case에서 사용하고 있음 ◦ Click log가 json file에 잘 남는지 확인하는 테스트
Failing test cases
Failing test cases • Fragile test cases ◦ Autoincrement id를
특정 값으로 가정하여 테스트케이스를 작성한 경우 ◦ 존재하지 않는 데이터의 id만 사용하는 경우 ▪ e.g. 실제 unit 생성 없이 unit_id=1만 사용
Finally
But..
Problems • Flaky builds ◦ 같은 테스트라도 간헐적으로 실패하는 경우가
발생함 ◦ Dependent service에 대한 요청 실패로 발생 • Performance degradation ◦ 갑자기 CI 수행시간이 매우 길어지거나 아예 동작하지 않는 경우가 발생함 ◦ 동시에 수행되고 있는 CI 워크로드가 많은 경우에 발생
DynamoDB timeout • 간헐적으로 local dynamodb로 보내는 요청이 timeout되어 테스트가
실패함 • 테스트 시 dynamodb 요청이 실패하면 retry하도록 하여 해결 ◦ pytest-xdist로 인해 ddb 서비스에 동시에 많은 요청이 들어오는 경우 throttle되는 이슈로 생각됨
Elasticsearch timeout • 간헐적으로 elasticsearch로 보내는 요청이 timeout되어 테스트가 실패함
• ddb의 케이스를 참고하여 retry하도록 하여 해결
Performance degradation • Why?
• Drone server ◦ Receive webhook from github ◦ Send
status to github • Drone runner ◦ Poll server for pipelines to execute ◦ Execute workloads Drone CI Drone server Drone runner Webhook Status Result Poll Run workloads k8s-screen
Drone kubernetes runner • Drone pipeline이 하나의 pod이 대응되고 step별로
container가 생성됨 ◦ Note: A pod is the smallest execution unit in Kubernetes Pipeline step step step step Pod container container container container
Drone jobs not scheduled properly
Kubernetes pod scheduling • 클러스터에서 pod이 필요로 하는 리소스가 충분한
노드에 스케줄링됨 • Resource request/limit ◦ request: pod 생성 시 필요로 하는 리소스 ◦ limit: pod이 최대로 사용할 수있는 리소스. 넘어가면 throttle되거나 OOMKilled Node requests: memory: 1Gi / 4Gi Node requests: memory: 3.5Gi / 4Gi Pod requests: memory: 1Gi limits: memory: 2Gi
Cluster autoscaler not working • Drone이 올라가 있는 클러스터의 autoscaler가
동작하지 않았음 ◦ cluster autoscaling: 필요한 리소스에 따라 워커 노드의 수를 자동으로 조절함 • Drone job이 여러 개 도는 경우 리소스 부족으로 스케줄링 안됨
Drone resource request
Drone resource request • Step에 정의한 resource request 가 동작하지
않는 것 확인 ◦ request가 항상 1로 생성됨 ◦ 일부 노드에 heavy한 job이 계속해서 스케줄링 되는 현상 발생
Culprit • Drone에서 step 단위의 resource request가 사라지고 pipeline 단위로만
설정할 수 있도록 변경됨..
Finally
Result • buzzad CI를 drone으로 migration • CI 수행 시간
4분 전후로 단축
Thank you