「Running Rust in Production」に参加してきました

ライブ動画変換でのRust言語活用事例

導入事例

  • pixiv Sketch LIVE
  • Sketchの操作を配信できる?

なぜrust

  • Cのライブラリに依存すると事前に分かっていた
    • ネイティブライブラリの関数を呼び出したい
    • ネイティブライブラリの呼び出し定義コードを自分で書きたくない
    • ネイティブライブラリからデータを直接受け取りたい

C++

  • 社内ですでにメンテつらい

Go

  • Cとのやりとり大変そう

Rust

  • C++のあれがほしいって時大抵ある
  • rubyのあれがほしいって時大抵ある

難しかったとこ

  • 所有権とかライフタイムとか学習コスト高い
  • moveされうる変数のポインタ

Rust本番投入をあきらめるためのガイドライン

本番投入のハードル

  • rust特有の難しさ
    • メモリに直接さわるのに慣れてるか
  • 新しいが故の難しさ
    • 真似でごまかせない

真似でごまかせないならどうする

基礎原理に従ってやる

  • ノウハウのある言語との比較
    • ランタイムなしで動くとはどういうことか
    • 実行時にCPUやOSを隠蔽しない
  • スクリプト言語の経験しかないとハードルになり得る

運用上必要な機能を整理する

  • クックパッドの事例の場合
    • ロギング
    • エラーハンドリングとトレーサビリティ
    • graceful shutdown
    • シグナルのハンドリング

まとめ

つぶやき

  • そういえば Node.js よりはエラーハンドリングしやすくて安全に I/O の多重化ができる言語として俺は選んだな

ポイントで導入するRust

なぜRustを勉強したか

  • 毎年一つの言語を
  • goはこの先使うこともありそうだしrustを

Rust導入のきっかけ

  • ラクマで自動化を進めようとしていた
  • そこで使った

運用後

  • みんなrustわからないから不具合で困った
  • みんなもrust学んでくれた

Rustを使ったデータパイプライン

データパイプライン

  • EVTLツールをrustで作った
    • Extract, Validate, Transform, Load
  • AWS Lambda上で動かしてる

なぜrust

  • 速いから
  • 厳しい型システムで安心
  • メモリのコントロール

つらかったとこ

  • コンパイル遅い
    • Scalaよりは速い(というRust界定番の自虐?)
  • 一部ライブラリは未熟
  • 周りに書ける人がいない

Rustが適した分野

  • 安定性
  • 速さ

そのサーバー、三日前からRustだよ

なぜwantedlyでrust

  • マイクロサービス
  • 画像の処理
    • C++で書かれてた
    • 高負荷時に怪しい動き
    • rustで置き換える

Rustと3種のDSL

DSL

DSLを3つ作った

  • 権限チェック
  • API定義
    • マクロを使う
    • 使いすぎは注意
    • 第一級ではない
  • JSON Schema