by shigemk2

当面は技術的なことしか書かない

メモ バルクロードの信頼性を上げるための戦い #tdtech

Embulkとは

  • Embulkのプラグインの話
  • TDでEmbulkをつかう話

  • OSSとして出しているプラグラブルなバルクロードツール

    • Fluentdのバッチ版と言われる
    • TDはOSSと一緒のバージョンを使っている
  • cavのgzipをMySQLにアップロードする、といった用途とか
  • GUIも使える
  • Import側はCUI(td connector)
  • EmbulkについてはWebDBPressのNo.92とか、Qiitaとか、ドキュメントとか
    • もう少しデベロッパードキュメントがほしい

プラグイン

  • リトライ確認
  • 実装はJavaでもJRubyでも可
    • Java 高パフォーマンス エンタープライズ向けのサービスだとJavaSDKしかない
      • Java8未対応
      • TDのHadoop古く、Java7までしか対応してない
    • JRuby 書きやすい ネットワーク関係
    • ので、両方知っておくといいかも
  • 無限リトライを避けるような実装すること
    • ConfigExecution
    • DataExecution
  • 外部サービスとの比較
    • AWS S3
      • パスを渡せばよいからかんたん
    • Azure Blob Storage
      • なぞの文字列を追加したあとごにょごにょしないといけなくてしんどい
    • Google Cloud Storage
      • 0x0aしてからbase64エンコード→しんどい
    • わからなかったらSOに聞くといいかも
  • ユニットテスト
    • カバレージは80%を超えていることが条件
    • ただしEmbulkのテストコードを書くのは結構しんどい
  • TDのアーキを自分で書いてみて、どう動いているのかわかった

TD API/Bulkload API

  • Guest Previewはある程度インタラクティブ
  • データ量が多い データのコンフィグが数千行
  • プラグインの作りがしょっぱいとうまく回らないのでログとテストはちゃんと実装するようにする
  • でかいデータはプラグインのリトライが動いていないと実行時に大変
  • バルクアップロードが失敗したらリトライするようにすること

結合テスト

  • 単体テストよりは実装は難しくないが、テストの数が多い
    • guessちゃんと動く??
    • スケジューリングは期待通り動いてる??
    • CIがよく落ちる タイムアウト/50x/API limit

実装したい

  • API endpointは不十分な
    • 認証を確認してからジョブの確認ができる方がUIが上がるのでそのようにしたい

インフラ

  • Chef
    • サーバを建てるのにそれなりの時間がかかる
    • コンテナ化仮想化を駆使したい
  • Datadog
  • PagerDuty