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
How we made a financial system using Cats Effec...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuki Ishikawa
September 25, 2020
Programming
6.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How we made a financial system using Cats Effect, FS2, and doobie in FOLIO
Yuki Ishikawa
September 25, 2020
More Decks by Yuki Ishikawa
See All by Yuki Ishikawa
Dependency Injection in Scala
rideryi
0
720
Other Decks in Programming
See All in Programming
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
230
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
4.2k
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
150
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Railsバージョンを4倍にした話
optim
0
520
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
AWSに止められる覚悟してますか?
morizo_1984
2
540
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1k
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
290
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
720
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
350
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
My Coaching Mixtape
mlcsv
0
360
Exploring anti-patterns in Rails
aemeredith
4
540
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
630
Embracing the Ebb and Flow
colly
88
5.2k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Prompt Engineering for Job Search
mfonobong
0
530
Tell your own story through comics
letsgokoyo
1
1.1k
Transcript
1 FOLIOでCats Effect, FS2, doobieを使って 証券システム作ってみた 2020/09/25 Scala.tokyo @rider_yi Copyright
© 2020 FOLIO Co., Ltd. All Rights Reserved.
ABOUT ME 2 ⽯川裕樹 (Yuki Ishikawa) @rider_yi - 2019年1⽉⼊社 -
株とか全然詳しくなかったけど、フィンテックに興味が あり⼊社。FOLIOに⼊ってから投資を始めた - 証券基盤部で証券システムの裏側を作ってる - Scala歴6年くらい
FOLIO?
FOLIOָ䲿⣘ׅ4אך؟٦ؽأ ػحءـ 麊欽 ،ؙذ؍ـ 麊欽 剑⡚䫎项겘 ⡚ 剑⡚䫎项겘 넝
5 -証券基盤部の技術スタック -Cats Effectの世界に移⾏した3つの理由 -新プロジェクトでCats Effect, FS2, doobieを導⼊した話 今⽇話すこと
証券基盤部の技術スタック 6
7 証券基盤部の技術スタック - 100% Scala - マイクロサービス - (最近まで)全てFinagleで開発
従来の主な使⽤ライブラリ 8 Finagle -Twitter社が作ったRPCシステム Finatra -Finagle上にアプリケーションを構築するためのフレームワーク -HTTP, Thriftサーバーが簡単に書ける -guiceベースのランタイムDI -DIだけ使ったバッチも書ける
(com.twitter.inject.App) Quill -DSLからコンパイル時にクエリを⽣成してくれるDBアクセスライブラリ -finagle-mysql上で動かすことができる (JDBCやCassandra版などもある)
Cats / Cats Effect -ScalaにFunctor,Monadなどを持ち込むためのライブラリ -Cats EffectはCatsのMonadErrorから⽣やしたIOを提供するライブラリ FS2 -Cats系のStreaming I/Oライブラリ
doobie - Cats系のJDBC Wrapper - ⽂字列補間⼦でSQLをそのまま書くタイプ 現在の主な使⽤ライブラリ 9
Cats Effectの世界に移⾏した 3つの理由 10
11 Quillの代わりにdoobieを使いたかった 理由①
DSLで書くのがつらかった 12 - 証券システムでは、帳票出⼒などで複雑なSQLを実⾏する必要がある - 実⾏したい複雑なSQLを⽣成させるDSLを書くのが難しく、時間を溶かす ⼈が多かった
QuillのシンプルなDSLならワークするが… 13 Compile
複雑なSQLはDSLで更に難読化する 14 ※このDSLはまだ簡単な⽅です
quill-finagle-mysqlの問題 15 BATCH INSERTに対応していないため、⼤量データの書き込みに時 間がかかる(JDBC版なら問題なし) quill-finagle-mysql: wrong batch insert action
behaviour #747 - getquill / quill
doobieの選定理由 16 - SQLがそのまま書ける - ⾃分が前職で使っていたので結構詳しかった - 証券基盤部は強いScalaエンジニアが多く、Catsに詳しい メンバーも何⼈かいるので⼊れても問題ないと判断した -
我々のシステムはほとんどバッチなので、Non-blocking I/OではなくJDBCで⼗分だった
17 doobieの簡単なサンプル
18 doobieの簡単なサンプル
19 doobieの簡単なサンプル
20 バッチをストリーム化したかった 理由②
⼀般的なFOLIOのバッチ 21 - 計算量が少ないバッチは全件取得して計算しても問題なし Step 1 Step 2 Step 3
Step 4 処理対象 データ取得 処理済み データ除外 計算 計算結果 永続化 DB 全件書込 全件取得 DB STEP① STEP② STEP③ STEP④
計算量の多いバッチでやりたいこと - 計算量が多いバッチはチャンク毎に処理させたい - Functionalに書けるソリューションとしてストリームを採⽤したくなった ※quillでも書けるけど前述の理由でquillはやめたかった Step 1 Step 2
Step 3 Step 4 処理対象 データ取得 処理済み データ除外 計算 計算結果 永続化 DB N件書込 N件取得 DB STEP① STEP② STEP③ STEP④ 全件完了するまでN件の処理をループ
ストリーム処理ライブラリ 23 doobieがFS2をネイティブサポートしているため、 DBから分割取得するストリームが簡単に作れる!
doobieはFS2をネイティブサポート 24 Query0#streamでDBから⼀度にN件fetchして、 メモリに蓄えて1件ずつ下流に流すFS2のfs2.Streamが得られる - streamはstreamWithChunkSize(512)のエイリアス - JDBCのResultSetから⼀度に何件取得するか
FS2 vs Akka Streams 25 FS2 - Pullベースなので拡張しやすい - 処理効率的にはPushベースのストリームに劣る(monix-reactiveのドキュメントによると)
- Cats Effectに依存している Akka Streams - Reactive streams - Pushベース (バックプレッシャー) - AkkaのActorフレームワークに依存している
26 理由③ この話はまた別の機会に RPCを使わなくなったため、 Finagleを使い続ける理由があまり無かった
新プロジェクトで Cats Effect, FS2, doobie を導⼊した話 27
28 新プロジェクト - 開発メンバー: 10⼈以上 - 開発期間: 9ヶ⽉ - FOLIOのロボアド基盤を刷新する巨⼤プロジェクト
複雑なドメインと戦いながらロボアド基盤をリプレースするときにした⼯夫 - Inside Fintech Meetup
29 ⽴ち上げメンバーでどう書くか相談した - RPCが減ったのでFinagle依存を減らしてCatsエコシステムに移⾏するこ とで同意が取れた - Effect WrapperはCats EffectのIOに決定 ⇨
公式ドキュメントが充実してるから ⇨ 他のWrapperを採⽤したとしてもCats EffectのType Classの理解は必要
30 課題 - ラーニングカーブをどう抑えるか - どうやってメンバーにライブラリを布教するか - 強いエンジニアが多いとはいえ、全員がCatsやFS2に詳しいわけではない - 皆で同じように書けるコーディングスタイルを決めたい
31 ラーニングカーブを抑えるためにルールを決めた - Tagless-Finalは使わない - DI・バッチの基底クラス等はFinatraを継続して使う ⇨いずれ変えるけど今じゃなくて良いという判断 ⇨リソース開放がイベントハンドラー⽅式なのでcatsのResourceと相性が悪い
32 どうチームに布教したか 勝⼿に浸透していったのであまり努⼒してない…
33 Aさん「⼟⽇でCats完全理解した」 Bさん「FS2の完全理解doc書いたよ」 みんな強かった
布教のためにやったこと(強いて⾔えば…) 34 - ⽴ち上げメンバーで開発の⼟台と最初の⾒本となるバッチを作った - 詳しい⼈に質問したり「ペアプロしませんか」を⾔える雰囲気を⼤事に した
35 FS2でのバッチの書き⽅を決めた 各ステップをStreamまたはPipeを返すクラスに分割
36 FS2でのバッチの書き⽅を決めた 各ステップをthroughで連結してバッチを構築
37 移⾏してよかったか よかった! - エコシステムを⼀気に変えたので最初は開発スピードが落ちたが、課題 はしっかり解決されたし、徐々にスピードも取り戻せた。 - 今後も使い続けたい・全てのサービスをCats Effect, FS2,
doobieで置き 換えたいというフィードバックがあり嬉しい
新プロジェクトは 今年7⽉14⽇に無事リリース 38
39 FOLIOはCats Effect, Doobie, FS2で動いてます
(おまけ) doobieからRob Norrisさん(作者)が 離れてしまった話 40
まだdoobieの利⽤者は多いと思っている 41 Scalar 2020 whiteboard voting
現状はわりと楽観的 42 - 今のところ不満なく使えている - ScalaやCatsのアップデートに追従できなくなったら同じようなコンセプ トの別ライブラリに移⾏しようねという話をしてる
作者はSkunkの開発をしている 43 今からPostgreSQLで使うなら Skunkのほうが良さそう https://github.com/tpolecat/skunk
Scalaエンジニア募集中! 44
※開発⾔語はScalaですが、⼊ってから覚えた⼈もたくさん居ます! お気軽に採⽤ページからカジュアル⾯談のお申し込みを! https://corp.folio-sec.com/thespecialone/jobs/
THANK YOU