Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
運用に困っていた重いバッチを高速化したらそもそもの運用が変わった話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
SHIFT EVOLVE
PRO
June 27, 2021
Business
930
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
運用に困っていた重いバッチを高速化したらそもそもの運用が変わった話
SHIFT EVOLVE
PRO
June 27, 2021
More Decks by SHIFT EVOLVE
See All by SHIFT EVOLVE
価値実現重視へとシフトした時代を生き抜くには / 20260713 Takeshi Watarai
shift_evolve
PRO
1
37
SHIFTのコミュニティ活動 / 20260828 Yumiko Ohata
shift_evolve
PRO
2
68
AI活用によるレガシーモダナイゼーションとプロジェクトマネジメント / 20260827 Tsukasa Takemura & Takashi Maekawa
shift_evolve
PRO
0
48
兼務の事務局から、組織へ SHIFTのAWSアライアンス立ち上げ記 / 20260807 Satoshi Torano
shift_evolve
PRO
1
66
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
1.2k
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
260
”そのまま移行”からの脱却へ ― AI解析で実現するSAP S/4HANA導入成功メソッド / 20260729 Akio Hane
shift_evolve
PRO
1
57
区民の問い合わせ、AIにどこまで任せる? 品川区×SHIFTが挑む自治体音声AI実証の現在地 / 20260626 Taku Nishizawa and Satoshi Torano
shift_evolve
PRO
1
99
コミュニティを、仕事にした。‐ 学びの場が会社の価値になるまで / 20260724 Ayana Chandler
shift_evolve
PRO
0
140
Other Decks in Business
See All in Business
会社説明資料
xinghr
0
3k
3DC Company Deck v2026
3dc_inc
0
550
三井物産グループのデジタル証券~福岡・天神~徹底解説セミナー
c0rp_mdm
PRO
0
1k
PMよ、エゴイストになれ!
suh1101
0
190
データを使う側視点のデータ整備 / 第2回 データ整備を前向きに考える会
shinu
PRO
0
320
KEEBHOLIC NAGOYA Vol.2
shakupan
0
160
AIがなくてもつよいPM/PdM/ディレクターになるには?
iflection
0
890
インキュデータ会社紹介資料
okitsu
3
60k
ラス恋カンパニーデック_260907
laskoi
0
300
事業領域
daisan123
0
510
株式会社アシスト_会社紹介資料
ashisuto_career
3
190k
家族アルバム みてね 事業紹介 / Our Business
familyalbum
9
63k
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
The Invisible Side of Design
smashingmag
301
52k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
980
So, you think you're a good person
axbom
PRO
2
2.1k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Making the Leap to Tech Lead
cromwellryan
135
10k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Transcript
運用に困っていた重いバッチ を高速化したらそもそもの運 用が変わった話 Airitech株式会社 橋本拓也 DevOps & QAエンジニアLT大会 Vol.1 1
/ 19
発表する人 Airitech株式会社 橋本拓也 DevOps & QAエンジニアLT大会 Vol.1 2 / 19
発表する人 Airitech株式会社 橋本拓也 仕事内容 トラブルシューティングや性能試験設計・実施をメインの仕事にしています。 ぱっと見解決できない障害とか見るとアドレナリン上がるタイプです。 DevOps & QAエンジニアLT大会 Vol.1
2 / 19
発表する人 Airitech株式会社 橋本拓也 仕事内容 トラブルシューティングや性能試験設計・実施をメインの仕事にしています。 ぱっと見解決できない障害とか見るとアドレナリン上がるタイプです。 好きなプログラミング言語 C++/Lua/AWK DevOps &
QAエンジニアLT大会 Vol.1 2 / 19
発表する人 Airitech株式会社 橋本拓也 仕事内容 トラブルシューティングや性能試験設計・実施をメインの仕事にしています。 ぱっと見解決できない障害とか見るとアドレナリン上がるタイプです。 好きなプログラミング言語 C++/Lua/AWK 趣味 GithubのTrending見て、面白そうなリポジトリを触ってみる。
paiza スキルチェックのレーティングを上げる。 DevOps & QAエンジニアLT大会 Vol.1 2 / 19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 DevOps & QAエンジニアLT大会 Vol.1 3 / 19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 1. PHPで書いたバッチ処理がすごく遅い DevOps & QAエンジニアLT大会 Vol.1 3 /
19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 1. PHPで書いたバッチ処理がすごく遅い 2. PHPで極力頑張る DevOps & QAエンジニアLT大会 Vol.1
3 / 19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 1. PHPで書いたバッチ処理がすごく遅い 2. PHPで極力頑張る 3. C++の力をお見せしますよ DevOps &
QAエンジニアLT大会 Vol.1 3 / 19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 1. PHPで書いたバッチ処理がすごく遅い 2. PHPで極力頑張る 3. C++の力をお見せしますよ 4. C++の底力を絞り出す
DevOps & QAエンジニアLT大会 Vol.1 3 / 19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 1. PHPで書いたバッチ処理がすごく遅い 2. PHPで極力頑張る 3. C++の力をお見せしますよ 4. C++の底力を絞り出す
5. あれ?バッチ処理いらないのでは? DevOps & QAエンジニアLT大会 Vol.1 3 / 19
話の流れ LTで時間切れになったら悲しいので、概要を書いておきます。 1. PHPで書いたバッチ処理がすごく遅い 2. PHPで極力頑張る 3. C++の力をお見せしますよ 4. C++の底力を絞り出す
5. あれ?バッチ処理いらないのでは? 6. そして運用が変わった DevOps & QAエンジニアLT大会 Vol.1 3 / 19
事の発端 コンサルティング契約中のお客様がデータ処理のバッチ作ろうとしていました。 PHPでバックエンドを書くのが得意なお客様なので、バッチもPHPで書いていました。 今までは処理も単純で、データ量も少なく、これでうまくいっていたのです。 ところが今回の処理では以下のようなそこそこ厳しい制約が存在して、バッチ処理の速度が大きな問題 になってしまいました。 1. 5分毎に外部から配置されるデータを加工して参照しやすいデータに変更しないといけない 2. 当然5分以内に全ての処理を終わらせないといけない
3. インスタンスが外部からのファイルサーバーとしても利用されていて、高負荷をかけられない DevOps & QAエンジニアLT大会 Vol.1 4 / 19
事の発端 コンサルティング契約中のお客様がデータ処理のバッチ作ろうとしていました。 PHPでバックエンドを書くのが得意なお客様なので、バッチもPHPで書いていました。 今までは処理も単純で、データ量も少なく、これでうまくいっていたのです。 ところが今回の処理では以下のようなそこそこ厳しい制約が存在して、バッチ処理の速度が大きな問題 になってしまいました。 1. 5分毎に外部から配置されるデータを加工して参照しやすいデータに変更しないといけない 2. 当然5分以内に全ての処理を終わらせないといけない
3. インスタンスが外部からのファイルサーバーとしても利用されていて、高負荷をかけられない そんな中,お客様より Airitechさん性能改善もしてたよね。なんとかできますか ね? とエンジニアのプライドをくすぐる発言をいただきました。 コレハガンバラナイト…。 DevOps & QAエンジニアLT大会 Vol.1 4 / 19
改善前の処理 改善前のコードは既存のPHP5のコードを元に作成されていて、非常に効率が悪いものでした。 5分間のデータ(1.5Mbyte)の処理に50分以上かかっていることが分かります。 データ初期化 17分 データ伸長・分析 16分 データ変換 20分 DevOps
& QAエンジニアLT大会 Vol.1 5 / 19
改善前の処理 改善前のコードは既存のPHP5のコードを元に作成されていて、非常に効率が悪いものでした。 5分間のデータ(1.5Mbyte)の処理に50分以上かかっていることが分かります。 データ初期化 17分 データ伸長・分析 16分 データ変換 20分 …とても、遅いですね。
DevOps & QAエンジニアLT大会 Vol.1 5 / 19
PHPのままで性能改善 PHPのプロファイラで遅い処理を特定しつつ、以下のような改善をしました。 DevOps & QAエンジニアLT大会 Vol.1 6 / 19
PHPのままで性能改善 PHPのプロファイラで遅い処理を特定しつつ、以下のような改善をしました。 データ初期化でファイルへの書き込み回数を減らす DevOps & QAエンジニアLT大会 Vol.1 6 / 19
PHPのままで性能改善 PHPのプロファイラで遅い処理を特定しつつ、以下のような改善をしました。 データ初期化でファイルへの書き込み回数を減らす 伸長処理の一部を事前計算して高速化してみる DevOps & QAエンジニアLT大会 Vol.1 6 /
19
PHPのままで性能改善 PHPのプロファイラで遅い処理を特定しつつ、以下のような改善をしました。 データ初期化でファイルへの書き込み回数を減らす 伸長処理の一部を事前計算して高速化してみる 一時ファイルの出力先をtmpfsに移動する DevOps & QAエンジニアLT大会 Vol.1 6
/ 19
PHPのままで性能改善 PHPのプロファイラで遅い処理を特定しつつ、以下のような改善をしました。 データ初期化でファイルへの書き込み回数を減らす 伸長処理の一部を事前計算して高速化してみる 一時ファイルの出力先をtmpfsに移動する arrayへの検索回数を極力減らす DevOps & QAエンジニアLT大会 Vol.1
6 / 19
PHPのままで性能改善 PHPのプロファイラで遅い処理を特定しつつ、以下のような改善をしました。 データ初期化でファイルへの書き込み回数を減らす 伸長処理の一部を事前計算して高速化してみる 一時ファイルの出力先をtmpfsに移動する arrayへの検索回数を極力減らす PHP8を使ってみる リリースしたてで触ってみたかった… DevOps &
QAエンジニアLT大会 Vol.1 6 / 19
PHPのままで性能改善結果 データ初期化 1秒 データ伸長・分析 90秒 データ変換 30秒 トータルで2分程度短縮できました。 DevOps &
QAエンジニアLT大会 Vol.1 7 / 19
PHPのままで性能改善結果 データ初期化 1秒 データ伸長・分析 90秒 データ変換 30秒 トータルで2分程度短縮できました。 25倍の高速化!! DevOps
& QAエンジニアLT大会 Vol.1 7 / 19
PHPのままで性能改善結果 データ初期化 1秒 データ伸長・分析 90秒 データ変換 30秒 トータルで2分程度短縮できました。 25倍の高速化!! 5分のTime
Windowに収まるようになって、 高速化、大成功! DevOps & QAエンジニアLT大会 Vol.1 7 / 19
でも、まだ遅くない? DevOps & QAエンジニアLT大会 Vol.1 8 / 19
でも、まだ遅くない? 感覚的に 1.5MByte のファイルの処理に2分かかるのはかなり遅いのでは? DevOps & QAエンジニアLT大会 Vol.1 8 /
19
でも、まだ遅くない? 感覚的に 1.5MByte のファイルの処理に2分かかるのはかなり遅いのでは? PHPがボトルネックになっているかもしれない。 DevOps & QAエンジニアLT大会 Vol.1 8
/ 19
でも、まだ遅くない? 感覚的に 1.5MByte のファイルの処理に2分かかるのはかなり遅いのでは? PHPがボトルネックになっているかもしれない。 もしや… DevOps & QAエンジニアLT大会 Vol.1
8 / 19
でも、まだ遅くない? 感覚的に 1.5MByte のファイルの処理に2分かかるのはかなり遅いのでは? PHPがボトルネックになっているかもしれない。 もしや… これは…… DevOps & QAエンジニアLT大会
Vol.1 8 / 19
でも、まだ遅くない? 感覚的に 1.5MByte のファイルの処理に2分かかるのはかなり遅いのでは? PHPがボトルネックになっているかもしれない。 もしや… これは…… C++を業務で使うチャンスでは? DevOps &
QAエンジニアLT大会 Vol.1 8 / 19
[FYI] PHPとC++の速度比較 プログラミング言語の速度には色々な比較の方法があり、完璧で正確な比較の方法は存在しません。 色々なbenchmarkを様々なエンジニアが実装している以下のリポジトリでJSONのパース処理を見ると、 C++はPHPの10倍の処理速度を叩き出していることが分かります。 https://github.com/kostya/benchmarks#json Language Time, s C++/g++(DAW
JSON Link) 0.130 PHP 1.345 DevOps & QAエンジニアLT大会 Vol.1 9 / 19
[FYI] PHPとC++の速度比較 プログラミング言語の速度には色々な比較の方法があり、完璧で正確な比較の方法は存在しません。 色々なbenchmarkを様々なエンジニアが実装している以下のリポジトリでJSONのパース処理を見ると、 C++はPHPの10倍の処理速度を叩き出していることが分かります。 https://github.com/kostya/benchmarks#json Language Time, s C++/g++(DAW
JSON Link) 0.130 PHP 1.345 今回の処理も更に10倍程度の高速化を目指せるはず! DevOps & QAエンジニアLT大会 Vol.1 9 / 19
C++への移植チャレンジ 幸いなことに、お客様には以下のような高速化するモチベーションがあることが分かっていました。 1. 少ない遅延で情報を提示したい 2. 余裕があれば配置されるデータに入っている他の情報も有効活用したい DevOps & QAエンジニアLT大会 Vol.1
10 / 19
C++への移植チャレンジ 幸いなことに、お客様には以下のような高速化するモチベーションがあることが分かっていました。 1. 少ない遅延で情報を提示したい 2. 余裕があれば配置されるデータに入っている他の情報も有効活用したい お客様からも同意をいただき、 PHPより速いC++での速度向上にチャレンジしてみることに! DevOps &
QAエンジニアLT大会 Vol.1 10 / 19
C++に単純移植 PHPのコードをほぼそのままC++に移植してみました。 データ初期化 1秒 データ伸長・分析 12秒 データ変換 4秒 DevOps &
QAエンジニアLT大会 Vol.1 11 / 19
C++に単純移植 PHPのコードをほぼそのままC++に移植してみました。 データ初期化 1秒 データ伸長・分析 12秒 データ変換 4秒 17秒と2分から約7倍の高速化を達成! DevOps
& QAエンジニアLT大会 Vol.1 11 / 19
C++に単純移植 PHPのコードをほぼそのままC++に移植してみました。 データ初期化 1秒 データ伸長・分析 12秒 データ変換 4秒 17秒と2分から約7倍の高速化を達成! …でもまだ遅く感じる。
DevOps & QAエンジニアLT大会 Vol.1 11 / 19
C++に単純移植 PHPのコードをほぼそのままC++に移植してみました。 データ初期化 1秒 データ伸長・分析 12秒 データ変換 4秒 17秒と2分から約7倍の高速化を達成! …でもまだ遅く感じる。
C++はもっと「できる子」だって示したい! DevOps & QAエンジニアLT大会 Vol.1 11 / 19
C++の底力を絞り出す! unordered_mapの変わりにmartinus/robin-hood-hashingを使う 17秒 → 15秒 fmtlib/fmtの引数をFMT_COMPILEに変更する 15秒 → 13秒 doubleの文字列化処理を整数に変換してから実施
13秒 → 11秒 dbubleの文字列化処理をキャッシュして保持 11秒 → 10秒 martinus/robin-hood-hashingの一部をTessil/robin-mapに変更 10秒 → 9秒 CSV parserの利用をやめて最適化したロジックへ 9秒 → 8秒 標準allocatorの代わりにmicrosoft/mimallocを使う 8秒 → 7秒 条件分岐をループの外に移動 7秒 → 6秒 さらに3倍弱の高速化! DevOps & QAエンジニアLT大会 Vol.1 12 / 19
同僚からはちょっと呆れられました。 DevOps & QAエンジニアLT大会 Vol.1 13 / 19
そして、ふと気がつく DevOps & QAエンジニアLT大会 Vol.1 14 / 19
そして、ふと気がつく これだけ速くでいるならば、処理方式を変更できるのでは? DevOps & QAエンジニアLT大会 Vol.1 14 / 19
そして、ふと気がつく これだけ速くでいるならば、処理方式を変更できるのでは? 契約先が ファイルを 配置 オリジナル データを 保存 参照しやすいデータを ⽣成して、保存
( 重い処理) 最新データを⼀部を取得 業務に応じて⾮定期で 最新状態を閲覧 DevOps & QAエンジニアLT大会 Vol.1 14 / 19
そして、ふと気がつく これだけ速くでいるならば、処理方式を変更できるのでは? 契約先が ファイルを 配置 オリジナル データを 保存 ⽣データから 必要な部分だけ抽出
業務に応じて⾮定期で 最新状態を閲覧 DevOps & QAエンジニアLT大会 Vol.1 15 / 19
そして、ふと気がつく これだけ速くでいるならば、処理方式を変更できるのでは? 契約先が ファイルを 配置 オリジナル データを 保存 ⽣データから 必要な部分だけ抽出
業務に応じて⾮定期で 最新状態を閲覧 お客様に提案したところ、プロトタイピングすることに! DevOps & QAエンジニアLT大会 Vol.1 15 / 19
変更した処理方式でプロトタイピング 「特定の範囲の情報だけを取得する」ロジックを試作して計測。 DevOps & QAエンジニアLT大会 Vol.1 16 / 19
変更した処理方式でプロトタイピング 「特定の範囲の情報だけを取得する」ロジックを試作して計測。 1回の実行が0.3秒で実行できることを確認できました。 DevOps & QAエンジニアLT大会 Vol.1 16 / 19
変更した処理方式でプロトタイピング 「特定の範囲の情報だけを取得する」ロジックを試作して計測。 1回の実行が0.3秒で実行できることを確認できました。 メンテナンスの都合上、本開発ではGo言語を採用することになりましたが、 エラー処理を入れても1秒以下で処理できる方式で運用中。 DevOps & QAエンジニアLT大会 Vol.1 16
/ 19
変更した処理方式でプロトタイピング 「特定の範囲の情報だけを取得する」ロジックを試作して計測。 1回の実行が0.3秒で実行できることを確認できました。 メンテナンスの都合上、本開発ではGo言語を採用することになりましたが、 エラー処理を入れても1秒以下で処理できる方式で運用中。 高速化によって処理方式に選択肢が生まれ、 運用方式が変化した! と言えるのではないかと思います。 DevOps &
QAエンジニアLT大会 Vol.1 16 / 19
環境的な後押しも大きな要因 こんなにうまくいったのは、環境に寄るところも大きかったと思います。 1. 運用と開発の両方に関わっているお客様だったため、両方の課題を把握されていた 2. ソフトウェアの規模が数千行程度で、細かいチャレンジがしやすかった 3. 私たちも、運用・開発と垣根を作らず、提案ができる体制で臨めた DevOps &
QAエンジニアLT大会 Vol.1 17 / 19
環境的な後押しも大きな要因 こんなにうまくいったのは、環境に寄るところも大きかったと思います。 1. 運用と開発の両方に関わっているお客様だったため、両方の課題を把握されていた 2. ソフトウェアの規模が数千行程度で、細かいチャレンジがしやすかった 3. 私たちも、運用・開発と垣根を作らず、提案ができる体制で臨めた 運用と開発を一緒に話せる環境って大事と実感しました。 DevOps
& QAエンジニアLT大会 Vol.1 17 / 19
まとめ 1. PHPで書かれたバッチ処理を25倍高速化しました 2. さらにC++での移植して7倍高速化しました 3. C++で最適化をくりかえし更に3倍弱高速化しました 4. 500倍以上の高速化によって処理内容への違う考え方が生まれ、運用の仕方も変えられました。 DevOps
& QAエンジニアLT大会 Vol.1 18 / 19
まとめ 1. PHPで書かれたバッチ処理を25倍高速化しました 2. さらにC++での移植して7倍高速化しました 3. C++で最適化をくりかえし更に3倍弱高速化しました 4. 500倍以上の高速化によって処理内容への違う考え方が生まれ、運用の仕方も変えられました。 性能改善で運用にも貢献できるかもしれない!
DevOps & QAエンジニアLT大会 Vol.1 18 / 19
最後までご覽いただき、ありがとうございました。 このスライドは で作成しました。 DevOps & QAエンジニアLT大会 Vol.1 19 / 19