smartnewsのニュース配信を支えるサーバ技術 / kazhiro sera @ smartnews,inc. #jjug_ccc

53
SmartNews のニュース配信 を支えるサーバ技術 Kazhiro Sera @seratch SmartNews, Inc.

Upload: smartnews-inc

Post on 18-Jan-2017

7.183 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews のニュース配信を支えるサーバ技術

Kazhiro Sera @seratchSmartNews, Inc.

Page 2: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://about.smartnews.com/ja/team/

自己紹介

2

Page 3: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews とは

3

Page 4: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

4

Page 5: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

5

Page 6: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

今日はニキビの日

http://today.smartnews.com/6

Page 7: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

7

Page 8: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews と AWS

8

Page 10: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://www.slideshare.net/smartnews/20160127-awssmartnews

利用している AWS マネージドサービス

10

Page 11: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://www.slideshare.net/smartnews/20150415-smartnews-technightrev3

今日話すのは一部です(api、engine)

11

Page 12: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://www.slideshare.net/smartnews/20150415-smartnews-technightrev3

今日話すのは一部です(api、engine)

12

Page 13: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

ニュース配信の主要な構成(最新・一部略)

13

Page 14: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

フロントエンドの配信サーバ部分(api)

14

Page 15: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

バックエンドでの記事分析(engine)

15

Page 16: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews と Java

16

Page 17: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

再掲:ニュース配信の主要な構成

17

Page 18: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

AWS マネージドサービスと話す Java アプリ群

18

Page 19: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

Java アプリケーションの実装

・Spring Boot で実装された小規模なアプリケーションを連携させる構成

・フロントエンド側はトラフィックの増減で scale out/in する Web サーバ(ASG の活用)

・engine 側は適切な粒度に分割された Java アプリケーション群

・処理結果を Java SDK で AWS マネージドサービスと連携するのが主な責務(engine 内のサービス間は主に Kinesis ストリームを介して連携)

・処理結果を S3、DynamoDB などに適宜書き出す

19

Page 20: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

実装上の工夫など

・Java8 + Lombok(@Data、@Slf4j、@ToString)

・シンプルな Java マルチスレッド処理

・一部で RxJava を使った実装

・Spring Boot + Swagger を使った API 仕様の公開

・Apache Spark の活用は Scala で実装するのが主流

・最近 Kotlin で書いているアプリケーションも

20

Page 21: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

一方 itamae を始め DevOps 系は Ruby 中心

21

Page 22: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

DevOps は SRE チームとの共同作業

・SRE(Site Reliability Engineering)Team

・itamae-kitchen/itamae for provisioning

・winebarrel/roadworker for Route 53 management

・fluent/fluentd for log aggregation

http://dev.classmethod.jp/study_meeting/classmethod-smartnews-awsnight/22

Page 24: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

データサイエンスを活かすサービス構成

24

Page 25: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

バックエンドでの記事分析(engine)

25

Page 26: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://www.slideshare.net/smartnews/20150415-smartnews-technightrev3

バックエンドでの記事分析(engine)

26

Page 27: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://www.slideshare.net/smartnews/smart-news-webmining

記事分析基盤の概要(1)

27

Page 31: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

GitHub から始まる開発ワークフロー

31

Page 32: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

開発ワークフロー

・GitHub の Pull Request をコードレビュー

・GitHub の PR を自動で JIRA issue と連携

・QA テスト確認した後 master へ merge 〜 CodeDeploy

・CircleCI ジョブがテスト実行だけでなく、ビルド成果物を S3 にアップロード、

CodeDeploy ジョブを kick するところまでやる

・itamae レシピ、Routefile も GitHub 上でレビューしてから反映

・さらに NewRelic、Datadog、Slack、PagerDuty の活用

32

Page 33: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

開発 〜 デプロイ

33

Page 34: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

http://developer.smartnews.com/blog/2015/10/01/20151001itamae-autoscaling-codedeploy/

GitHub 〜 CircleCI 〜 CodeDeploy

CircleCI でのビルドでS3 に置かれたリリースバイナリをCodeDeploy でEC2 インスタンス側から取得して切り替え

34

Page 35: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

CircleCI Configuration (circle.yml)

http://developer.smartnews.com/blog/2015/10/01/20151001itamae-autoscaling-codedeploy/

プロジェクト毎の差分がある場合はcircle.yml で調整することもある

35

Page 36: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

GitHub Pull Request Template

開発フローの明確化デプロイに関する暗黙知をなくす

36

Page 37: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

運用監視

37

Page 38: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

Datadog

Datadog

38

Page 39: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews と Datadog (2015.02)

https://speakerdeck.com/takus/smartnews-to-datadog

一年以上前の @takus の発表資料が詳しい今では完全に SmartNews のインフラになっています

39

Page 40: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

Metrics をつくる

Datadog Agent でデータを送るようにしたらUI からメトリクスを可視化するだけ

40

Page 41: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

Dashboard をつくる

41

Page 42: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

Monitor をつくる

通知先は Slack やPagerDuty を指定

42

Page 43: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

Slack 連携

43

Page 44: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

New Relic

フロントエンドの Web サーバだけでなくengine 側のオフラインバッチ処理もNon-Web transaction として trace する

44

Page 45: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

PagerDuty

45

Page 46: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

緊急時に電話・SMS がくるよう設定

46

Page 47: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

PagerDuty Incidents

Triggered > 担当 Engineer が Acknowledge して対応 > Resolved

47

Page 48: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews Ads

48

Page 51: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

これからのSmartNews

51

Page 52: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

52

Page 53: SmartNewsのニュース配信を支えるサーバ技術 / Kazhiro Sera @ SmartNews,Inc. #jjug_ccc

SmartNews を進化させるエンジニアを募集中です

・まだまだ道半ば、世界中の人たちに使ってもらうために

・小さなチーム、大きな仕事(外部サービスの活用、適材適所な技術選択)

・SmartNews というサービスに愛着がある

・世界展開するサービスを自ら実現したい

・得意な Java / JVM で思う存分サービス開発をしたい

・データサイエンスでサービスに貢献したい

・興味のある方はぜひ懇親会でお話させてください

53