$30 off During Our Annual Pro Sale. View Details »

バッチをGoにリプレイスして高速化した話 / GoGoGolangEdition!

バッチをGoにリプレイスして高速化した話 / GoGoGolangEdition!

yuma iwasaki

June 23, 2017
Tweet

More Decks by yuma iwasaki

Other Decks in Technology

Transcript

  1. 5

  2. 移行前のバッチが抱えていた課題 遅い 10 時間ぐらいかかる 高い r4.2xlarge インスタンスを12 台(6 台 ×

    2 クラスタ) で運用 0.64 * 720 * 12 = 5529.6 ドル ロー カルで実行しずらい よく失敗している 原因不明のものが多数 修正しずらい雰囲気 16
  3. パフォー マンスチュー ニングを 行う際に大切な考え方 コンピュー ティングリソー スを使えきれているかどうか CPU リソー スを使い切れるようにする

    ディスクIO、 ネットワー クIO で詰まらせない 計算量は必要最小限となっているかどうか 適切なアルゴリズムを使って計算量を減らす 不必要なオブジェクト生成や計算は極力減らす 20
  4. デー タ量削減 Input のデー タサイズ削減 不要なデー タが含まれていたので削除 Output デー タサイズの削減

    圧縮してSQS に送信(DynamoDB にも圧縮して保持) 使う際に解凍するようにした 23
  5. 圧縮について 圧縮にはSnappy を使用 http://s-yata.jp/docs/snappy/ 今回のデー タを圧縮した結果、 圧縮率は0.783 だったので、 35KB が7.6KB

    のデー タになった デー タ自体を圧縮したことにより、 結果的にDynamoDB のRead、Write のCapacity がより少ない状態で も動作するようになり、 コスト削減に繋がった 24
  6. 結果 早い: 実行時間は1/10 安い: サー バー 台数は1/6(5529.6 ドルから921.6 ドルに削減) ロー

    カルで実行可能: 簡単にできるようになった 失敗時の原因究明が容易: 今のところ困ったことはない 26
  7. 28

  8. Lambda のバッチをGo 化 Lambda 上でGo を実行 Go はワンバイナリなので、NodeJS から 実行ファイルをキックするだけで実行可能

    IO でネックが発生していたので、 並列処理が得意なGo を使うことにより、 解決 ロー カルでテストしやすい 32