SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
A S A K U S A バ ッ チ の
運 用 を 支 える 技 術
健 全 な 睡 眠 の た め に
発 表 者
• 名前: 杵渕 朋彦 (きねぶち ともひこ)
• 所属: 株式会社ノーチラス・テクノロジーズ
• テーマ:「ASAKUSA バッチの運用とそれに関わる技
術」
• とある ASAKUSA バッチの CI 、運用、運用で使っ
たツールの開発の経験に基づいて
理 想 の 運 用
「 連 絡 用 携 帯 ? あ ぁ 一 度 も 呼 び 出 さ れ た こ と が な い か ら 会 社 に 置 き っ ぱ な し さ 」
現 実 の 運 用
• まずい、今日の昼までにこの
バッチ正常終了させないと!
• どの範囲のデータがぶっ壊れ
てるのか分からない……。
• なんでここの値がログに出て
ないんだ!? ここのロギング
処理書いたの誰だ。俺だ。
• (注。全て架空の台詞です。)
• Asakusa Framework を使っていても、トラブル対応の
考え方は他のバッチと変わらない
ト ラ ブル が 起 き た と き にや る こ と
• 現状調査・原因究明
• 許される時間リソース (=解決の期限) を考える
• 対応策検討
• 何の解決を優先するのか?
• バッチ再リリース? バッチ再実行? データパッチが
必要?
何 は と も あ れ ま ず は 調 査
• どこでどんなエラーが起きたのか?
• 結果は出力されたのか?
• 出力された結果は正しいのか?
で は ト ラ ブル に
ど う 備 える の か ?
ト ラ ブル は ど こ か ら 起 き る か ?
• 環境要因
• 想定していなかったデータ
• バッチのバグ
• 想定内 (だったはず) のデータで動かない
• トラブルの原因を潰す手段を見ていきましょう
• とある案件を例に見ていきます
• Asakusa Framework 特有の話も交じえながら
• 処理内容「お客様環境のDBからデータを取得し、
AWS 上でバッチを動かし、処理後DBに戻す」
アー キ テ ク チ ャ
( 補 足 )
• WindGate
• RDBMS やローカルファイルと Hadoop の間のデー
タ転送を行うコンポーネント
• RDBMS とは JDBC 接続、リモートの Hadoop とは
SSH 接続を張る
起 き た 問 題
• 「WindGate → EC2 クラスタ」の SSH 接続の部分で
トラブルがよく起きた
• ここの接続で1回でも切断や通信失敗が起きると、
即バッチ異常終了
「 運 用 の た め に 」 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
ま だ 運 用 上 の 問 題 が … …
• バッチの再実行に問題
• DB アクセスから再実行しないといけない = お客様
環境の DB に余計な負荷が掛かる
• EC2 クラスタの起動に失敗する問題
• 自作のクラスタ管理ツールで起動処理していたが、
けっこう実装が複雑で面倒
「 運 用 の た め の 」 アー キ テ ク チ ャ 再 設 計
• バッチ再実行の問題
• データ連携処理の中継地点として S3 を利用することで解決
• S3 へのアップロードが完了したところから再実行可能
• クラスタの起動に失敗する問題
• 自作のクラスタ管理ツールで起動 → EMR を利用
• EMR で Asakusa バッチを動かす方法は以下を参照

http://asakusafw.s3.amazonaws.com/documents/sandbox/ja/html/
administration/asakusa-on-emr.html
改 善 後 の アー キ テ ク チ ャ
新 アー キ テ ク チ ャ の 特 徴
• データ転送のネットワーク構成が変わった
• 一番不安定だった「お客様環境ーAWS」間の接続時間を短縮、
トラブルが起きる頻度が減った
• S3 から再実行できる
• S3 へのデータアップロードが完了していれば、AWS 側の操作だ
けで再実行が可能
• 再度、DB にアクセスしなくて良い。お客様の DB に不要に負荷
を掛けないために重要なこと
新 アー キ テ ク チ ャ の 特 徴 ・ そ の 2
• EMR の API からクラスタを起動
• サービスの使用でツールの保守負荷が下がる
• バッチのリリースが簡単
• EMR に変えたことで、S3 へのアップロードだけで済む
• 慌てやすいトラブル後の再リリース作業では、手順が
シンプルなのは重要!!
アー キ テ ク チ ャ に つ いて 詳 し く は
• ※この資料の図は処理の流れを省いて、データの流れだけを
描いてある
• Asakusa Framework でのアーキテクチャの詳細は以下を参照
• 公式ドキュメント「運用環境の整備」(http://
asakusafw.s3.amazonaws.com/documents/latest/release/
ja/html/administration/index.html)
• Advent Calendar (http://www.adventar.org/calendars/200)
のペンギンアイコンの記事
「 運 用 の た め の 」 ロ グ 出 力
• パッと見てどこで処理が失敗したか分かるように
• トップレベルのスクリプトが、個々の処理の結果をログに出力
• 異常終了したときは、ログファイルの内容をメールで送信 (SES
を利用)
• (補足) SES は AWS のメール送信サービス
• EMR 上に出る YAESS のログは S3 にアップロード
• (補足) YAESS: Asakusa バッチを実行するためのコンポーネント
「 運 用 の た め の 」 ロ グ 出 力 ( A W S 編 )
• AWS のログは以下の情報 (AmazonServiceException から取得
できる) を出力
• ErrorCode
• Message
• RequestId
• StatusCode
• サポートへの問い合わせで使用
「 運 用 の た め に 」 ス テ ー ジ ン グ 環 境 整 備
• 本番環境で動く保証をするには、通常ステージング環境を用意する
• 本番環境が EMR なので、ステージング環境も EMR で……
• と言いたいところだが、毎晩 EMR を起動するのはコストがかさ
む……
• Hadoop のローカルモードで EMR の模倣
• ちゃんとしたステージングとは言い難いが EMR を起動するための
shell script も実行して試験できるのが利点
「 運 用 の た め に 」 テス ト を す る
• TestDriver を使用
• 演算子、フローパート、ジョブフロー、バッチ単位で入力データに対
する出力データの比較試験
• JUnit などで実行
• 全部のテストを開発環境で行うのが無理な場合は、テストサーバで動
かす
• 詳細は公式ドキュメント「アプリケーションのテスト - TestDriver」
(http://asakusafw.s3.amazonaws.com/documents/latest/release/ja/html/
testing/index.html) を参照
「 運 用 の た め に 」 C I を 回 す
• テスト (単体テスト、システムテスト) 用の環境を用意
• ローカルモードでいいので Hadoop 環境を用意する
• 単体テスト→全テストケースを毎晩流す
• システムテスト→ビルドからデプロイ、バッチ実行
まで通しで毎晩流す
• リリース後にバグが発覚したときの修正確認の高速化
「 運 用 の た め に 」 設 計 ・ 実 装 す る
• Asakusa バッチ内部で実行時例外が起きるとバッチ全体が異常終了
• 例外を使わずに、エラーデータを出力するためのフローを設計する
• できるだけ実行時例外を発生させないように実装する
• 実行時例外 (= 値に由来する例外) の例
• 例1. NullPointerException: Option 系のオブジェクトで null
チェックせずに get メソッドを呼ぶ
• 例2. ArithmeticException: 割合を算出するときなどの 0 割り
某 地 獄 の C T O が ど こ かで 言 って た … …
• 「人は安眠のためにお金を払う」
• 「Asakusa バッチの運用を支える技術」とは「私の安
眠を支える技術」
全 て は 運 用 ( 安 眠 ) の た め に
• Issue 登録、ML で報告・質問
• アーキテクチャ
• ログ出力
• 単体テスト・システムテスト
• CI
• 実装
画 像 を 提 供 い た だ い た サイ ト
• GATAG http://free-illustrations.gatag.net
• CC BY ライセンスの画像
• P.8 考える人 著作者「avaxhome.ws」様
• P.24 チェックリスト 著作者「playground」様
• P.25 サイクル 著作者「freedesignfile.com」様
• その他の画像は Public Domain

Contenu connexe

Tendances

アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用Akihiro Kuwano
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesSho Shimauchi
 
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみたShuntaro Saiba
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Shinji Tanaka
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化dcubeio
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Kazuki Morozumi
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがないSeiichiro Ishida
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic InventoryAnsible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic InventoryHideki Saito
 
pixivのインフラを支える技術
pixivのインフラを支える技術pixivのインフラを支える技術
pixivのインフラを支える技術Ryuta Kamizono
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Kamimura Taichi
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
 
グラフ解析で社長の脳内さらす!
グラフ解析で社長の脳内さらす!グラフ解析で社長の脳内さらす!
グラフ解析で社長の脳内さらす!Kazuki Morozumi
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Akio Katayama
 
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2Hiroshi Okano
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テストYamamoto Kazuhisa
 
20171014 Joetsu Tech Meetup #1
20171014 Joetsu Tech Meetup #120171014 Joetsu Tech Meetup #1
20171014 Joetsu Tech Meetup #1Kazuki Ueki
 
Gearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime EngineGearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime EngineSotaro Kimura
 

Tendances (20)

アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用
 
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFesFabric + Amazon EC2で快適サポート生活 #PyFes
Fabric + Amazon EC2で快適サポート生活 #PyFes
 
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
 
Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形Mackerelによる
簡単サーバー管理入門と発展形
Mackerelによる
簡単サーバー管理入門と発展形
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
Devlove mackerel
Devlove mackerelDevlove mackerel
Devlove mackerel
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
Ansible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic InventoryAnsible meetuptokyo 2015 Dynamic Inventory
Ansible meetuptokyo 2015 Dynamic Inventory
 
pixivのインフラを支える技術
pixivのインフラを支える技術pixivのインフラを支える技術
pixivのインフラを支える技術
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
グラフ解析で社長の脳内さらす!
グラフ解析で社長の脳内さらす!グラフ解析で社長の脳内さらす!
グラフ解析で社長の脳内さらす!
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
 
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.2
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テスト
 
20171014 Joetsu Tech Meetup #1
20171014 Joetsu Tech Meetup #120171014 Joetsu Tech Meetup #1
20171014 Joetsu Tech Meetup #1
 
Gearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime EngineGearpump, akka based Distributed Reactive Realtime Engine
Gearpump, akka based Distributed Reactive Realtime Engine
 

En vedette

Asakusa Framework スモールジョブ実行エンジン & Windows対応
Asakusa Framework スモールジョブ実行エンジン & Windows対応Asakusa Framework スモールジョブ実行エンジン & Windows対応
Asakusa Framework スモールジョブ実行エンジン & Windows対応apirakun
 
【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で
【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で
【OSC2014】監視もジョブも、クラウド管理も「Hinemos」でHinemos
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AzareaCluster
 
Asynchronous Messaging入門(第4回実施分)
Asynchronous Messaging入門(第4回実施分)Asynchronous Messaging入門(第4回実施分)
Asynchronous Messaging入門(第4回実施分)Tatsuaki Sakai
 
Asakusa Framework 歴史探訪 & ここ最近の新機能
Asakusa Framework 歴史探訪 & ここ最近の新機能Asakusa Framework 歴史探訪 & ここ最近の新機能
Asakusa Framework 歴史探訪 & ここ最近の新機能apirakun
 
PHP & Queue
PHP & QueuePHP & Queue
PHP & Queuesasezaki
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~Akabane Hiroyuki
 
【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理
【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理
【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理Hinemos
 
【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖
【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖
【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖Hinemos
 
Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!Hasegawa Yusuke
 
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編Amazon Web Services Japan
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
ガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツールガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツール賢 秋穂
 
SXSW 2016 takeaways
SXSW 2016 takeawaysSXSW 2016 takeaways
SXSW 2016 takeawaysHavas
 
The Physical Interface
The Physical InterfaceThe Physical Interface
The Physical InterfaceJosh Clark
 

En vedette (18)

Asakusa Framework スモールジョブ実行エンジン & Windows対応
Asakusa Framework スモールジョブ実行エンジン & Windows対応Asakusa Framework スモールジョブ実行エンジン & Windows対応
Asakusa Framework スモールジョブ実行エンジン & Windows対応
 
【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で
【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で
【OSC2014】監視もジョブも、クラウド管理も「Hinemos」で
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
 
Asynchronous Messaging入門(第4回実施分)
Asynchronous Messaging入門(第4回実施分)Asynchronous Messaging入門(第4回実施分)
Asynchronous Messaging入門(第4回実施分)
 
Asakusa Framework 歴史探訪 & ここ最近の新機能
Asakusa Framework 歴史探訪 & ここ最近の新機能Asakusa Framework 歴史探訪 & ここ最近の新機能
Asakusa Framework 歴史探訪 & ここ最近の新機能
 
PHP & Queue
PHP & QueuePHP & Queue
PHP & Queue
 
Oracle GoldenGate Veridata概要
Oracle GoldenGate Veridata概要Oracle GoldenGate Veridata概要
Oracle GoldenGate Veridata概要
 
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
 
【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理
【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理
【HinemosWorld2015】B1-3_【入門】Hinemosではじめるジョブ管理
 
【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖
【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖
【HinemosWorld2015】B2-3_【テクニカル】Hinemos ver.5.0徹底解剖
 
Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!
 
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
[AWS Summit 2012] クラウドデザインパターン#5 CDP バッチ処理編
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
圏とHaskellの型
圏とHaskellの型圏とHaskellの型
圏とHaskellの型
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
ガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツールガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツール
 
SXSW 2016 takeaways
SXSW 2016 takeawaysSXSW 2016 takeaways
SXSW 2016 takeaways
 
The Physical Interface
The Physical InterfaceThe Physical Interface
The Physical Interface
 

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

Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
最近Preview公開されたAzure テストサービスを試してみた
最近Preview公開されたAzure テストサービスを試してみた最近Preview公開されたAzure テストサービスを試してみた
最近Preview公開されたAzure テストサービスを試してみたHiroyuki Mori
 
オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022
オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022
オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022GREE VR Studio Lab
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfestay_taka_23
 
Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術finoue
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発Yoshitaka Seo
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingTomoharu ASAMI
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話Tsuyoshi Torii
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - SORACOM, INC
 
Awsデータレイク事例祭り dmm.com YUKI SASITO.pdf
Awsデータレイク事例祭り dmm.com YUKI SASITO.pdfAwsデータレイク事例祭り dmm.com YUKI SASITO.pdf
Awsデータレイク事例祭り dmm.com YUKI SASITO.pdfYUKI SAITO
 
勉強会1
勉強会1勉強会1
勉強会1taisho2
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 

Similaire à Asakusa バッチの運用を支える技術 (20)

Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
最近Preview公開されたAzure テストサービスを試してみた
最近Preview公開されたAzure テストサービスを試してみた最近Preview公開されたAzure テストサービスを試してみた
最近Preview公開されたAzure テストサービスを試してみた
 
オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022
オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022
オープンソースで構築するWebメタバース ~Mozilla Hubsで学ぶUX開発から運用コスト最小化まで #CEDEC2022
 
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術
 
Fcp
FcpFcp
Fcp
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 -
 
Awsデータレイク事例祭り dmm.com YUKI SASITO.pdf
Awsデータレイク事例祭り dmm.com YUKI SASITO.pdfAwsデータレイク事例祭り dmm.com YUKI SASITO.pdf
Awsデータレイク事例祭り dmm.com YUKI SASITO.pdf
 
勉強会1
勉強会1勉強会1
勉強会1
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 

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

  • 1. A S A K U S A バ ッ チ の 運 用 を 支 える 技 術 健 全 な 睡 眠 の た め に
  • 2. 発 表 者 • 名前: 杵渕 朋彦 (きねぶち ともひこ) • 所属: 株式会社ノーチラス・テクノロジーズ • テーマ:「ASAKUSA バッチの運用とそれに関わる技 術」 • とある ASAKUSA バッチの CI 、運用、運用で使っ たツールの開発の経験に基づいて
  • 3. 理 想 の 運 用 「 連 絡 用 携 帯 ? あ ぁ 一 度 も 呼 び 出 さ れ た こ と が な い か ら 会 社 に 置 き っ ぱ な し さ 」
  • 4. 現 実 の 運 用 • まずい、今日の昼までにこの バッチ正常終了させないと! • どの範囲のデータがぶっ壊れ てるのか分からない……。 • なんでここの値がログに出て ないんだ!? ここのロギング 処理書いたの誰だ。俺だ。 • (注。全て架空の台詞です。)
  • 5. • Asakusa Framework を使っていても、トラブル対応の 考え方は他のバッチと変わらない
  • 6. ト ラ ブル が 起 き た と き にや る こ と • 現状調査・原因究明 • 許される時間リソース (=解決の期限) を考える • 対応策検討 • 何の解決を優先するのか? • バッチ再リリース? バッチ再実行? データパッチが 必要?
  • 7. 何 は と も あ れ ま ず は 調 査 • どこでどんなエラーが起きたのか? • 結果は出力されたのか? • 出力された結果は正しいのか?
  • 8. で は ト ラ ブル に ど う 備 える の か ?
  • 9. ト ラ ブル は ど こ か ら 起 き る か ? • 環境要因 • 想定していなかったデータ • バッチのバグ • 想定内 (だったはず) のデータで動かない • トラブルの原因を潰す手段を見ていきましょう
  • 10. • とある案件を例に見ていきます • Asakusa Framework 特有の話も交じえながら • 処理内容「お客様環境のDBからデータを取得し、 AWS 上でバッチを動かし、処理後DBに戻す」
  • 11. アー キ テ ク チ ャ
  • 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
  • 17. 改 善 後 の アー キ テ ク チ ャ
  • 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