Slide 1

Slide 1 text

GunosyでのKinesis Analytics利⽤について 株式会社Gunosy ⼩出 幸典

Slide 2

Slide 2 text

⾃⼰紹介 • 名前 – ⼩出 幸典 (こいで ゆきのり) • 所属 – 株式会社Gunosy • 好きなAWSサービス – OpsWorks, Lambda, Kinesisファミリー, ECS

Slide 3

Slide 3 text

株式会社Gunosy – 「情報を世界中の⼈に最適に届ける」 Gunosyは 情報キュレーションサービス「グノシー」と 2016年6⽉1⽇にKDDI株式会社と共同でリリースした 無料ニュース配信アプリ「ニュースパス」を提供する 会社です。「情報を世界中の⼈に最適に届ける」を ビジョンに活動しています。 ネット上に存在するさまざまな情報を、 独⾃のアルゴリズムで収集、評価付けを⾏い ユーザーに届けます。 情報キュレーションサービス 「グノシー」 600媒体以上のニュースソースをベースに、 新たに開発した情報解析・配信技術を⽤いて⾃動的に 選定したニュースや情報をユーザーに届けます。 無料ニュース配信アプリ 「ニュースパス」

Slide 4

Slide 4 text

Gunosyと機械学習・データ分析 • Gunosyでは、様々な情報を収集し、独⾃のアルゴリズム で評価付けを⾏い、ユーザに届けています 各種コンテンツ (記事、商品、動画)

Slide 5

Slide 5 text

Gunosyと機械学習・データ分析 • ユーザの⾏動から、属性(年齢・性別・etc)を推定し、 コンテンツとのマッチングを⾏っています 各種コンテンツ (記事、商品、動画) 性別 年齢 地域... カテゴリ 著者 地域性...

Slide 6

Slide 6 text

Gunosyと機械学習・データ分析 • 本⽇はニュース領域での事例についてお話させて頂きます 各種コンテンツ (記事、商品、動画)

Slide 7

Slide 7 text

本⽇お話させていただく内容 Gunosyでどのように Kinesis Analyticsを利⽤しているか

Slide 8

Slide 8 text

なぜストリーム処理/マイクロバッチ処理をしたいのか • 「情報を世界中の⼈に最適に届ける」 – 時間(鮮度)の制約 • 情報には「鮮度」がある – 頻度(量)の制約 • ⾒せられる情報量には限りがある • どういった⼈に、どういった情報が適しているのか – 事前に「どのぐらい読まれそうか」といった推定はしているが、 ⾄近の実績値も即座にサービスにフィードバックしたい – より短い時間・より少ない試⾏で、サービスに反映したい

Slide 9

Slide 9 text

例えば • 記事クリックの(ニア)リアルタイム算出 – 「⼤域的な」傾向を掴みたい

Slide 10

Slide 10 text

Gunosyでのストリーム集計の右往左往 • 2013 mongodb Capped Collections • 2014 Redshift – fluentdのflush intervalが短すぎるとcopyが詰まってくる • 2015 Norikra – 知⾒が無さすぎて運⽤がままならず – 我々には早かった • 2016 Kinesis+Spark Streaming (on EMR) – ⾃由度は⾼い⼀⽅、開発コスト⾼し、サーバコスト⾼し – 我々にはオーバースペックだった

Slide 11

Slide 11 text

本題 Kinesis Analyticsの適⽤

Slide 12

Slide 12 text

ざっくりとした構成 • 以前よりfluentdを利⽤してログ配送をしていた – 同じログをStreams/Firehoseに送る • fluent-plugin-kinesis • Kinesis Analyticsはまだ東京へは来ていないので、他リージョンへ Web servers (fluentd) Kinesis Firehose S3 (backup) Kinesis Analytics Elastic Search Service summary log Mobile apps Source Stream log Tokyo Oregon Kinesis Firehose

Slide 13

Slide 13 text

Reference Dataの追加 • ユーザのセグメント別の集計 – どういったユーザが興味を⽰しているのか • S3にセグメント情報を配置 • ログにセグメント情報を付加し、セグメント別に集計 S3 User–Data Reference Data Web servers (fluentd) Kinesis Firehose S3 (backup) Kinesis Analytics Elastic Search Service summary log Mobile apps Source Stream log Kinesis Firehose

Slide 14

Slide 14 text

SQL例 • ⼀度中間ストリームを作る – Source StreamとReference DataをJOIN

Slide 15

Slide 15 text

SQL例 • 中間ストリームのデータを1分おきに集計して、出⼒へ

Slide 16

Slide 16 text

クエリ結果のイメージ • ユーザのセグメント毎に、傾向を知ることができる

Slide 17

Slide 17 text

サービスへのフィードバック(出⼒) • 現在のところバッチサーバからESSへ取りに⾏っている – ESSはIAM Roleでアクセス制御できる • クロスリージョンやVPCを意識しなくて良い – ESの集計関数が使える Web servers (fluentd) Kinesis Firehose S3 (backup) Kinesis Analytics Elastic Search Service summary log Mobile apps Source Stream log Tokyo Oregon Kinesis Firehose Batch Server Tokyo

Slide 18

Slide 18 text

Tips

Slide 19

Slide 19 text

東京リージョンのStreamsから他リージョンへの転送 • クライアントから直接ログを投げ込んでいるケース – 余り⼿をかけてコンシューマを開発したくない • Lambdaも試したが、スループットの⾯で厳しかった Kinesis Streams log Mobile apps Tokyo Oregon Kinesis Streams ?

Slide 20

Slide 20 text

東京リージョンのStreamsから他リージョンへの転送 • コンシューマとしてfluentdを利⽤ – inputプラグインで東京のStreamsから取り出し • outputプラグインで他リージョンのStreams/Firehoseへ転送 • タグによるルーティングや、必要に応じて整形を実施 Kinesis Streams Mobile apps Tokyo Oregon Kinesis Streams fluentd server

Slide 21

Slide 21 text

利⽤していての所感

Slide 22

Slide 22 text

まとめ • 開発が楽になった – IAMの設定は⼤変だが省⼒化できる – クエリだけ集中して考えれば良い • 運⽤も楽になった – フルマネージド – 但し、前後(Streams/Firehose)の流量には注意 • サーバコストも安くなった – ※もちろん、ケース次第です → トータルコストの削減+デリバリの短縮へ

Slide 23

Slide 23 text

宣伝 • エンジニアブログやっています http://data.gunosy.io/ http://tech.gunosy.io/

Slide 24

Slide 24 text

終わりに • ご清聴ありがとうございました