SlideShare a Scribd company logo
1 of 25
Download to read offline
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)
■ 18K+ builds (50 builds / day)
○ dotty(次世代コンパイラ)に期待
● 先人の知見
金の弾丸
出典: Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ
https://www.slideshare.net/kiris60/scala-benchmarks
AdTech StudioでのCircleCI
● CircleCI Enterpriseを利用
○ 物理
○ 30+ Node
○ 100+ Build Container
○ Amebaのと合わせると国内最大規模
○ コストパフォーマンス
Dynalystでのビルド方法
Dynalystのビルド方法(高速化前)
● キャッシュを使ってビルド時間を短く
○ (sbtの機能により)差分コンパイルされる
○ ※ すべてのコンテナで全部のプロジェクトをビルド
● コンテナをたくさん使ってテストは並列に
○ コンテナごとにテストするプロジェクトを変えて分散
○ DBを使うテストは同一ホスト内で並列に走れない
○ 実際には12コンテナ使ってます
● それでも待たされる(20分くらい)ので改善したい
①: CircleCI→CircleCI Enterprise
● まぁまぁ速くなった
○ Enterprise採用ありがとうございます
○ CPU , Memory , Storage , Network
● 結果: 成功
● コンテナたくさんあるんだし、
コンパイルするプロジェクトも
コンテナごとに分けたら速くなるのでは
②: コンパイルを並列にする
②: コンパイルを並列にする
● 余計遅くなった…
● Container #0しかキャッシュが保存されて
いない模様
● 差分コンパイルが効かないのが原因
● 結果: 失敗
● ビルド成果物を先頭コンテナにrsync
すればキャッシュを保存してくれそう
③: 成果物をrsyncで先頭のコンテナに
③: 成果物を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のビルドキャッシュ機能は
使わない
④: 自前でビルドキャッシュを保存
● 結果:
結果
● PR Buildが20分→8分に
○ ※差分の量によって時間は変わります
改善点
改善点
● 並列ビルドをシェルスクリプトで書いてる
○ sbtでいい感じにしたい
● コンテナごとにビルド時間が偏るときがある
○ 現状たまに手で再配置
● S3以外の場所にキャッシュを保存する
○ DC内にストレージあったほうがコスト/速度的に
よさそう
○ 標準でコンテナごとにキャッシュを保存してくれると嬉
しいな(要望)

More Related Content

What's hot

DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
Terui Masashi
 
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
真吾 吉田
 
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
Daisuke Nagao
 

What's hot (20)

JAWS DAYS 2017 Mafia Talk
JAWS DAYS 2017 Mafia TalkJAWS DAYS 2017 Mafia Talk
JAWS DAYS 2017 Mafia Talk
 
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
 
サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事サーバーレスでシステムを開発する時に⼤切な事
サーバーレスでシステムを開発する時に⼤切な事
 
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのことDevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
 
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
実務で活かせる AWSアーキテクチャ設計 〜AWS re:Invent 2016アップデート最新版〜
 
May the FaaS be with us!!
May the FaaS be with us!!May the FaaS be with us!!
May the FaaS be with us!!
 
Serverless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指すServerless AWS構成でセキュアなSPAを目指す
Serverless AWS構成でセキュアなSPAを目指す
 
Serverless Meetup Tokyo #2 オープニング
Serverless Meetup Tokyo #2 オープニングServerless Meetup Tokyo #2 オープニング
Serverless Meetup Tokyo #2 オープニング
 
Jaws days2017-ops jaws-2
Jaws days2017-ops jaws-2Jaws days2017-ops jaws-2
Jaws days2017-ops jaws-2
 
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
 
サーバーレス・アーキテクチャ概要
サーバーレス・アーキテクチャ概要サーバーレス・アーキテクチャ概要
サーバーレス・アーキテクチャ概要
 
AWS Serverless++
AWS Serverless++AWS Serverless++
AWS Serverless++
 
Kubernetes on Alibaba Cloud
Kubernetes on Alibaba CloudKubernetes on Alibaba Cloud
Kubernetes on Alibaba Cloud
 
ヘッドレスCMSとサーバーレス
ヘッドレスCMSとサーバーレスヘッドレスCMSとサーバーレス
ヘッドレスCMSとサーバーレス
 
AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発
 
Storylineでデザインする心地よい会話体験
Storylineでデザインする心地よい会話体験Storylineでデザインする心地よい会話体験
Storylineでデザインする心地よい会話体験
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
サーバーレスの話
サーバーレスの話サーバーレスの話
サーバーレスの話
 
2016/08/25 JAWS-UG 千葉支部 Vol.6 LT
2016/08/25 JAWS-UG 千葉支部 Vol.6 LT2016/08/25 JAWS-UG 千葉支部 Vol.6 LT
2016/08/25 JAWS-UG 千葉支部 Vol.6 LT
 

Similar to Scalaプロダクトのビルド高速化

Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
 

Similar to Scalaプロダクトのビルド高速化 (20)

アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
 
5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap5分でわかる Capabilities と Privilege + KubeCon Recap
5分でわかる Capabilities と Privilege + KubeCon Recap
 
インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計インターネット広告の概要とシステム設計
インターネット広告の概要とシステム設計
 
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
 
OSSのクラウド基盤 OpenStack / CloudStack
OSSのクラウド基盤 OpenStack / CloudStackOSSのクラウド基盤 OpenStack / CloudStack
OSSのクラウド基盤 OpenStack / CloudStack
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
 
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
 
GoldenGateテクニカルセミナー1「市場のトレンドと最新事例のご紹介」(2016/5/11)
GoldenGateテクニカルセミナー1「市場のトレンドと最新事例のご紹介」(2016/5/11)GoldenGateテクニカルセミナー1「市場のトレンドと最新事例のご紹介」(2016/5/11)
GoldenGateテクニカルセミナー1「市場のトレンドと最新事例のご紹介」(2016/5/11)
 
20190620 aws summit_tokyo_2019
20190620 aws summit_tokyo_201920190620 aws summit_tokyo_2019
20190620 aws summit_tokyo_2019
 
20191015 beyondstudy oracle_nagahisa
20191015 beyondstudy oracle_nagahisa20191015 beyondstudy oracle_nagahisa
20191015 beyondstudy oracle_nagahisa
 
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql9/16 Tokyo Apache Drill Meetup - drill vs sparksql
9/16 Tokyo Apache Drill Meetup - drill vs sparksql
 
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
Optuna on Kubeflow Pipeline 分散ハイパラチューニングOptuna on Kubeflow Pipeline 分散ハイパラチューニング
Optuna on Kubeflow Pipeline 分散ハイパラチューニング
 
2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド
2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド
2015.6.5 EMC主催OpenStackセミナー - 日本仮想化技術様講演スライド
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
 
ML Pipelineで実践機械学習
ML Pipelineで実践機械学習ML Pipelineで実践機械学習
ML Pipelineで実践機械学習
 
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
 
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigiScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit group
 

More from kuro kuro (8)

Maglev: A Fast and Reliable Software Network Load Balancer
Maglev: A Fast and Reliable Software Network Load BalancerMaglev: A Fast and Reliable Software Network Load Balancer
Maglev: A Fast and Reliable Software Network Load Balancer
 
Logback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったLogback stackdriver-loggingを作った
Logback stackdriver-loggingを作った
 
AWSで透過プロキシをやってみた
AWSで透過プロキシをやってみたAWSで透過プロキシをやってみた
AWSで透過プロキシをやってみた
 
さくらのシンプル監視でWi-Fiの死活監視をしてみた wakate2016w LT
さくらのシンプル監視でWi-Fiの死活監視をしてみた wakate2016w LTさくらのシンプル監視でWi-Fiの死活監視をしてみた wakate2016w LT
さくらのシンプル監視でWi-Fiの死活監視をしてみた wakate2016w LT
 
ICT Trouble Shooting Contest
ICT Trouble Shooting ContestICT Trouble Shooting Contest
ICT Trouble Shooting Contest
 
holidaymakerを支える技術
holidaymakerを支える技術holidaymakerを支える技術
holidaymakerを支える技術
 
明大・日大交流会全体統括
明大・日大交流会全体統括明大・日大交流会全体統括
明大・日大交流会全体統括
 
CTFに参加してきました。
CTFに参加してきました。CTFに参加してきました。
CTFに参加してきました。
 

Recently uploaded

Recently uploaded (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Scalaプロダクトのビルド高速化