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
AkkaStreamsをちゃんと理解して高速化した話.pdf
Search
nhiguchi
October 19, 2021
Programming
0
440
AkkaStreamsをちゃんと理解して高速化した話.pdf
nhiguchi
October 19, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.5k
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
110
Windows on Ryzen and I
seosoft
0
410
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
290
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
420
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
160
ローカルで稼働するAI エージェントを超えて / beyond-local-ai-agents
gawa
0
130
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
4
2.1k
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
7
3.2k
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
170
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
460
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
610
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
Scaling GitHub
holman
464
140k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Why Our Code Smells
bkeepers
PRO
340
58k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
780
Abbi's Birthday
coloredviolet
2
5.9k
Odyssey Design
rkendrick25
PRO
2
560
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
490
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Transcript
AkkaStreamsを ちゃんと理解して高速化した話 2021/10/11 1
自己紹介 今月から悲願のテレビCM放映中! 求人検索エンジン 樋口直人 エンジニア Scala AWS 2
今日話すこと - AkkaStreamsを使おうとしたきっかけ - AkkaStreamsの構成 - AkkaStreamsで速度が出ずにハマった点とどうやって改善したか - AkkaStreamsを使って良かった点 3
AkkaStreamsを使おうとしたきっかけ - プロダクト開発のメイン言語がScala - 大量の求人に対して様々な加工を行うのでストリーム系フレームワークを使いたい 4 加工 大量の求人 加工 加工
保存
AkkaStreamsの構成 5 Source Sink Flow Flow Flow
AkkaStreamsで速度が出ずにハマった点 mapAsyncに設定した並列度で処理が並列化されず全体として速度が遅い 6 Source Sink Flow Flow Flow 32並列を指定しても、実際は 5並列以下で動作している。
CPUはとても余っているのになぜ?
改善点(1. httpClientの変更) 7 Source Sink Flow Flow Flow httpClientであるsttpのバックエンドにOkHttpを使用していたが、Featureが返ってきてたもののどうもブロッ クキングされていたようだ。
バックエンドをAsyncHttpClientに変更することで大きく改善した。
改善点(2. dispatcherに充分なスレッドを割り当て) 8 Source Sink Flow Flow Flow dispatcher-1 dispatcher-2
dispatcher-3 Flowごとにactorのdispatcher(fork-join-executor)を分けていたが、kamonでスレッド数を確認すると設定値 が小さく足りていなかったようだ。 充分な量のスレッドが生成されるようにした
改善点(3.非同期境界に充分な量のバッファを割り当て) 9 Source Sink Flow Flow Flow 各Flowに.asyncをつけると非同期境界ができ、間にバッファができ、 Actorを分離できる。 ただし、バッファのデフォルト値が
16なので、それ以上の並列度が必要な場合は設定値を上げる。 buffer 16 buffer 16
改善点(4.Flow内の要素の処理順序を無視する) 10 mapAsyncを使用すると要素の処理順を保持するため、時間のかかる要素があると Flow内で待ちが発生し てしまう。 mapAsyncUnorderdを用いると順序を無視して処理が終わった要素から後ろに流れるようになる。 1 2 3 4
5 6 7 8 7 8 1 2 5 6 3 4
AkkaStreamsを使って良かった点 - 自動でバックプレッシャーが走りFlowの制御をしてくれるので、実装したり意識した りする箇所がかなり減る。 - Graphをそのままコード上で表現できるので直感的。 11
AkkaStreamsを用いて、設定した並列度通りに動作する高速で安定したストリーム環境 が作れました! AkkaStreamsの思想としてEasyよりもSimpleを目指しているようなので、慣れるまでは 少し大変でしたが、とても便利で使いやすいです! 12 完