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
Scalaプロダクトのビルド高速化
Search
Kurochan
March 10, 2017
Technology
0
290
Scalaプロダクトのビルド高速化
CircleCI Meetup Tokyo #2で話したものです
Kurochan
March 10, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
8
3.9k
GoでTCP Proxyを実装してみよう
kurochan
1
370
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
190
スケールするというのはどういうことなのか
kurochan
14
4k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
38
37k
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
kurochan
10
2.3k
セキュキャンを卒業してその後
kurochan
0
1.1k
サイバーエージェントの実践×実験Snowflake 導入の経緯から最新機能のトライアルまで / How Snowflake Is Used In CyberAgent - Go To the Future
kurochan
0
790
入門Open Policy Agent: Policy as Codeを目指して / introduction-to-open-policy-agent
kurochan
0
430
Other Decks in Technology
See All in Technology
オブジェクト指向宗教史
tanakahisateru
14
12k
中学生でもわかる深層学習
e869120
10
2.4k
生成AIサービスPanorama AIご説明資料
sdt
0
300
HoneycombとOpenTelemetryでオブザーバビリティに入門してみる
sumiren
2
160
マイクロサービス環境におけるDB戦略 in DMMプラットフォーム
pospome
11
3k
Building a RAG app to chat with your data (on Azure)
pamelafox
0
120
単回帰分析について数式を追いながら実装してみた
kentaitakura
0
500
長文から長文を生成するLLMツールをオープンソースで作ってみた。
tomohisa
2
150
匠MethodとRDRAとICONIXとDDDで実現する一気通貫オブジェクト指向開発
haru860
4
2.1k
戦略的DDDを実践するための跳躍力 / OOC 2024
pictiny
6
4.2k
オブジェクトのおしゃべり大失敗 メッセージングアンチパターン集 / messaging anti-pattern collection
ytake
0
340
生成AI・LLM時代における 機械学習エンジニアとしてのキャリア戦略・開発戦略 / my-career-and-development-strategies-for-ml-engineer-2024
yuya4
4
880
Featured
See All Featured
Designing the Hi-DPI Web
ddemaree
275
33k
Optimizing for Happiness
mojombo
369
69k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
950
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
101
6.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
12
1.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
257
12k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
355
22k
The Cult of Friendly URLs
andyhume
73
5.6k
Building a Scalable Design System with Sketch
lauravandoore
455
32k
Gamification - CAS2011
davidbonilla
76
4.5k
Unsuck your backbone
ammeep
661
56k
The Invisible Customer
myddelton
114
12k
Transcript
CyberAgent, Inc. All Rights Reserved Scalaプロダクトのビルド高速化 黒崎 優太 @kuro_m88
黒崎 優太 @kuro_m88 • 株式会社サイバーエージェント ◦ AdTech Studio / Dynalyst
エンジニア • 新卒2年目 • Scala, AWS, LXD 査読に参加しました 今書いています
Scalaのコンパイルと言えば
Scalaのコンパイルと言えば • 大規模プロジェクトだと遅い ◦ Dynalystの例: ▪ 100+ sub projects ▪
400K+ lines (Scala) ◦ dotty(次世代コンパイラ)に期待 • 先人の知見
金の弾丸 出典: Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ https://www.slideshare.net/kiris60/scala-benchmarks
AdTech StudioでのCircleCI • CircleCI Enterpriseを利用 ◦ 物理 ◦ 30+ Node
◦ 100+ Build Container ◦ Amebaのと合わせると国内最大規模
Dynalystでのビルド方法
None
Dynalystのビルド方法(高速化前) • キャッシュを使ってビルド時間を短く ◦ (sbtの機能により)差分コンパイルされる ◦ ※ すべてのコンテナで全部のプロジェクトをビルド • コンテナをたくさん使ってテストは並列に
◦ コンテナごとにテストするプロジェクトを変えて分散 ◦ DBを使うテストは同一ホスト内で並列に走れない ◦ 実際には12コンテナ使ってます • それでも待たされる(20分くらい)ので改善したい
①: CircleCI→CircleCI Enterprise • まぁまぁ速くなった ◦ Enterprise採用ありがとうございます ◦ CPU ,
Memory , Storage , Network • 結果: 成功
• コンテナたくさんあるんだし、 コンパイルするプロジェクトも コンテナごとに分けたら速くなるのでは ②: コンパイルを並列にする
None
②: コンパイルを並列にする • 余計遅くなった… • Container #0しかキャッシュが保存されて いない模様 • 差分コンパイルが効かないのが原因
• 結果: 失敗
• ビルド成果物を先頭コンテナにrsync すればキャッシュを保存してくれそう ③: 成果物をrsyncで先頭のコンテナに
None
③: 成果物をrsyncで先頭のコンテナに • connection timed out
③: 成果物をrsyncで先頭のコンテナに • 頻繁にコケてしまう… ◦ 帯域制限してみたり、色々やったけどうまくい かず… • 結果: 失敗
困ったので調べた 出典: Cache save/restore algorithm - Build Environment - CircleCI
Community Discussion https://discuss.circleci.com/t/cache-save-restore-algorithm/759
困ったので調べた 出典: Cache save/restore algorithm - Build Environment - CircleCI
Community Discussion https://discuss.circleci.com/t/cache-save-restore-algorithm/759
④: 自前でビルドキャッシュを保存 • ビルドキャッシュをS3に自前でアップロード • ビルド時にキャッシュをダウンロードしてきて展開 • circle.ymlにこれを行うシェルスクリプトを書いた ◦ 代わりにCircleCIのビルドキャッシュ機能は
使わない
None
④: 自前でビルドキャッシュを保存 • 結果:
結果 • PR Buildが20分→8分に ◦ ※差分の量によって時間は変わります
改善点
改善点 • 並列ビルドをシェルスクリプトで書いてる ◦ sbtでいい感じにしたい • コンテナごとにビルド時間が偏るときがある ◦ 現状たまに手で再配置 •
S3以外の場所にキャッシュを保存する ◦ DC内にストレージあったほうがコスト/速度的に よさそう ◦ コンテナごとにキャッシュを保存してくれると 嬉しいな(要望)