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
Railsでサーバレスなバッチ処理 / Rails Batch Serverless
Search
Daishi Kakinoki
June 19, 2019
Programming
1
2k
Railsでサーバレスなバッチ処理 / Rails Batch Serverless
https://shuuu-mai.connpass.com/event/132249/
の登壇時の資料です。
Daishi Kakinoki
June 19, 2019
Tweet
Share
More Decks by Daishi Kakinoki
See All by Daishi Kakinoki
Spacemarket Connect Custom Account
dkakinoki
0
260
SSRした動的コンテンツをFastlyにキャッシュする
dkakinoki
0
1.2k
CtoCマーケットプレイスを成長させる オンライン決済の仕組み
dkakinoki
1
860
[Stripe] ConnectのManual Payoutsを利用して 任意のタイミングで売上を入金する
dkakinoki
0
3.4k
Other Decks in Programming
See All in Programming
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
850
その面倒な作業、「Dart」にやらせませんか? Flutter開発者のための業務効率化
yordgenome03
1
140
NIKKEI Tech Talk#38
cipepser
0
120
Six and a half ridiculous things to do with Quarkus
hollycummins
0
210
Writing Better Go: Lessons from 10 Code Reviews
konradreiche
3
5.7k
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
11
7k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
390
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
780
CSC305 Lecture 08
javiergs
PRO
0
270
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
770
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
16
6.6k
AI Agent 時代的開發者生存指南
eddie
4
2.1k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
Building an army of robots
kneath
306
46k
Designing Experiences People Love
moore
142
24k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
How STYLIGHT went responsive
nonsquared
100
5.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Writing Fast Ruby
sferik
629
62k
KATA
mclloyd
PRO
32
15k
Transcript
Railsでサーバレスなバッチ処理 2019/06/19 kakinoki AWS Batch × Aurora Serverlessを使った事例
2 誰? • 柿木 太志(@d_kakinoki) • SPACEMARKET所属 • Engineering Manager
• サーバサイドがメイン
3 3
写真
写真
写真
7 7
8 Railsでサーバレスなバッチ処理
9 背景 • 検索用のスコアデータを生成するバッチ処理を作成した時の話 • 「検索スコアの元になるデータ(raw data)」と「検索スコアのデータ」を生成して 登録したい • ActiveRecord使いたい
• 肥大化するインフラのコストをなるべく抑えたい
10 要件 • バッチの実行回数はそれほど多くない → 常時サーバを起動しない構成にしたい • 初期のモノリスのAPIにrakeタスクが多くあり、肥大化している → シンプルに切り出したい
• 3つのタスクがあり、2つめ以降は前のタスクが完了している必要がある →ジョブチェーンする アプリケーション
11 要件 • raw dataはバッチ処理や分析の時のみ利用したく、その他は不要 • とはいえ、ファイルだとデータ損失が不安だし分析もしづらいので、データベー ス使いたい → 必要に応じて利用可能なデータベース
データ
12 構成
13 構成 この点線の中からはみ出ないように 文字、写真を配置してください
14 処理の流れ
15 処理の流れ① この点線の中からはみ出ないように 文字、写真を配置してください ① cronでjobの起動
16 処理の流れ② この点線の中からはみ出ないように 文字、写真を配置してください ② インスタンスの起動
17 処理の流れ③ この点線の中からはみ出ないように 文字、写真を配置してください ③ イメージの取得
18 処理の流れ④ この点線の中からはみ出ないように 文字、写真を配置してください ④ ジョブ(rake task)の実行 / Aurora Servelessの起動
19 処理の流れ⑤ この点線の中からはみ出ないように 文字、写真を配置してください ⑤ ジョブの実行結果をトリガする
20 処理の流れ⑥ この点線の中からはみ出ないように 文字、写真を配置してください ⑥ 次のjobを起動(繰り返し)
21 処理の流れ⑦ この点線の中からはみ出ないように 文字、写真を配置してください ⑦ 各インスタンスの削除 / Aurora Serverlessの停止
22 ジョブが失敗した場合 この点線の中からはみ出ないように 文字、写真を配置してください ジョブの実行結果をトリガして、メール 通知
23 設定周り
24 基本設定 AWS 公式ガイドや各記事に詳細があるので割愛
25 AWS BatchのCron起動
26 AWS Batchのジョブチェーン
27 Aurora Serverlessの起動時間を考慮 • rakeタスクが実行されるとDB接続が発生し、DBが起動する。 • タイムアウト時間が短いとrake タスクが失敗するのでdatabase.ymlのtimeout を少し長めに設定するようにした。
28 InnoDBインデックスの最大キー長を考慮 • 絵文字に対応するため文字コードは utf8mb4を使用している。 • utf8mb4の場合は1文字あたり最大で 4バイト使用する。 • 単一カラムインデックスの最大キー長は
767バイトまで作成可能。 • RDS(MySQL)やAuroraでは3072バイトまで拡張可能だが、 Aurora Serverlessでは拡張に必要なパラ メータのinnodb_large_prefixを有効にできない。 • 結果的にRailsデフォルトのstring(varchar)255文字でカラムを作成しようとすると、 255 x 4 = 1020(>767)でカラム作成時にエラーになる。 • stringでカラムを作る時には文字数をきちんと絞る必要があり、今回は要件的に問題なかった。
29 コスト比較
30 ざっくりとした比較 従来 (常時起動) 今回 (実績) データベース (例)Aurora t3.small: 約5,000円/month
t3.medium: 約10,000円/month 約1800円/month( 約½ ~ ¼ ) アプリケーション (バッチ) (例) c5.large: 約8,500円 約1500円/month( ⅕ 以下 ) ※ インスタンス利用費のみの比較 ※ AWS Batchのコンピューティング環境は optimalにすると、C、M、Rいずれかのタイプが 使われる (インスタンスタイプを指定することも可能 ) ※ ちなみに、AWS Batchの利用自体は無料
31 まとめ
32 まとめ • 今回のテーマが「Rails × ◦◦」ということだったが、ほぼ◦◦部分のサーバレスな バッチ処理の話をした。 • AWS Batch
× Aurora Serverless で構築した。 • コストも安価に構築できた。
33 告知:勉強会やります! https://event.spacemarket.com/events/spacemarket_meetup ※ または、connpassで「スペースマーケット」で検索してください。 7/4(木) 19:30 ~ @新宿
34 当日どんな話が聞けるのか?
ご静聴ありがとうございました。