Glitch

MySQL, MongoDB, Python, Go

歌舞伎座.tech#3「Real World Erlang/OTP」memo

メモです。}

なぜErlangにしたのか? by 太田@dwango

  • サーバ(プロセス)を自由に組み合わせ可能
  • 設計の自由度が高まる

Voyage GroupでのErlang/OTP(仮) by ajiyoshi@VOYAGE GROUP

インターネット広告にErlang
  • とくにRTBに使ってる
Bidリクエスト
  • Browser -> SSP ->->-> DSP
  • Second Price Auction - 2位の入札額が落札額
重要な要件
  • 複数のネットワークコネクション
    • 非同期IO or マルチスレッド
  • ソフトリアルタイム性 - 何が何でも早めに返す
    • 100ms程度の応答(厳密でない)
多言語との比較
  • node.jsなどのシングルスレッド+非同期IO - event-driven
    • 低オーバーヘッド
    • 扱いやすい
      • シングルスレッドなのでマルチコア環境では一工夫いる
      • ノンプリエンティブ
      • コールバック地獄かも
  • JVMでマルチスレッド
    • 早い
    • マルチコア環境でもスケール
    • full GCがちょっとこわい
    • 1connection/threadは無理そう
    • ソフトリアルタイムに書くのが難しそう
  • Erlang, golang
    • 1connection/process
    • ソフトリアルタイム性確保が簡単
    • ProcessごとのGC
アーキテクチャ
  • Erlangによるhttp APIサーバとして設計
    • 内部向けI/Fにhttpなのはトレードオフあり
    • 外部向けhttpレスポンスに比べりゃ小さい
  • 1conc/proc
    • 生存次回の短いprocess
  • messageのタイムアウトでソフトリアルタイム性
実測値
  • 3万bits/s
  • 16億bits/day
  • 8000万 RTB imp/day
運用
  • Jenkinsでビルド&rebar generate
  • 100G/dayのログをHiveで解析し、最低入札価格の最適化
  • Growth Forecastでかんたんに可視化

Elixir (仮) by mururururu@VOYAGE GROUP

Elixirなにがすごいの
Erlang vs Elixir
  • meta-programming - Everything is a expression
    • Embedded database
    • Define modules on shell
  • macros <- Elixirは構文木
  • protocols
  • standard libraryが整備されている
  • Eralngに比べてオーバーヘッドはとくにない

時雨堂とErlang/OTP事例紹介 by voluntas@時雨堂

  • ピザ食ってました…
  • オーム社のヒコーキ本