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
470
Git 해부하기 2 + 3
buzzvil
0
37
Metastable Failure
buzzvil
0
230
Git 해부하기
buzzvil
0
48
Introduction to Plate Solving
buzzvil
0
39
Airbnb Minerva
buzzvil
0
320
Shape up 방법론
buzzvil
0
950
Buzzvil Billing Data Pipeline
buzzvil
0
550
Journey of Dash's release-cycle
buzzvil
0
180
Other Decks in Programming
See All in Programming
Java on Azure で LangGraph!
kohei3110
0
160
GoのGenericsによるslice操作との付き合い方
syumai
2
670
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
240
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
130
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
110
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
800
Select API from Kotlin Coroutine
jmatsu
1
180
関数型まつりレポート for JuliaTokai #22
antimon2
0
130
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
3
730
Beyond Portability: Live Migration for Evolving WebAssembly Workloads
chikuwait
0
380
SODA - FACT BOOK
sodainc
1
1.1k
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
11
2.8k
Featured
See All Featured
It's Worth the Effort
3n
184
28k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Producing Creativity
orderedlist
PRO
346
40k
Docker and Python
trallard
44
3.4k
4 Signs Your Business is Dying
shpigford
184
22k
Embracing the Ebb and Flow
colly
86
4.7k
Unsuck your backbone
ammeep
671
58k
Being A Developer After 40
akosma
90
590k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
660
Documentation Writing (for coders)
carmenintech
71
4.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
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