5月25日、
JSUG勉強会 2017年その4 ~ Springを使ったバッチアプリケーション特集
https://jsug.doorkeeper.jp/events/60629
を聞いてきた!ので、メモメモ
■バッチは地味だが役に立つ
・一般的なBatchのイメージ
・バッチ処理とは
まとめて一括処理
大量データを処理するとき
・反対:オンライン処理
即座に処理
・ゴール:3つ
1.SpringBatchの基本機能や概念
2.できること、できないこと
3.てらそるなばっちフレームワーク
・Spring Batchについて
大量のデータを処理するために
便利な機能を提供
・なんでSpringBatchについて話すのか?
身の回りで話を聞かない、Webでもまとまった情報がない
JSUGのアンケートでは、長年興味があるテーマの上位
NTTデータの社内事情
てらそるながSpringBatchを採用
・コンテンツ
1.SpringBatch
2.てらそるな
・Spring Batch
クイックスタート(でも)
・プロジェクトを作る
・バッチコンフィグレーション
公式ページをはる
うごく
・基本構成(チャンクモデル)
JobLauncher:Jobを起動するためのインターフェース
Job:バッチアプリをまとめた実効単位
Step:構成するしょりの単位
ItemReader/Proceeeser/Writer
読み込む
処理
かきこむ
XMLふぁいるでのジョブ定義
基本設定
Reader定義
Processor定義
特徴:5つ
処理モデル
起動方法
データ入出力
処理の効率化
ジョブの管理
処理モデル
タスクレットモデル
Job-Step-Tasklet
JobのBean定義
タスクレットの実行
Job-Step-Reader/Processer/Writer
→ほとんど同じ。使い分け:ジョブごと
リカバリシンプル:タスクレット
起動方法
同期実行方式
非同期実行方式(Webコンテナ)
業務用件によって選択
データの入出力
・ふぁいるのよみこみ
Bean定義
LineMapperの定義
Tokenizerの定義
Field Set Mapperの定義
・かきこみ
・処理の効率化
フロー制御
スケジューラーとフレームワーク機能で実現
JOBは1つ、複数のStepでフロー
nextに後続StepのIDをかく
分岐
■Spring Boot アプリをPivotal web Serviceに
デプロイする4つの理由
(1)デプロイがめちゃ楽 cf push
(2)Spring Boot Actuatorのビューワー付き
(3)Spring Cloud Service
(4)PCF Metricsで分散トレーシング
http://run.pivotal.io/
■Yahooの広告レポートシステムをSpring Cloud Stream化するまで
・自己紹介
・概要
2013 第一世代 集計、自前 perl,php
2015 第二世代 Spring ポーリング型
:リクエスト数、RDBが耐え切れない
2017 第三世代 RabbitMQ
・広告レポート
広告の配信実績の確認
レポート出力項目、集計単位は指定可能
ユースケース
通常レポート
定期レポート
レポートのリクエスト数:右肩上がり
システム全体
APIから
配信ログ集計
・第一世代
課題:処理が依存し合っている→品質を担保できない
開発に時間がかかりすぎて、ログ量の増加や機能拡張に追いつけない
運用コストが高い
眠れない
→開発スピードを上げたい、寝たい
・第二世代
Spring 疎結合、Hiveでリアルタイム
Hive on Tez:二次集計が不要、眠れるようになった
くわしくは
JJUG CCC 2016 Spring
Spring 広告システム刷新の舞台裏 PHPからJavaに変えてみました
https://www.slideshare.net/techblogyahoo/jjugccc-cccf1-phpjava
全体のスループットは遅くなった
RDBが高負荷
・第三世代 Spring Cloud Stream
MQ?
レポート作成をイベントドリブンに行いたい
Spring Cloud Stream
マイクロサービス
パブリッシャー、サブスクライバ型
Spring Boot
consumer group・・・スケールアウトして対応できる
binder abstraction
レポート作成を1つのグループにする
リリース:ダウンタイム0に
新システム稼働→旧システムOUT
性能比較
プロセスはどちらも558
ポーリング 第二 16928 第三 0
レポート作成数 第二 44121 第三 63934
イベントドリブンにレポート作成、
デッド・エラー・キュー
・Tips
Spring Boot APIは苦労なかった
Spring Batch
1アプリケーション1jarにした
単発バッチ
常駐バッチ
1サーバーに複数プロセス
spring.main.web-environment=false
→2.0から非推奨。WebApplicationType
DataSourceを2つ指定
プレゼン資料は
https://www.slideshare.net/techblogyahoo/spring-cloud-stream-jjugccc-ccca4
にある