SlideShare a Scribd company logo
1 of 93
Download to read offline
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
塩野 貴義, 橋本 尚亮
ヤフーの広告
レポートシステムを
Spring Cloud Stream化
するまで
2017年5月20日
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.2
塩野 貴義
■家族構成
妻、息子2人(9歳♂双子)
■趣味
車、バイク
■経歴
2011/08 ヤフーに転職
2013/10 レポートシステム
2017/04 集計システム
自己紹介
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.3
橋本 尚亮
■家族構成
独身
■趣味
音楽鑑賞
■経歴
2016/04 ヤフーに新卒入社
2016/09 レポートシステム
自己紹介
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
概要
4
第一世代 第二世代 第三世代
2013 2015 2017
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
5
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
6
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
広告レポートについて
7
 お客様(広告主)が入稿した広告の配
信実績を確認するためのレポート
 レポート出力する項目や集計単位は
指定可能
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
広告レポートのユースケース
8
 通常レポート
• API経由で作成リクエストを受け取る
• 常時稼働
• レポート作成は非同期で行う
Request
Job
登録
Report job
Report
作成
Job取得
API
Batch
API Batch
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
広告レポートのユースケース
9
 定期レポート
• 定期レポートとして登録されているレ
ポートのJobを一括登録する
• 毎朝1回
• レポート作成方法は通常レポートと同じ
Report job
Report
作成
Job取得
定期
レポート
Job
登録
Batch
Batch
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
広告レポートのユースケース
10
 通常レポート
• 常時稼働、約25万レポート/日
 定期レポート
• 毎朝1回、約5万レポート/日
Request
Job
登録
Report job
Report
作成
Job取得
定期
レポート
Job
登録
API
Batch
Batch
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
レポートのリクエスト数
11
80,000
150,000
300,000
第一世代(2014) 第二世代(2016) 第三世代(2017)
インターネット広告市場の拡大に伴い
レポート作成の
リクエスト数は年々増加
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
広告レポートシステム全体
12
Request
Job
登録
Report job
Report
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計
API
Batch
Batch
Batch
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
13
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代
14
Request
Job
登録
Report job
Report
作成
メール
送信
定期
レポート
Job
登録
配信ログ集計 ストレージ2次集計
日次夜間集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代
15
Request
Job
登録
Report job
Report
作成
メール
送信
定期
レポート
Job
登録
配信ログ集計 ストレージ2次集計
日次夜間集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代
16
Request
Job
登録
Report job
Report
作成
メール
送信
定期
レポート
Job
登録
配信ログ集計 ストレージ2次集計
日次夜間集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Report
作成
第一世代
17
Request
Job
登録
Report job
Job取得
メール
送信
定期
レポート
Job
登録
配信実績取得
配信ログ集計 ストレージ2次集計
日次夜間集計
Job取得
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代
18
Request
Job
登録
Report
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
ストレージ2次集計
Report job
配信ログ集計
日次夜間集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代
19
Request
Job
登録
Report job
Report
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計 ストレージ2次集計
日次夜間集計
二次集計
処理時間:4時間以上
集計結果容量:1TB以上/日
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代の課題
20
 開発が複雑
• 全ての処理が依存しあっていて影響範囲が広い
• テストパターンが網羅しきれない
• 2000行以上の設定ファイルを共有
• Objectは全てArray
• 改修・拡張でコードが複雑化
• 動的型付けで想定外の挙動
• 開発サーバ上でVimによる開発
 運用コストが高い
• リカバリの再集計は複数人で半日以上
• ファイルの欠損等で月に数回リカバリ作業が発生
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代の課題
21
 開発が複雑
• 全ての処理が依存しあっていて影響範囲が広い
• テストパターンが網羅しきれない
• 2000行以上の設定ファイルを共有
• Objectは全てArray
• 改修・拡張でコードが複雑化
• 動的型付けで想定外の挙動
• 開発サーバ上でVimによる開発
 運用コストが高い
• リカバリの再集計は複数人で半日以上
• ファイルの欠損等で月に数回リカバリ作業が発生
- 品質を担保できない
- 開発に時間がかかりすぎてログ量の
増加や機能拡張に追いつけない
- ぐっすり眠れない
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
なんとかしたい
22
 開発スピードを上げたい
 運用をもっと楽にして開発に集中
したい
 ぐっすり寝たい
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
23
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代(2014)
24
Request
Job
登録
Report job
レポート
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計 ストレージ2次集計
日次夜間集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第二世代(2016)
25
Request
Job
登録
Report job
レポート
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計 ストレージ2次集計
日次夜間集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第二世代(2016)
26
Request
Job
登録
Report job
レポート
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代から第二世代へ
27
 Java / Spring Batch
• DIコンテナによる疎結合とテストの充実
• 静的型付けで安心
• ライブラリが充実
• IDE
 Hive on Tez
• 二次集計が不要
• 保守するコード量が激減
• 自由度高く実績取得可能
 運用
• ぐっすり眠れるようになった
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代から第二世代へ
28
詳しくはこちら
JJUG CCC 2016 Spring
広告システム刷新の舞台裏
PHPからJavaに変えてみました
https://www.slideshare.net/techblogyahoo/jjugccc-cccf1-phpjava
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第二世代(2016)
29
Request
Job
登録
Report job
レポート
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
問題発生
30
Request
Job
登録
Report job
レポート
作成
Job取得
メール
送信
定期
レポート
Job
登録
Job取得
配信実績取得
配信ログ集計
二次集計をなくしたことで配信実績
取得にかかる時間が増加
全体のスループットの低下
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
31
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
32
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
33
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
これで解決?
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
34
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
35
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
36
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
37
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
38
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
39
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
40
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
解決策
41
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第二世代の課題
レポート作成Batchをスケールアウト
RDBへのポーリングのアクセス数が増大
RDBが高負荷
他のシステムにも影響
42
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
43
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第二世代(2016)
44
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
Report job
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第三世代(2017)
45
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
MQ?
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第三世代(2017)
46
Request
Job
登録
レポート
作成
Job取得
定期
レポート
Job
登録
配信実績取得
配信ログ集計
レポート
作成
・・・
レポート
作成
レポート
作成
・・・
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
レポート
作成
MQ?
レポート作成を
イベントドリブンに行いたい
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Cloud Stream
47
 message-driven microservices
 Spring Boot
 consumer groups
 binder abstraction
http://cloud.spring.io/spring-cloud-stream/
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Cloud Stream
48
Source Sink
output
input
定期
レポート
API
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第三世代(2017)
49
レポート
作成
Request Job登録
Job登録
定期
レポート
・・・
・・・
レポート
作成
レポート
作成
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
 共通のdestinationを設定するだけで簡単にアプ
リケーション間が接続される
第三世代(2017)
50
レポート
作成
Request Job登録
Job登録
定期
レポート
・・・
・・・
レポート
作成
spring.cloud.stream.
bindings.output.destination
=reporting
spring.cloud.stream.
bindings.input.destination
=reporting
reporting
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
レポート
作成
Request Job登録
Job登録
定期
レポート
・・・
・・・
レポート
作成
レポート
作成
reporting
第三世代(2017)
51
{jobId:1002}{jobId:1002}{jobId:1002} {jobId:1002}
{jobId:1002}
{jobId:1002}
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
 設定1つで簡単にconsumer groupが作れるためス
ケールアウトが容易
spring.cloud.stream.bindings
.input.group=ydnrep
レポート
作成
Request Job登録
Job登録
定期
レポート
・・・
・・・
レポート
作成
レポート
作成
第三世代(2017)
52
reporting
.ydnrep
{jobId:1002}
ydnrep
{jobId:1002}
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
リリース
53
第二世代から第三世代へのリリースを
ダウンタイム0で行いたい
0. 旧システム稼働中
1. 新システムデプロイ
2. 新シスステムサービスイン
3. 旧シスステムAPIサービスアウト
4. 旧シスステムBatchサービスアウト
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
・・・
リリース
54
0.旧システム稼働中
Request
Job
登録
Report job
レポート作成
・・・
Job取得
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
・・・
リリース
55
1.新システムデプロイ
Request
Job
登録
Report job
レポート作成
・・・
Job取得
reporting
.ydnrep
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
・・・
リリース
56
2.新システムサービスイン
Request
Job
登録
Report job
レポート作成
・・・
Request
Job
登録
Job取得
レポート作成
reporting
.ydnrep
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
・・・
リリース
57
3.旧システムAPIサービスアウト
Report job
レポート作成
・・・
Request
Job
登録
Job取得
レポート作成
reporting
.ydnrep
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
・・・
リリース
58
4.旧システムBatchサービスアウト
Report job
・・・
Request
Job
登録 レポート作成
reporting
.ydnrep
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
・・・
リリース
59
4.旧システムBatchサービスアウト
Report job
・・・
Request
Job
登録 レポート作成
ダウンタイム0でリリース完了!
reporting
.ydnrep
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
性能比較
60
 リリースして動作確認
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
性能比較
61
 RabbitMQの管理画面
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
性能比較
62
 RabbitMQの管理画面
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
性能比較
63
 RabbitMQの管理画面
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
性能評価
 レポート作成プロセス数:558
 ポーリング時のSQL発行数/h
• 第二世代: 16,928
• 第三世代: 0
 レポート作成数/h
• 第二世代: 44,121
• 第三世代: 63,934
64
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第三世代(2017)
 イベントドリブンにレポート作成
Jobを取得できるようになりRDB
の負荷が減った
 1時間あたりの処理数も増えた
65
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第三世代(2017)
 イベントドリブンにレポート作成
Jobを取得できるようになりRDB
の負荷が減った
 1時間あたりの処理数も増えた
めでたしめでたし、、、
66
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
問題発生
 イベントドリブンにレポート作成
Jobを取得できるようになりRDB
の負荷が減った
 1時間あたりの処理数も増えた
めでたしめでたし、、、
67
SQL [INSERT into
BATCH_JOB_EXECUTION_PARAMS(JOB_EXECUTION_ID, KEY_NAME,
TYPE_CD, STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL,
IDENTIFYING) values (?, ?, ?, ?, ?, ?, ?, ?)];
ORA-08177: can't serialize access for this transaction
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
原因
68
レポート
作成
定期
レポート
・・・
・・・
{jobId:1002,
・・・
jobId:51002}
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
原因
69
レポート
作成
定期
レポート
・・・
・・・
{jobId:1002,
・・・
jobId:51002}
{jobId:1002}
{jobId:1003}
{jobId:1503}
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
原因
70
レポート
作成
定期
レポート
・・・
・・・
Spring Batchの
Job管理テーブルに
同時に大量のINSERT
・・・
{jobId:1002,
・・・
jobId:51002}
{jobId:1002}
{jobId:1003}
{jobId:1503}
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
原因
71
レポート
作成
定期
レポート
・・・
・・・
Spring Batchの
Job管理テーブルに
同時に大量のINSERT
・・・
{jobId:1002,
・・・
jobId:51002}
{jobId:1003}
{jobId:1503}
3回失敗すると
メッセージは消失
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
対策(1/2)
72
レポート
作成
reporting
.ydnrep
・・・
・・・
ydnrep
レポート
作成
定期
レポート
 maxAttemptの上限を上げる
spring.cloud.stream.bindings.
input.consumer.maxAttempts=5
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
対策(2/2)
73
レポート
作成
reporting
.ydnrep
・・・
・・・
ydnrep
レポート
作成
reporting
.ydnrep.dlq
定期
レポート
 Dead Letter Queue を用意
spring.cloud.stream.rabbit.bind
ings.input.consumer.autoBindDlq
=true
{jobId:1002}
エラー処理
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
対策(2/2)
74
レポート
作成
reporting
.ydnrep
・・・
・・・
ydnrep
レポート
作成
reporting
.ydnrep.dlq
定期
レポート
 Dead Letter Queue を用意
{jobId:1002}
メッセージを
送信し直す
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
対策(2/2)
75
レポート
作成
reporting
.ydnrep
・・・
・・・
ydnrep
レポート
作成
reporting
.ydnrep.dlq
定期
レポート
 Dead Letter Queue を用意
{jobId:1002}
メッセージを
送信し直す
根本的な解決になっていない
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
対策(2/2)
76
レポート
作成
reporting
.ydnrep
・・・
・・・
ydnrep
レポート
作成
reporting
.ydnrep.dlq
定期
レポート
 Dead Letter Queue を用意
{jobId:1002}
メッセージを
送信し直す
Job RepositoryがDBアクセスしない方法を調査中
*常駐バッチのためJob Repositoryを
インメモリ化できない
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
77
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代(2014) 第二世代(2016) 第三世代(2017)
まとめ
78
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
第一世代(2014) 第二世代(2016) 第三世代(2017)
まとめ
79
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
まとめ
80
 刷新をする度に課題がバックエンドに移動
 ポーリング型からイベントドリブンに変更するこ
とでスループット向上
 大規模システムはリリースしてからが勝負
 Spring歴1年未満の私でもmicroservicesが簡単
に作れました
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから
・・・レポート
作成
API
メール
送信
定期
レポート
 他サービスのSpring Cloud Stream化
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから
・・・レポート
作成
API
メール
送信
定期
レポート
 ミドルウェアの比較・検討
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから
・・・レポート
作成
API
メール
送信
定期
レポート
 Cloud Foundryへの移行
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから
・・・レポート
作成
API
メール
送信
定期
レポート
 興味がある方は是非!
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
これから
 他サービスのSpring Cloud Stream化
 ミドルウェアの比較・検討
 Cloud Foundryへの移行
 興味がある方は是非!
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
アジェンダ
86
1. 広告レポートシステムについて
2. 第一世代~PHP&Perl~
3. 第二世代~Spring Batch&Hive~
4. 第三世代~Spring Cloud Stream~
5. まとめ
6. tips
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Cloud Streamの実装
87
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Cloud Streamの実装
88
 API, BatchのSpring Boot化
 Source/Sinkの追加
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Boot
89
 Application起動クラスの追加
 application.properties で設定を
管理
 API : war->jar (embedded jetty)
 Batch:苦戦
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Boot
90
 第二世代Batch :
• 1つのjarに複数の機能
• 実行時にjobIdを指定
 第三世代Batch :
• 1application/jar
• 単発batch(定期レポート)
• 常駐batch(レポート作成, メール送信)
spring.batch.job.enabled=true
spring.batch.job.enabled=false
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Boot
91
 1サーバに複数プロセス
• Web appとして起動するさせてしまうと
portの管理が必要
•
*Spring Boot 2.0では非推奨.代わりにWebApplicationType
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-
Notes
spring.main.web-environment=false
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Spring Boot
92
 Datasourceを2つ指定するときは
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
</bean>
<bean id="dataSourceHive" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.apache.hive.jdbc.HiveDriver"/>
</bean>
<bean class="org.springframework.batch.core
.configuration.annotation.DefaultBatchConfigurer">
<constructor-arg ref="dataSource" />
</bean>
java.lang.IllegalStateException: To use the default BatchConfigurer the context
must contain no more thanone DataSource, found 2
Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.
Source/Sinkの追加
93
API
定期レポート
@EnableBinding(Source.class)
public class ReportJobSender {
@Autowired
Source source;
public void send(ReportJobMessage reportJobMessage) throws
MessageHandlingException{
Message<ReportJobMessage> message =
MessageBuilder.withPayload(reportJobMessage).build();
source.output().send(message);
}
}
@EnableBinding(Sink.class)
public class JobRequestListener {
//..
@StreamListener(Sink.INPUT)
public void handleRequest(ReportJobQueueMessage reportJobQueueMessage) {
Long reportJobId = reportJobQueueMessage.getBody().getJobId();
JobParameters jobParameters = new JobParametersBuilder()
.addLong("reportJobId", reportJobId)
.addDate("currentDate", currentDate).toJobParameters();
JobExecution jobExecution = jobLauncher.run(job, jobParameters);
}
}
レポート作成

More Related Content

What's hot

マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
Jenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命があるJenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命があるJumpei Miyata
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたKohei Nakamura
 
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務Yutaka Kachi
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?土岐 孝平
 
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4CloudNativeな決済サービスの開発と2年間の歩み #sf_A4
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4Junya Suzuki
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
MuleアプリケーションのCI/CD
MuleアプリケーションのCI/CDMuleアプリケーションのCI/CD
MuleアプリケーションのCI/CDMuleSoft Meetup Tokyo
 
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングLINE Corporation
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 

What's hot (20)

マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Jenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命があるJenkinsfileのlintで救える命がある
Jenkinsfileのlintで救える命がある
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
 
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
 
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4CloudNativeな決済サービスの開発と2年間の歩み #sf_A4
CloudNativeな決済サービスの開発と2年間の歩み #sf_A4
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
MuleアプリケーションのCI/CD
MuleアプリケーションのCI/CDMuleアプリケーションのCI/CD
MuleアプリケーションのCI/CD
 
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 

Viewers also liked

Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Logico
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Kosuke Kida
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy yank
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求hajime funaki
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2Kazuhiro Wada
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project JigsawYuichi Sakuraba
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~Yoshio Kajikuri
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門Masaya Dake
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 

Viewers also liked (20)

Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 

Similar to ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4

行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋Yahoo!デベロッパーネットワーク
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①Yahoo!デベロッパーネットワーク
 
大規模インフラで考える インフラチームの未来
大規模インフラで考える インフラチームの未来大規模インフラで考える インフラチームの未来
大規模インフラで考える インフラチームの未来Masayuki Ueda
 
ディップ株式会社_kintonehive
ディップ株式会社_kintonehiveディップ株式会社_kintonehive
ディップ株式会社_kintonehiveCybozucommunity
 
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介Daisuke Ikeda
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfesYahoo!デベロッパーネットワーク
 
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望Yahoo!デベロッパーネットワーク
 
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったことMasayuki Ueda
 
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnightヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnightYahoo!デベロッパーネットワーク
 
Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Shigeki Morizane
 

Similar to ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4 (20)

行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
 
市場で勝ち続けるための品質とテストの技術①
市場で勝ち続けるための品質とテストの技術①市場で勝ち続けるための品質とテストの技術①
市場で勝ち続けるための品質とテストの技術①
 
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Prestoクエリログの保存/分析機能の構築 #yjdsnightPrestoクエリログの保存/分析機能の構築 #yjdsnight
Prestoクエリログの保存/分析機能の構築 #yjdsnight
 
Yahoo!ニュースにおける開発手法の取り組み
Yahoo!ニュースにおける開発手法の取り組みYahoo!ニュースにおける開発手法の取り組み
Yahoo!ニュースにおける開発手法の取り組み
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
 
大規模インフラで考える インフラチームの未来
大規模インフラで考える インフラチームの未来大規模インフラで考える インフラチームの未来
大規模インフラで考える インフラチームの未来
 
ディップ株式会社_kintonehive
ディップ株式会社_kintonehiveディップ株式会社_kintonehive
ディップ株式会社_kintonehive
 
Design pattern in presto source code
Design pattern in presto source codeDesign pattern in presto source code
Design pattern in presto source code
 
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
 
Storm の新機能について @HSCR #hadoopreading
Storm の新機能について @HSCR #hadoopreadingStorm の新機能について @HSCR #hadoopreading
Storm の新機能について @HSCR #hadoopreading
 
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
私たち企業がアクセシビリティに取り組む理由(2018年) #accfes
 
Hive on Tezのベストプラクティス
Hive on TezのベストプラクティスHive on Tezのベストプラクティス
Hive on Tezのベストプラクティス
 
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
Yahoo!プロモーション広告のビックデータ基盤を支える技術と今後の展望
 
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
 
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnightヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
 
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo!ブラウザーにおける市場環境の分析と戦略化
 
Presto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnightPresto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
 
全社デザインシステムとサービスの付き合い方
 全社デザインシステムとサービスの付き合い方 全社デザインシステムとサービスの付き合い方
全社デザインシステムとサービスの付き合い方
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629
 

More from Yahoo!デベロッパーネットワーク

ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcYahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcYahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtcYahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcYahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcYahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcYahoo!デベロッパーネットワーク
 

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

Recently uploaded

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也harmonylab
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...yoshidakids7
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 

Recently uploaded (13)

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
【修士論文】代替出勤者の選定業務における依頼順決定方法に関する研究   千坂知也
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
Summary of "ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language M...
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 

ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4

  • 1. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 塩野 貴義, 橋本 尚亮 ヤフーの広告 レポートシステムを Spring Cloud Stream化 するまで 2017年5月20日
  • 2. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.2 塩野 貴義 ■家族構成 妻、息子2人(9歳♂双子) ■趣味 車、バイク ■経歴 2011/08 ヤフーに転職 2013/10 レポートシステム 2017/04 集計システム 自己紹介
  • 3. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.3 橋本 尚亮 ■家族構成 独身 ■趣味 音楽鑑賞 ■経歴 2016/04 ヤフーに新卒入社 2016/09 レポートシステム 自己紹介
  • 4. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 概要 4 第一世代 第二世代 第三世代 2013 2015 2017
  • 5. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 5 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 6. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 6 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 7. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートについて 7  お客様(広告主)が入稿した広告の配 信実績を確認するためのレポート  レポート出力する項目や集計単位は 指定可能
  • 8. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートのユースケース 8  通常レポート • API経由で作成リクエストを受け取る • 常時稼働 • レポート作成は非同期で行う Request Job 登録 Report job Report 作成 Job取得 API Batch API Batch
  • 9. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートのユースケース 9  定期レポート • 定期レポートとして登録されているレ ポートのJobを一括登録する • 毎朝1回 • レポート作成方法は通常レポートと同じ Report job Report 作成 Job取得 定期 レポート Job 登録 Batch Batch
  • 10. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートのユースケース 10  通常レポート • 常時稼働、約25万レポート/日  定期レポート • 毎朝1回、約5万レポート/日 Request Job 登録 Report job Report 作成 Job取得 定期 レポート Job 登録 API Batch Batch
  • 11. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. レポートのリクエスト数 11 80,000 150,000 300,000 第一世代(2014) 第二世代(2016) 第三世代(2017) インターネット広告市場の拡大に伴い レポート作成の リクエスト数は年々増加
  • 12. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートシステム全体 12 Request Job 登録 Report job Report 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 API Batch Batch Batch
  • 13. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 13 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 14. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 14 Request Job 登録 Report job Report 作成 メール 送信 定期 レポート Job 登録 配信ログ集計 ストレージ2次集計 日次夜間集計
  • 15. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 15 Request Job 登録 Report job Report 作成 メール 送信 定期 レポート Job 登録 配信ログ集計 ストレージ2次集計 日次夜間集計
  • 16. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 16 Request Job 登録 Report job Report 作成 メール 送信 定期 レポート Job 登録 配信ログ集計 ストレージ2次集計 日次夜間集計
  • 17. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Report 作成 第一世代 17 Request Job 登録 Report job Job取得 メール 送信 定期 レポート Job 登録 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計 Job取得
  • 18. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 18 Request Job 登録 Report 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 ストレージ2次集計 Report job 配信ログ集計 日次夜間集計
  • 19. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 19 Request Job 登録 Report job Report 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計 二次集計 処理時間:4時間以上 集計結果容量:1TB以上/日
  • 20. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代の課題 20  開発が複雑 • 全ての処理が依存しあっていて影響範囲が広い • テストパターンが網羅しきれない • 2000行以上の設定ファイルを共有 • Objectは全てArray • 改修・拡張でコードが複雑化 • 動的型付けで想定外の挙動 • 開発サーバ上でVimによる開発  運用コストが高い • リカバリの再集計は複数人で半日以上 • ファイルの欠損等で月に数回リカバリ作業が発生
  • 21. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代の課題 21  開発が複雑 • 全ての処理が依存しあっていて影響範囲が広い • テストパターンが網羅しきれない • 2000行以上の設定ファイルを共有 • Objectは全てArray • 改修・拡張でコードが複雑化 • 動的型付けで想定外の挙動 • 開発サーバ上でVimによる開発  運用コストが高い • リカバリの再集計は複数人で半日以上 • ファイルの欠損等で月に数回リカバリ作業が発生 - 品質を担保できない - 開発に時間がかかりすぎてログ量の 増加や機能拡張に追いつけない - ぐっすり眠れない
  • 22. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. なんとかしたい 22  開発スピードを上げたい  運用をもっと楽にして開発に集中 したい  ぐっすり寝たい
  • 23. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 23 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 24. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代(2014) 24 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計
  • 25. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 25 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計
  • 26. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 26 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計
  • 27. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代から第二世代へ 27  Java / Spring Batch • DIコンテナによる疎結合とテストの充実 • 静的型付けで安心 • ライブラリが充実 • IDE  Hive on Tez • 二次集計が不要 • 保守するコード量が激減 • 自由度高く実績取得可能  運用 • ぐっすり眠れるようになった
  • 28. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代から第二世代へ 28 詳しくはこちら JJUG CCC 2016 Spring 広告システム刷新の舞台裏 PHPからJavaに変えてみました https://www.slideshare.net/techblogyahoo/jjugccc-cccf1-phpjava
  • 29. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 29 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計
  • 30. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 問題発生 30 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 二次集計をなくしたことで配信実績 取得にかかる時間が増加 全体のスループットの低下
  • 31. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 31 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計
  • 32. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 32 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成
  • 33. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 33 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 これで解決?
  • 34. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 34 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成
  • 35. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 35 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・
  • 36. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 36 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成
  • 37. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 37 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・
  • 38. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 38 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成
  • 39. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 39 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成
  • 40. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 40 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成
  • 41. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 41 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成
  • 42. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代の課題 レポート作成Batchをスケールアウト RDBへのポーリングのアクセス数が増大 RDBが高負荷 他のシステムにも影響 42
  • 43. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 43 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 44. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 44 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成
  • 45. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017) 45 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 MQ?
  • 46. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017) 46 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 MQ? レポート作成を イベントドリブンに行いたい
  • 47. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Stream 47  message-driven microservices  Spring Boot  consumer groups  binder abstraction http://cloud.spring.io/spring-cloud-stream/
  • 48. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Stream 48 Source Sink output input 定期 レポート API レポート 作成
  • 49. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017) 49 レポート 作成 Request Job登録 Job登録 定期 レポート ・・・ ・・・ レポート 作成 レポート 作成
  • 50. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.  共通のdestinationを設定するだけで簡単にアプ リケーション間が接続される 第三世代(2017) 50 レポート 作成 Request Job登録 Job登録 定期 レポート ・・・ ・・・ レポート 作成 spring.cloud.stream. bindings.output.destination =reporting spring.cloud.stream. bindings.input.destination =reporting reporting
  • 51. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. レポート 作成 Request Job登録 Job登録 定期 レポート ・・・ ・・・ レポート 作成 レポート 作成 reporting 第三世代(2017) 51 {jobId:1002}{jobId:1002}{jobId:1002} {jobId:1002} {jobId:1002} {jobId:1002}
  • 52. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.  設定1つで簡単にconsumer groupが作れるためス ケールアウトが容易 spring.cloud.stream.bindings .input.group=ydnrep レポート 作成 Request Job登録 Job登録 定期 レポート ・・・ ・・・ レポート 作成 レポート 作成 第三世代(2017) 52 reporting .ydnrep {jobId:1002} ydnrep {jobId:1002}
  • 53. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. リリース 53 第二世代から第三世代へのリリースを ダウンタイム0で行いたい 0. 旧システム稼働中 1. 新システムデプロイ 2. 新シスステムサービスイン 3. 旧シスステムAPIサービスアウト 4. 旧シスステムBatchサービスアウト
  • 54. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 54 0.旧システム稼働中 Request Job 登録 Report job レポート作成 ・・・ Job取得
  • 55. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 55 1.新システムデプロイ Request Job 登録 Report job レポート作成 ・・・ Job取得 reporting .ydnrep
  • 56. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 56 2.新システムサービスイン Request Job 登録 Report job レポート作成 ・・・ Request Job 登録 Job取得 レポート作成 reporting .ydnrep
  • 57. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 57 3.旧システムAPIサービスアウト Report job レポート作成 ・・・ Request Job 登録 Job取得 レポート作成 reporting .ydnrep
  • 58. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 58 4.旧システムBatchサービスアウト Report job ・・・ Request Job 登録 レポート作成 reporting .ydnrep
  • 59. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 59 4.旧システムBatchサービスアウト Report job ・・・ Request Job 登録 レポート作成 ダウンタイム0でリリース完了! reporting .ydnrep
  • 60. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 60  リリースして動作確認
  • 61. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 61  RabbitMQの管理画面
  • 62. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 62  RabbitMQの管理画面
  • 63. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 63  RabbitMQの管理画面
  • 64. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能評価  レポート作成プロセス数:558  ポーリング時のSQL発行数/h • 第二世代: 16,928 • 第三世代: 0  レポート作成数/h • 第二世代: 44,121 • 第三世代: 63,934 64
  • 65. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017)  イベントドリブンにレポート作成 Jobを取得できるようになりRDB の負荷が減った  1時間あたりの処理数も増えた 65
  • 66. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017)  イベントドリブンにレポート作成 Jobを取得できるようになりRDB の負荷が減った  1時間あたりの処理数も増えた めでたしめでたし、、、 66
  • 67. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 問題発生  イベントドリブンにレポート作成 Jobを取得できるようになりRDB の負荷が減った  1時間あたりの処理数も増えた めでたしめでたし、、、 67 SQL [INSERT into BATCH_JOB_EXECUTION_PARAMS(JOB_EXECUTION_ID, KEY_NAME, TYPE_CD, STRING_VAL, DATE_VAL, LONG_VAL, DOUBLE_VAL, IDENTIFYING) values (?, ?, ?, ?, ?, ?, ?, ?)]; ORA-08177: can't serialize access for this transaction
  • 68. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 68 レポート 作成 定期 レポート ・・・ ・・・ {jobId:1002, ・・・ jobId:51002}
  • 69. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 69 レポート 作成 定期 レポート ・・・ ・・・ {jobId:1002, ・・・ jobId:51002} {jobId:1002} {jobId:1003} {jobId:1503}
  • 70. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 70 レポート 作成 定期 レポート ・・・ ・・・ Spring Batchの Job管理テーブルに 同時に大量のINSERT ・・・ {jobId:1002, ・・・ jobId:51002} {jobId:1002} {jobId:1003} {jobId:1503}
  • 71. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 71 レポート 作成 定期 レポート ・・・ ・・・ Spring Batchの Job管理テーブルに 同時に大量のINSERT ・・・ {jobId:1002, ・・・ jobId:51002} {jobId:1003} {jobId:1503} 3回失敗すると メッセージは消失
  • 72. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 対策(1/2) 72 レポート 作成 reporting .ydnrep ・・・ ・・・ ydnrep レポート 作成 定期 レポート  maxAttemptの上限を上げる spring.cloud.stream.bindings. input.consumer.maxAttempts=5
  • 73. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 対策(2/2) 73 レポート 作成 reporting .ydnrep ・・・ ・・・ ydnrep レポート 作成 reporting .ydnrep.dlq 定期 レポート  Dead Letter Queue を用意 spring.cloud.stream.rabbit.bind ings.input.consumer.autoBindDlq =true {jobId:1002} エラー処理
  • 74. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 対策(2/2) 74 レポート 作成 reporting .ydnrep ・・・ ・・・ ydnrep レポート 作成 reporting .ydnrep.dlq 定期 レポート  Dead Letter Queue を用意 {jobId:1002} メッセージを 送信し直す
  • 75. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 対策(2/2) 75 レポート 作成 reporting .ydnrep ・・・ ・・・ ydnrep レポート 作成 reporting .ydnrep.dlq 定期 レポート  Dead Letter Queue を用意 {jobId:1002} メッセージを 送信し直す 根本的な解決になっていない
  • 76. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 対策(2/2) 76 レポート 作成 reporting .ydnrep ・・・ ・・・ ydnrep レポート 作成 reporting .ydnrep.dlq 定期 レポート  Dead Letter Queue を用意 {jobId:1002} メッセージを 送信し直す Job RepositoryがDBアクセスしない方法を調査中 *常駐バッチのためJob Repositoryを インメモリ化できない
  • 77. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 77 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 78. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代(2014) 第二世代(2016) 第三世代(2017) まとめ 78
  • 79. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代(2014) 第二世代(2016) 第三世代(2017) まとめ 79
  • 80. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. まとめ 80  刷新をする度に課題がバックエンドに移動  ポーリング型からイベントドリブンに変更するこ とでスループット向上  大規模システムはリリースしてからが勝負  Spring歴1年未満の私でもmicroservicesが簡単 に作れました
  • 81. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  他サービスのSpring Cloud Stream化
  • 82. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  ミドルウェアの比較・検討
  • 83. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  Cloud Foundryへの移行
  • 84. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  興味がある方は是非!
  • 85. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから  他サービスのSpring Cloud Stream化  ミドルウェアの比較・検討  Cloud Foundryへの移行  興味がある方は是非!
  • 86. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 86 1. 広告レポートシステムについて 2. 第一世代~PHP&Perl~ 3. 第二世代~Spring Batch&Hive~ 4. 第三世代~Spring Cloud Stream~ 5. まとめ 6. tips
  • 87. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Streamの実装 87
  • 88. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Streamの実装 88  API, BatchのSpring Boot化  Source/Sinkの追加
  • 89. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Boot 89  Application起動クラスの追加  application.properties で設定を 管理  API : war->jar (embedded jetty)  Batch:苦戦
  • 90. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Boot 90  第二世代Batch : • 1つのjarに複数の機能 • 実行時にjobIdを指定  第三世代Batch : • 1application/jar • 単発batch(定期レポート) • 常駐batch(レポート作成, メール送信) spring.batch.job.enabled=true spring.batch.job.enabled=false
  • 91. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Boot 91  1サーバに複数プロセス • Web appとして起動するさせてしまうと portの管理が必要 • *Spring Boot 2.0では非推奨.代わりにWebApplicationType https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release- Notes spring.main.web-environment=false
  • 92. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Boot 92  Datasourceを2つ指定するときは <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> </bean> <bean id="dataSourceHive" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.apache.hive.jdbc.HiveDriver"/> </bean> <bean class="org.springframework.batch.core .configuration.annotation.DefaultBatchConfigurer"> <constructor-arg ref="dataSource" /> </bean> java.lang.IllegalStateException: To use the default BatchConfigurer the context must contain no more thanone DataSource, found 2
  • 93. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Source/Sinkの追加 93 API 定期レポート @EnableBinding(Source.class) public class ReportJobSender { @Autowired Source source; public void send(ReportJobMessage reportJobMessage) throws MessageHandlingException{ Message<ReportJobMessage> message = MessageBuilder.withPayload(reportJobMessage).build(); source.output().send(message); } } @EnableBinding(Sink.class) public class JobRequestListener { //.. @StreamListener(Sink.INPUT) public void handleRequest(ReportJobQueueMessage reportJobQueueMessage) { Long reportJobId = reportJobQueueMessage.getBody().getJobId(); JobParameters jobParameters = new JobParametersBuilder() .addLong("reportJobId", reportJobId) .addDate("currentDate", currentDate).toJobParameters(); JobExecution jobExecution = jobLauncher.run(job, jobParameters); } } レポート作成