Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Asakusa バッチの運用を支える技術

1,247 views

Published on

Published in: Software
  • Be the first to comment

Asakusa バッチの運用を支える技術

  1. 1. A S A K U S A バ ッ チ の 運 用 を 支 える 技 術 健 全 な 睡 眠 の た め に
  2. 2. 発 表 者 • 名前: 杵渕 朋彦 (きねぶち ともひこ) • 所属: 株式会社ノーチラス・テクノロジーズ • テーマ:「ASAKUSA バッチの運用とそれに関わる技 術」 • とある ASAKUSA バッチの CI 、運用、運用で使っ たツールの開発の経験に基づいて
  3. 3. 理 想 の 運 用 「 連 絡 用 携 帯 ? あ ぁ 一 度 も 呼 び 出 さ れ た こ と が な い か ら 会 社 に 置 き っ ぱ な し さ 」
  4. 4. 現 実 の 運 用 • まずい、今日の昼までにこの バッチ正常終了させないと! • どの範囲のデータがぶっ壊れ てるのか分からない……。 • なんでここの値がログに出て ないんだ!? ここのロギング 処理書いたの誰だ。俺だ。 • (注。全て架空の台詞です。)
  5. 5. • Asakusa Framework を使っていても、トラブル対応の 考え方は他のバッチと変わらない
  6. 6. ト ラ ブル が 起 き た と き にや る こ と • 現状調査・原因究明 • 許される時間リソース (=解決の期限) を考える • 対応策検討 • 何の解決を優先するのか? • バッチ再リリース? バッチ再実行? データパッチが 必要?
  7. 7. 何 は と も あ れ ま ず は 調 査 • どこでどんなエラーが起きたのか? • 結果は出力されたのか? • 出力された結果は正しいのか?
  8. 8. で は ト ラ ブル に ど う 備 える の か ?
  9. 9. ト ラ ブル は ど こ か ら 起 き る か ? • 環境要因 • 想定していなかったデータ • バッチのバグ • 想定内 (だったはず) のデータで動かない • トラブルの原因を潰す手段を見ていきましょう
  10. 10. • とある案件を例に見ていきます • Asakusa Framework 特有の話も交じえながら • 処理内容「お客様環境のDBからデータを取得し、 AWS 上でバッチを動かし、処理後DBに戻す」
  11. 11. アー キ テ ク チ ャ
  12. 12. ( 補 足 ) • WindGate • RDBMS やローカルファイルと Hadoop の間のデー タ転送を行うコンポーネント • RDBMS とは JDBC 接続、リモートの Hadoop とは SSH 接続を張る
  13. 13. 起 き た 問 題 • 「WindGate → EC2 クラスタ」の SSH 接続の部分で トラブルがよく起きた • ここの接続で1回でも切断や通信失敗が起きると、 即バッチ異常終了
  14. 14. 「 運 用 の た め に 」 I S S U E を 上 げ る • 対処: WindGateの設定項目を増やしてもらう • 再接続する回数を設定する項目はあったものの、すぐに再接続す るためあまり意味が無かった • 再接続の間隔を設定可能に (Issue #246: https://github.com/ asakusafw/asakusafw/issues/246) • Asakusa Framework は GitHub で Issue を受け付けている。使ってい る人がどんどん Issue を投げよう。ML もあるよ • https://groups.google.com/a/asakusafw.com/forum/#!forum/users
  15. 15. ま だ 運 用 上 の 問 題 が … … • バッチの再実行に問題 • DB アクセスから再実行しないといけない = お客様 環境の DB に余計な負荷が掛かる • EC2 クラスタの起動に失敗する問題 • 自作のクラスタ管理ツールで起動処理していたが、 けっこう実装が複雑で面倒
  16. 16. 「 運 用 の た め の 」 アー キ テ ク チ ャ 再 設 計 • バッチ再実行の問題 • データ連携処理の中継地点として S3 を利用することで解決 • S3 へのアップロードが完了したところから再実行可能 • クラスタの起動に失敗する問題 • 自作のクラスタ管理ツールで起動 → EMR を利用 • EMR で Asakusa バッチを動かす方法は以下を参照
 http://asakusafw.s3.amazonaws.com/documents/sandbox/ja/html/ administration/asakusa-on-emr.html
  17. 17. 改 善 後 の アー キ テ ク チ ャ
  18. 18. 新 アー キ テ ク チ ャ の 特 徴 • データ転送のネットワーク構成が変わった • 一番不安定だった「お客様環境ーAWS」間の接続時間を短縮、 トラブルが起きる頻度が減った • S3 から再実行できる • S3 へのデータアップロードが完了していれば、AWS 側の操作だ けで再実行が可能 • 再度、DB にアクセスしなくて良い。お客様の DB に不要に負荷 を掛けないために重要なこと
  19. 19. 新 アー キ テ ク チ ャ の 特 徴 ・ そ の 2 • EMR の API からクラスタを起動 • サービスの使用でツールの保守負荷が下がる • バッチのリリースが簡単 • EMR に変えたことで、S3 へのアップロードだけで済む • 慌てやすいトラブル後の再リリース作業では、手順が シンプルなのは重要!!
  20. 20. アー キ テ ク チ ャ に つ いて 詳 し く は • ※この資料の図は処理の流れを省いて、データの流れだけを 描いてある • Asakusa Framework でのアーキテクチャの詳細は以下を参照 • 公式ドキュメント「運用環境の整備」(http:// asakusafw.s3.amazonaws.com/documents/latest/release/ ja/html/administration/index.html) • Advent Calendar (http://www.adventar.org/calendars/200) のペンギンアイコンの記事
  21. 21. 「 運 用 の た め の 」 ロ グ 出 力 • パッと見てどこで処理が失敗したか分かるように • トップレベルのスクリプトが、個々の処理の結果をログに出力 • 異常終了したときは、ログファイルの内容をメールで送信 (SES を利用) • (補足) SES は AWS のメール送信サービス • EMR 上に出る YAESS のログは S3 にアップロード • (補足) YAESS: Asakusa バッチを実行するためのコンポーネント
  22. 22. 「 運 用 の た め の 」 ロ グ 出 力 ( A W S 編 ) • AWS のログは以下の情報 (AmazonServiceException から取得 できる) を出力 • ErrorCode • Message • RequestId • StatusCode • サポートへの問い合わせで使用
  23. 23. 「 運 用 の た め に 」 ス テ ー ジ ン グ 環 境 整 備 • 本番環境で動く保証をするには、通常ステージング環境を用意する • 本番環境が EMR なので、ステージング環境も EMR で…… • と言いたいところだが、毎晩 EMR を起動するのはコストがかさ む…… • Hadoop のローカルモードで EMR の模倣 • ちゃんとしたステージングとは言い難いが EMR を起動するための shell script も実行して試験できるのが利点
  24. 24. 「 運 用 の た め に 」 テス ト を す る • TestDriver を使用 • 演算子、フローパート、ジョブフロー、バッチ単位で入力データに対 する出力データの比較試験 • JUnit などで実行 • 全部のテストを開発環境で行うのが無理な場合は、テストサーバで動 かす • 詳細は公式ドキュメント「アプリケーションのテスト - TestDriver」 (http://asakusafw.s3.amazonaws.com/documents/latest/release/ja/html/ testing/index.html) を参照
  25. 25. 「 運 用 の た め に 」 C I を 回 す • テスト (単体テスト、システムテスト) 用の環境を用意 • ローカルモードでいいので Hadoop 環境を用意する • 単体テスト→全テストケースを毎晩流す • システムテスト→ビルドからデプロイ、バッチ実行 まで通しで毎晩流す • リリース後にバグが発覚したときの修正確認の高速化
  26. 26. 「 運 用 の た め に 」 設 計 ・ 実 装 す る • Asakusa バッチ内部で実行時例外が起きるとバッチ全体が異常終了 • 例外を使わずに、エラーデータを出力するためのフローを設計する • できるだけ実行時例外を発生させないように実装する • 実行時例外 (= 値に由来する例外) の例 • 例1. NullPointerException: Option 系のオブジェクトで null チェックせずに get メソッドを呼ぶ • 例2. ArithmeticException: 割合を算出するときなどの 0 割り
  27. 27. 某 地 獄 の C T O が ど こ かで 言 って た … … • 「人は安眠のためにお金を払う」 • 「Asakusa バッチの運用を支える技術」とは「私の安 眠を支える技術」
  28. 28. 全 て は 運 用 ( 安 眠 ) の た め に • Issue 登録、ML で報告・質問 • アーキテクチャ • ログ出力 • 単体テスト・システムテスト • CI • 実装
  29. 29. 画 像 を 提 供 い た だ い た サイ ト • GATAG http://free-illustrations.gatag.net • CC BY ライセンスの画像 • P.8 考える人 著作者「avaxhome.ws」様 • P.24 チェックリスト 著作者「playground」様 • P.25 サイクル 著作者「freedesignfile.com」様 • その他の画像は Public Domain

×