Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How we made a financial system using Cats Effect, FS2, and doobie in FOLIO

Yuki Ishikawa
September 25, 2020

How we made a financial system using Cats Effect, FS2, and doobie in FOLIO

Yuki Ishikawa

September 25, 2020
Tweet

More Decks by Yuki Ishikawa

Other Decks in Programming

Transcript

  1. ABOUT ME 2 ⽯川裕樹 (Yuki Ishikawa) @rider_yi - 2019年1⽉⼊社 -

    株とか全然詳しくなかったけど、フィンテックに興味が あり⼊社。FOLIOに⼊ってから投資を始めた - 証券基盤部で証券システムの裏側を作ってる - Scala歴6年くらい
  2. 従来の主な使⽤ライブラリ 8 Finagle -Twitter社が作ったRPCシステム Finatra -Finagle上にアプリケーションを構築するためのフレームワーク -HTTP, Thriftサーバーが簡単に書ける -guiceベースのランタイムDI -DIだけ使ったバッチも書ける

    (com.twitter.inject.App) Quill -DSLからコンパイル時にクエリを⽣成してくれるDBアクセスライブラリ -finagle-mysql上で動かすことができる (JDBCやCassandra版などもある)
  3. ⼀般的なFOLIOのバッチ 21 - 計算量が少ないバッチは全件取得して計算しても問題なし Step 1 Step 2 Step 3

    Step 4 処理対象 データ取得 処理済み データ除外 計算 計算結果 永続化 DB 全件書込 全件取得 DB STEP① STEP② STEP③ STEP④
  4. 計算量の多いバッチでやりたいこと - 計算量が多いバッチはチャンク毎に処理させたい - Functionalに書けるソリューションとしてストリームを採⽤したくなった  ※quillでも書けるけど前述の理由でquillはやめたかった Step 1 Step 2

    Step 3 Step 4 処理対象 データ取得 処理済み データ除外 計算 計算結果 永続化 DB N件書込 N件取得 DB STEP① STEP② STEP③ STEP④ 全件完了するまでN件の処理をループ
  5. FS2 vs Akka Streams 25 FS2 - Pullベースなので拡張しやすい - 処理効率的にはPushベースのストリームに劣る(monix-reactiveのドキュメントによると)

    - Cats Effectに依存している Akka Streams - Reactive streams - Pushベース (バックプレッシャー) - AkkaのActorフレームワークに依存している
  6. 28 新プロジェクト - 開発メンバー: 10⼈以上 - 開発期間: 9ヶ⽉ - FOLIOのロボアド基盤を刷新する巨⼤プロジェクト

    複雑なドメインと戦いながらロボアド基盤をリプレースするときにした⼯夫 - Inside Fintech Meetup