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.

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

4,410 views

Published on

インターネット広告市場の拡大に伴い、ヤフーの広告レポート作成数は年間約2倍のペースで増え続けています。
処理サーバを増やすことで大量のレポートを作成することはできますが、既存のRDBによるジョブ管理システムでは並列数を上げていくと、RDBが高負荷となり耐えきれなくなるという問題に直面します。
この問題を解決するためにSpring Cloud Streamを導入した経緯を他の課題の変遷も交えてお話します。

Published in: Technology
  • Be the first to comment

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

  1. 1. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 塩野 貴義, 橋本 尚亮 ヤフーの広告 レポートシステムを Spring Cloud Stream化 するまで 2017年5月20日
  2. 2. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.2 塩野 貴義 ■家族構成 妻、息子2人(9歳♂双子) ■趣味 車、バイク ■経歴 2011/08 ヤフーに転職 2013/10 レポートシステム 2017/04 集計システム 自己紹介
  3. 3. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.3 橋本 尚亮 ■家族構成 独身 ■趣味 音楽鑑賞 ■経歴 2016/04 ヤフーに新卒入社 2016/09 レポートシステム 自己紹介
  4. 4. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 概要 4 第一世代 第二世代 第三世代 2013 2015 2017
  5. 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. 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. 7. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートについて 7  お客様(広告主)が入稿した広告の配 信実績を確認するためのレポート  レポート出力する項目や集計単位は 指定可能
  8. 8. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートのユースケース 8  通常レポート • API経由で作成リクエストを受け取る • 常時稼働 • レポート作成は非同期で行う Request Job 登録 Report job Report 作成 Job取得 API Batch API Batch
  9. 9. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 広告レポートのユースケース 9  定期レポート • 定期レポートとして登録されているレ ポートのJobを一括登録する • 毎朝1回 • レポート作成方法は通常レポートと同じ Report job Report 作成 Job取得 定期 レポート Job 登録 Batch Batch
  10. 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. 11. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. レポートのリクエスト数 11 80,000 150,000 300,000 第一世代(2014) 第二世代(2016) 第三世代(2017) インターネット広告市場の拡大に伴い レポート作成の リクエスト数は年々増加
  12. 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. 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. 14. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 14 Request Job 登録 Report job Report 作成 メール 送信 定期 レポート Job 登録 配信ログ集計 ストレージ2次集計 日次夜間集計
  15. 15. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 15 Request Job 登録 Report job Report 作成 メール 送信 定期 レポート Job 登録 配信ログ集計 ストレージ2次集計 日次夜間集計
  16. 16. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 16 Request Job 登録 Report job Report 作成 メール 送信 定期 レポート Job 登録 配信ログ集計 ストレージ2次集計 日次夜間集計
  17. 17. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Report 作成 第一世代 17 Request Job 登録 Report job Job取得 メール 送信 定期 レポート Job 登録 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計 Job取得
  18. 18. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 18 Request Job 登録 Report 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 ストレージ2次集計 Report job 配信ログ集計 日次夜間集計
  19. 19. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代 19 Request Job 登録 Report job Report 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計 二次集計 処理時間:4時間以上 集計結果容量:1TB以上/日
  20. 20. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代の課題 20  開発が複雑 • 全ての処理が依存しあっていて影響範囲が広い • テストパターンが網羅しきれない • 2000行以上の設定ファイルを共有 • Objectは全てArray • 改修・拡張でコードが複雑化 • 動的型付けで想定外の挙動 • 開発サーバ上でVimによる開発  運用コストが高い • リカバリの再集計は複数人で半日以上 • ファイルの欠損等で月に数回リカバリ作業が発生
  21. 21. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代の課題 21  開発が複雑 • 全ての処理が依存しあっていて影響範囲が広い • テストパターンが網羅しきれない • 2000行以上の設定ファイルを共有 • Objectは全てArray • 改修・拡張でコードが複雑化 • 動的型付けで想定外の挙動 • 開発サーバ上でVimによる開発  運用コストが高い • リカバリの再集計は複数人で半日以上 • ファイルの欠損等で月に数回リカバリ作業が発生 - 品質を担保できない - 開発に時間がかかりすぎてログ量の 増加や機能拡張に追いつけない - ぐっすり眠れない
  22. 22. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. なんとかしたい 22  開発スピードを上げたい  運用をもっと楽にして開発に集中 したい  ぐっすり寝たい
  23. 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. 24. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代(2014) 24 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計
  25. 25. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 25 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 ストレージ2次集計 日次夜間集計
  26. 26. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 26 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計
  27. 27. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代から第二世代へ 27  Java / Spring Batch • DIコンテナによる疎結合とテストの充実 • 静的型付けで安心 • ライブラリが充実 • IDE  Hive on Tez • 二次集計が不要 • 保守するコード量が激減 • 自由度高く実績取得可能  運用 • ぐっすり眠れるようになった
  28. 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. 29. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 29 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計
  30. 30. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 問題発生 30 Request Job 登録 Report job レポート 作成 Job取得 メール 送信 定期 レポート Job 登録 Job取得 配信実績取得 配信ログ集計 二次集計をなくしたことで配信実績 取得にかかる時間が増加 全体のスループットの低下
  31. 31. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 31 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計
  32. 32. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 32 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成
  33. 33. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 33 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 これで解決?
  34. 34. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 34 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成
  35. 35. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 35 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・
  36. 36. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 36 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成
  37. 37. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 37 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・
  38. 38. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 38 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成
  39. 39. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 39 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成
  40. 40. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 40 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成
  41. 41. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 解決策 41 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成
  42. 42. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代の課題 レポート作成Batchをスケールアウト RDBへのポーリングのアクセス数が増大 RDBが高負荷 他のシステムにも影響 42
  43. 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. 44. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第二世代(2016) 44 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 Report job 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成
  45. 45. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017) 45 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 MQ?
  46. 46. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017) 46 Request Job 登録 レポート 作成 Job取得 定期 レポート Job 登録 配信実績取得 配信ログ集計 レポート 作成 ・・・ レポート 作成 レポート 作成 ・・・ レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 レポート 作成 MQ? レポート作成を イベントドリブンに行いたい
  47. 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. 48. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Stream 48 Source Sink output input 定期 レポート API レポート 作成
  49. 49. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017) 49 レポート 作成 Request Job登録 Job登録 定期 レポート ・・・ ・・・ レポート 作成 レポート 作成
  50. 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. 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. 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. 53. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. リリース 53 第二世代から第三世代へのリリースを ダウンタイム0で行いたい 0. 旧システム稼働中 1. 新システムデプロイ 2. 新シスステムサービスイン 3. 旧シスステムAPIサービスアウト 4. 旧シスステムBatchサービスアウト
  54. 54. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 54 0.旧システム稼働中 Request Job 登録 Report job レポート作成 ・・・ Job取得
  55. 55. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 55 1.新システムデプロイ Request Job 登録 Report job レポート作成 ・・・ Job取得 reporting .ydnrep
  56. 56. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 56 2.新システムサービスイン Request Job 登録 Report job レポート作成 ・・・ Request Job 登録 Job取得 レポート作成 reporting .ydnrep
  57. 57. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 57 3.旧システムAPIサービスアウト Report job レポート作成 ・・・ Request Job 登録 Job取得 レポート作成 reporting .ydnrep
  58. 58. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 58 4.旧システムBatchサービスアウト Report job ・・・ Request Job 登録 レポート作成 reporting .ydnrep
  59. 59. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ・・・ リリース 59 4.旧システムBatchサービスアウト Report job ・・・ Request Job 登録 レポート作成 ダウンタイム0でリリース完了! reporting .ydnrep
  60. 60. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 60  リリースして動作確認
  61. 61. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 61  RabbitMQの管理画面
  62. 62. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 62  RabbitMQの管理画面
  63. 63. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能比較 63  RabbitMQの管理画面
  64. 64. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 性能評価  レポート作成プロセス数:558  ポーリング時のSQL発行数/h • 第二世代: 16,928 • 第三世代: 0  レポート作成数/h • 第二世代: 44,121 • 第三世代: 63,934 64
  65. 65. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017)  イベントドリブンにレポート作成 Jobを取得できるようになりRDB の負荷が減った  1時間あたりの処理数も増えた 65
  66. 66. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第三世代(2017)  イベントドリブンにレポート作成 Jobを取得できるようになりRDB の負荷が減った  1時間あたりの処理数も増えた めでたしめでたし、、、 66
  67. 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. 68. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 68 レポート 作成 定期 レポート ・・・ ・・・ {jobId:1002, ・・・ jobId:51002}
  69. 69. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 69 レポート 作成 定期 レポート ・・・ ・・・ {jobId:1002, ・・・ jobId:51002} {jobId:1002} {jobId:1003} {jobId:1503}
  70. 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. 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. 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. 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. 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. 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. 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. 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. 78. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代(2014) 第二世代(2016) 第三世代(2017) まとめ 78
  79. 79. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 第一世代(2014) 第二世代(2016) 第三世代(2017) まとめ 79
  80. 80. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. まとめ 80  刷新をする度に課題がバックエンドに移動  ポーリング型からイベントドリブンに変更するこ とでスループット向上  大規模システムはリリースしてからが勝負  Spring歴1年未満の私でもmicroservicesが簡単 に作れました
  81. 81. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  他サービスのSpring Cloud Stream化
  82. 82. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  ミドルウェアの比較・検討
  83. 83. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  Cloud Foundryへの移行
  84. 84. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから ・・・レポート 作成 API メール 送信 定期 レポート  興味がある方は是非!
  85. 85. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. これから  他サービスのSpring Cloud Stream化  ミドルウェアの比較・検討  Cloud Foundryへの移行  興味がある方は是非!
  86. 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. 87. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Streamの実装 87
  88. 88. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Cloud Streamの実装 88  API, BatchのSpring Boot化  Source/Sinkの追加
  89. 89. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Spring Boot 89  Application起動クラスの追加  application.properties で設定を 管理  API : war->jar (embedded jetty)  Batch:苦戦
  90. 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. 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. 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. 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); } } レポート作成

×