Slide 1

Slide 1 text

Rust on Lambda 大きめCSV生成 コケたら立ち上がるまでが技術者 “ “ フルカイテン株式会社 横田

Slide 2

Slide 2 text

Atsushi Yokota バックエンドエンジニア 2 ● 2020年10月 フルカイテン入社 ● FULL KAITEN V3の新規開発に携わり、Rustによる GraphQLサーバーの構築やアーキテクチャーの設計を 行う ● 現在は、データ基盤を担当し、ビックデータ処理を PySparkで構築、スクラムマスターも兼任している 自己紹介

Slide 3

Slide 3 text

3 在庫を利益に 変えるクラウド 今ある在庫で 売上・利益を最大化! データや帳票の 集計は不要! 運用定着まで 徹底サポート! EC・店舗・倉庫、 全ての在庫をAIで予測・分析し、 商品力をワンクリックで見える化。 とは

Slide 4

Slide 4 text

1. アーキテクチャー概要 2. CSV生成フロー 3. Rust on Lambda 4. CSV生成部分での工夫 Agenda

Slide 5

Slide 5 text

5 アーキテクチャー概要 Frontend ・Next.js ・React etc データ変換 Athena Aurora PostgreSQL Redshift Fargate Python Step Functions SQS Lambda ETL 集計処理 データ基盤 Fargate Step Functions S3 Glue GraphQL APIサーバー Rust

Slide 6

Slide 6 text

actix-web 6 Lambda導入前のCSV生成フロー[Before] ● 数十万件の出力をする場合があり、メモリをかなり多めに確保する必要があった ● リクエストの集中でサーバー負荷が一気に上がっていた ブラウザ CSV生成 CSVファイル GraphQL PostgreSQL

Slide 7

Slide 7 text

Webサーバーの安定化とCSV生成の高速化を実現 actix-web 7 Lambda導入後のCSV生成フロー[After] ブラウザ PostgreSQL 署名付きリンク GraphQL S3 Rust on Lambda SQS 書き込み CSV生成 アップロード 起動 CSVファイル (ポーリング) メッセージ送信 読み込み

Slide 8

Slide 8 text

リクエストパラメーターをハッシュ化 8 ジョブ管理機能 データベースに保存 生成済みのCSVを返却 SQSにメッセージを送信 リクエスト重複あり リクエスト重複なし

Slide 9

Slide 9 text

Rust on Lambda

Slide 10

Slide 10 text

■ lambda_runtime ■ tokio 10 AWS Lambdaのカスタムランタイムで実行 Rustのカスタムランタイム https://github.com/awslabs/aws-lambda-rust-runtime 依存 ライブラリー カスタムランタイムとは Lambdaで標準でサポートされていない言語であっても、 ランタイムのコードと関数をアップロードすることで、Lambdaを使うことができる。 ■ serde ■ rusotoやaws sdk

Slide 11

Slide 11 text

11 実装例 出典: https://github.com/awslabs/aws-lambda-rust-runtime メイン関数からハンドラー関数を実行 ハンドラー内でロジックを記述

Slide 12

Slide 12 text

12 Lambdaの更新 Rust on Lambda ECR PUSH

Slide 13

Slide 13 text

13 RustでLambdaを使うメリット Lambdaの標準対応の言語ランタイム (Node.js、Python, Goなど) より起動が早い 出典: AWS Lambda battle 2021: performance comparison for all languages (cold and warm start) メモリフットプリントが少な く、インスタンスサイズが 小さめでも問題がない Lambdaのイメージサ イズが他言語に比べ て小さい 仮想マシンが確保しや すい(はず) 01 02 03

Slide 14

Slide 14 text

14 RustでLambdaを使うときのデメリット 開発環境では直接アップロード コンパイルに時間がかかる CIを通すと確認まで時間がかかる

Slide 15

Slide 15 text

15 苦労したこと(現在は解消している) 開発開始時期(2021年4月)が早く、actix-webのtokio 0.2.5だった。 lambda_runtimeのtokioバージョンと不一致のため、サンプル通りにうまく行かなかった。 actix_rtを使用して、実現していた ...

Slide 16

Slide 16 text

● 100万件のCSVでも処理可能に ● 同一リクエストパラメーターなら、一瞬でダウンロード可能 16 CSV生成部分での工夫 メモリ使用量を減らすために、 マルチパートアップロードで S3に分割送信 分割アップロード Rust on Lambda ECR Lambdaへの移行結果

Slide 17

Slide 17 text

Rust on Lambdaは 第一線で活躍中 結論

Slide 18

Slide 18 text

Rustチャレンジしたい人募集中! 一緒に世界の大量廃棄問題を解決しましょう! https://note.com/fullkaiten_re フルカイテン公式note