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