SlideShare a Scribd company logo
Submit Search
Upload
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
Report
Kazuki Negoro
TIS Inc.
Follow
•
33 likes
•
23,953 views
1
of
59
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
•
33 likes
•
23,953 views
Download Now
Download to read offline
Report
Technology
2016/01/30 @negokaz http://scalamatsuri.org/
Read more
Kazuki Negoro
TIS Inc.
Follow
Recommended
SpringBootTest入門
Yahoo!デベロッパーネットワーク
13K views
•
43 slides
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
57.7K views
•
27 slides
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
15K views
•
28 slides
Zabbix監視運用業務の自動化事例
OSSラボ株式会社
9.4K views
•
48 slides
サーバPUSHざっくりまとめ
Yasuhiro Mawarimichi
39.5K views
•
57 slides
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
99.4K views
•
107 slides
More Related Content
What's hot
AWSのログ管理ベストプラクティス
Akihiro Kuwano
77.2K views
•
57 slides
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
22.7K views
•
47 slides
GitOpsでKubernetesのManifest管理
Shinya Sasaki
6K views
•
32 slides
TDD のこころ
Takuto Wada
12.7K views
•
52 slides
C言語なWebSocketの遊び方。
Masahiko Hashimoto
9.9K views
•
14 slides
トランザクションの設計と進化
Kumazaki Hiroki
71.4K views
•
61 slides
What's hot
(20)
AWSのログ管理ベストプラクティス
Akihiro Kuwano
•
77.2K views
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
•
22.7K views
GitOpsでKubernetesのManifest管理
Shinya Sasaki
•
6K views
TDD のこころ
Takuto Wada
•
12.7K views
C言語なWebSocketの遊び方。
Masahiko Hashimoto
•
9.9K views
トランザクションの設計と進化
Kumazaki Hiroki
•
71.4K views
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Toshiaki Maki
•
5.2K views
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
•
65.2K views
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
•
70.6K views
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
NTT DATA Technology & Innovation
•
2.5K views
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
NTT DATA Technology & Innovation
•
1.1K views
Twitterのsnowflakeについて
moai kids
•
24.8K views
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
•
58.1K views
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
•
50.1K views
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
•
10.9K views
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
•
3.8K views
分散システムについて語らせてくれ
Kumazaki Hiroki
•
119.4K views
雑なMySQLパフォーマンスチューニング
yoku0825
•
54.9K views
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
•
3.6K views
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Koichiro Matsuoka
•
7.3K views
Viewers also liked
How Scala code is expressed in the JVM
Koichi Sakata
8.3K views
•
89 slides
From Microliths To Microsystems
Jonas Bonér
6.4K views
•
84 slides
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
Jonas Bonér
8.6K views
•
104 slides
Pragmatic Real-World Scala (short version)
Jonas Bonér
72.8K views
•
108 slides
Reactive Microsystems: The Evolution of Microservices at Scale
Jonas Bonér
3K views
•
75 slides
How Events Are Reshaping Modern Systems
Jonas Bonér
1.8K views
•
165 slides
Viewers also liked
(13)
How Scala code is expressed in the JVM
Koichi Sakata
•
8.3K views
From Microliths To Microsystems
Jonas Bonér
•
6.4K views
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
Jonas Bonér
•
8.6K views
Pragmatic Real-World Scala (short version)
Jonas Bonér
•
72.8K views
Reactive Microsystems: The Evolution of Microservices at Scale
Jonas Bonér
•
3K views
How Events Are Reshaping Modern Systems
Jonas Bonér
•
1.8K views
Scala Refactoring for Fun and Profit (Japanese subtitles)
Tomer Gabel
•
6.6K views
Contributing to Scala OSS from East Asia #ScalaMatsuri
Kazuhiro Sera
•
10.9K views
Why Reactive Matters #ScalaMatsuri
Yuta Okamoto
•
15.5K views
ScalaMatsuri 2016
Yoshitaka Fujii
•
7.1K views
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
•
14.2K views
Zen of Akka
Konrad Malawski
•
29.4K views
Building Reactive Systems with Akka (in Java 8 or Scala)
Jonas Bonér
•
28.1K views
Similar to バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
Mc web controllerご紹介資料2017.03.13
MPN Japan
443 views
•
108 slides
AWSオンリーで実現するIoTクラウド基盤
Godai Nakamura
396 views
•
105 slides
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
11.5K views
•
104 slides
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
Insight Technology, Inc.
310 views
•
22 slides
Diskless Compute Nodeを使ったImmutable OpenStack
Yuki Yamashita
633 views
•
55 slides
Akkaを使ったスケーラブルなLINE BOT
Takashi Sugimoto
2.8K views
•
18 slides
Similar to バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
(20)
Mc web controllerご紹介資料2017.03.13
MPN Japan
•
443 views
AWSオンリーで実現するIoTクラウド基盤
Godai Nakamura
•
396 views
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
•
11.5K views
[db tech showcase Tokyo 2017] C25: 世界最速のAnalytic DBがHadoopとタッグを組んだ! ~スケールアウト検...
Insight Technology, Inc.
•
310 views
Diskless Compute Nodeを使ったImmutable OpenStack
Yuki Yamashita
•
633 views
Akkaを使ったスケーラブルなLINE BOT
Takashi Sugimoto
•
2.8K views
Yahoo! JAPANが実践するOpenStackと大規模環境でのコンテナ利用 #devsumi
Yahoo!デベロッパーネットワーク
•
9.5K views
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
Daisuke Ikeda
•
2.2K views
20180220 AWS Black Belt Online Seminar - Amazon Container Services
Amazon Web Services Japan
•
29.3K views
Python / R で使うSAS Viya
SAS Institute Japan
•
23.9K views
バッチソリューションAzarea cluster 2016
AzareaCluster
•
581 views
HANAのハナシの基本のき
Koji Shinkubo
•
2.5K views
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
Insight Technology, Inc.
•
273 views
Contrail deploy by Juju/MAAS
Ikuo Kumagai
•
830 views
弊社IoT事例とAlexaSkil開発レシピ
Takashi Kozu
•
341 views
Docker国内外本番環境サービス事例のご紹介
ThinkIT_impress
•
4.4K views
知って得する!パブリッククラウドをオンプレミスのように使う裏ワザ
エクイニクス・ジャパン
•
1.5K views
クラウドファースト時代の最適なシステム配置について
エクイニクス・ジャパン
•
1.4K views
Enterpriseapi20160210
Shinichiro Takezaki
•
4.9K views
OpenStack環境の継続的インテグレーション
エクイニクス・ジャパン
•
931 views
Recently uploaded
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
208 views
•
33 slides
概念モデリングワークショップ 設計編
Knowledge & Experience
10 views
•
37 slides
JJUG CCC.pptx
Kanta Sasaki
6 views
•
14 slides
DLゼミ: MobileOne: An Improved One millisecond Mobile Backbone
harmonylab
41 views
•
30 slides
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
6 views
•
34 slides
テストコードってすごい.pptx
cistb220msudou
72 views
•
16 slides
Recently uploaded
(10)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
208 views
概念モデリングワークショップ 設計編
Knowledge & Experience
•
10 views
JJUG CCC.pptx
Kanta Sasaki
•
6 views
DLゼミ: MobileOne: An Improved One millisecond Mobile Backbone
harmonylab
•
41 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
•
6 views
テストコードってすごい.pptx
cistb220msudou
•
72 views
概念モデリングワークショップ 基礎編
Knowledge & Experience
•
19 views
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
157 views
01Booster Studio ご紹介資料
ssusere7a2172
•
209 views
さくらのひやおろし2023
法林浩之
•
76 views
バッチを Akka Streams で再実装したら100倍速くなった話 #ScalaMatsuri
1.
バッチを Akka Stream
で再実装したら100倍速くなった話
2.
Copyright © 2016
TIS Inc. All rights reserved. 根来 和輝 TIS 株式会社 生産技術R&D室 ‣ ‣ ‣
3.
Copyright © 2016
TIS Inc. All rights reserved. 今日話すこと Akka Streams を使ってバッチの処理速度を100倍にした事例
4.
Copyright © 2016
TIS Inc. All rights reserved. パフォーマンスに問題を抱えた本番運用されているバッチ処理
5.
Copyright © 2016
TIS Inc. All rights reserved. バッチ処理 毎日夜間に、その日の取引情報をCSVファイルに書き出す
6.
Copyright © 2016
TIS Inc. All rights reserved. アーキテクチャ Active Record
7.
Copyright © 2016
TIS Inc. All rights reserved. DBから一括で時刻順の取引情報を取得し、一行ずつ処理し、 一行ずつファイルへ書き出す
8.
Copyright © 2016
TIS Inc. All rights reserved. 問題は何か 処理が終わるのが遅い。応急処置でなんとか凌いでいる。
9.
Copyright © 2016
TIS Inc. All rights reserved. 遅い原因はなにか?
10.
Copyright © 2016
TIS Inc. All rights reserved. 調査環境として仮想マシンを構築。 本番環境と同じリソースを割り当て。 ‣ ‣ ‣ ‣
11.
Copyright © 2016
TIS Inc. All rights reserved. 調査のシナリオでは100万件のデータを用意
12.
Copyright © 2016
TIS Inc. All rights reserved. 結果、処理速度は毎秒4件
13.
Copyright © 2016
TIS Inc. All rights reserved. 100万件処理するのに3日
14.
Copyright © 2016
TIS Inc. All rights reserved. ボトルネックはどこか? スワップ領域が大量に消費 0 1000 2000 3000 4000 5000 6000 0:00 0:20 0:40 1:00 1:20 1:40 2:00 2:20 2:40 - - Memory - - Swap ‣
15.
Copyright © 2016
TIS Inc. All rights reserved. 処理のボトルネック
16.
Copyright © 2016
TIS Inc. All rights reserved. メモリを潤沢に用意すれば問題ないのか?
17.
Copyright © 2016
TIS Inc. All rights reserved. ‣ ‣ ‣ ‣
18.
Copyright © 2016
TIS Inc. All rights reserved. 調査のシナリオでは100万件のデータを処理
19.
Copyright © 2016
TIS Inc. All rights reserved. 結果、処理速度は毎秒100件
20.
Copyright © 2016
TIS Inc. All rights reserved. 100万件処理するのに3時間
21.
Copyright © 2016
TIS Inc. All rights reserved. ボトルネックは解消されたのか? メモリ不足は解消 0 1000 2000 3000 4000 5000 6000 7000 0:00 0:05 0:10 0:15 0:20 0:25 - - Memory - - Swap ‣
22.
Copyright © 2016
TIS Inc. All rights reserved. 使われているCPUコアは1つのみ ‣
23.
Copyright © 2016
TIS Inc. All rights reserved. 第2のボトルネック
24.
Copyright © 2016
TIS Inc. All rights reserved. 少しずつデータを取得。処理を並列で行う。 ただし、取得したデータの並びは維持。 ‣
25.
Copyright © 2016
TIS Inc. All rights reserved. DBから時刻順のデータを少しずつ取得。並列で処理。 取得した順序で書き出し。
26.
Copyright © 2016
TIS Inc. All rights reserved. ここに Akka Streams が使える
27.
Copyright © 2016
TIS Inc. All rights reserved. Akka Streams は Reactive Streams の Akka を使った実装 ‣ ‣
28.
Copyright © 2016
TIS Inc. All rights reserved. アーキテクチャ Streams
29.
Copyright © 2016
TIS Inc. All rights reserved. Reactive Streams の Publisher を通じてデータを ストリーミングするAPIを提供 Streams
30.
Copyright © 2016
TIS Inc. All rights reserved. 同期的な入出力と並列処理 Streams
31.
Copyright © 2016
TIS Inc. All rights reserved. 既存のバッチと同じ結果が得られるように実装。 キャッシュも既存のものと同様に実装。
32.
Copyright © 2016
TIS Inc. All rights reserved. 実装の構成要素 ‣ ‣ ‣
33.
Copyright © 2016
TIS Inc. All rights reserved. 実装 ※ 説明用に簡略化したコード
34.
Copyright © 2016
TIS Inc. All rights reserved. 入力、処理、出力、実行
35.
Copyright © 2016
TIS Inc. All rights reserved.
36.
Copyright © 2016
TIS Inc. All rights reserved.
37.
Copyright © 2016
TIS Inc. All rights reserved. この部分の処理は並列に実行される
38.
Copyright © 2016
TIS Inc. All rights reserved.
39.
Copyright © 2016
TIS Inc. All rights reserved.
40.
Copyright © 2016
TIS Inc. All rights reserved. 調査環境として仮想マシンを構築。 本番環境と同じリソースを割り当て。 ‣ ‣ ‣ ‣
41.
Copyright © 2016
TIS Inc. All rights reserved. 調査のシナリオでは100万件のデータを処理
42.
Copyright © 2016
TIS Inc. All rights reserved. 結果、処理速度は毎秒1,180件
43.
Copyright © 2016
TIS Inc. All rights reserved. 100万件処理するのに14分
44.
Copyright © 2016
TIS Inc. All rights reserved. ボトルネックは解消されたのか? メモリ不足は発生していない 0 200 400 600 800 1000 1200 1400 1600 1800 2000 0:00 0:00 0:01 0:02 0:03 0:04 0:05 0:05 0:06 0:07 0:08 0:09 - - Memory - - Swap ‣
45.
Copyright © 2016
TIS Inc. All rights reserved. CPUの全コアが使われている ‣
46.
Copyright © 2016
TIS Inc. All rights reserved. メモリがボトルネックになっていた場合と比較
47.
Copyright © 2016
TIS Inc. All rights reserved. CPUがボトルネックになっていた場合と比較
48.
Copyright © 2016
TIS Inc. All rights reserved.
49.
バッチを Akka Streams
で再実装したら295倍速くなった話
50.
Copyright © 2016
TIS Inc. All rights reserved. ハードウェアを変更せずに大幅な性能改善できた。 experimental なので本番環境への適用は注意。
51.
Copyright © 2016
TIS Inc. All rights reserved.
52.
Copyright © 2016
TIS Inc. All rights reserved. ストリームなのにメモリ不足。Slick の streaming API を使っ てデータを取得しているのに一括で取得されてしまう。
53.
Copyright © 2016
TIS Inc. All rights reserved. MySQL固有の問題 解決方法: enableStreamingResults() を設定
54.
Copyright © 2016
TIS Inc. All rights reserved. 非同期キャッシュ - spray-caching 非同期ノンブロッキングでスレッドセーフなキャッシュ
55.
Copyright © 2016
TIS Inc. All rights reserved.
56.
Copyright © 2016
TIS Inc. All rights reserved.
57.
Copyright © 2016
TIS Inc. All rights reserved. 2016年2月2日 7:00PM-10:30PM、場所は西新宿
58.
Copyright © 2016
TIS Inc. All rights reserved. 2016年2月2日 7:00PM-10:30PM、場所は西新宿
59.
THANK YOU