smartnewsのニュース配信を支えるサーバ技術 / kazhiro sera @ smartnews,inc. #jjug_ccc
TRANSCRIPT
SmartNews のニュース配信を支えるサーバ技術
Kazhiro Sera @seratchSmartNews, Inc.
http://about.smartnews.com/ja/team/
自己紹介
2
SmartNews とは
3
4
5
7
SmartNews と AWS
8
https://aws.amazon.com/jp/solutions/case-studies/smartnews/https://aws.amazon.com/solutions/case-studies/smartnews/ 9
http://www.slideshare.net/smartnews/20160127-awssmartnews
利用している AWS マネージドサービス
10
http://www.slideshare.net/smartnews/20150415-smartnews-technightrev3
今日話すのは一部です(api、engine)
11
http://www.slideshare.net/smartnews/20150415-smartnews-technightrev3
今日話すのは一部です(api、engine)
12
ニュース配信の主要な構成(最新・一部略)
13
フロントエンドの配信サーバ部分(api)
14
バックエンドでの記事分析(engine)
15
SmartNews と Java
16
再掲:ニュース配信の主要な構成
17
AWS マネージドサービスと話す Java アプリ群
18
Java アプリケーションの実装
・Spring Boot で実装された小規模なアプリケーションを連携させる構成
・フロントエンド側はトラフィックの増減で scale out/in する Web サーバ(ASG の活用)
・engine 側は適切な粒度に分割された Java アプリケーション群
・処理結果を Java SDK で AWS マネージドサービスと連携するのが主な責務(engine 内のサービス間は主に Kinesis ストリームを介して連携)
・処理結果を S3、DynamoDB などに適宜書き出す
19
実装上の工夫など
・Java8 + Lombok(@Data、@Slf4j、@ToString)
・シンプルな Java マルチスレッド処理
・一部で RxJava を使った実装
・Spring Boot + Swagger を使った API 仕様の公開
・Apache Spark の活用は Scala で実装するのが主流
・最近 Kotlin で書いているアプリケーションも
20
一方 itamae を始め DevOps 系は Ruby 中心
21
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
http://developer.smartnews.com/blog/2015/10/01/20151001itamae-autoscaling-codedeploy/23
データサイエンスを活かすサービス構成
24
バックエンドでの記事分析(engine)
25
http://www.slideshare.net/smartnews/20150415-smartnews-technightrev3
バックエンドでの記事分析(engine)
26
http://www.slideshare.net/smartnews/smart-news-webmining
記事分析基盤の概要(1)
27
http://www.slideshare.net/smartnews/stremspark-streaming-kinesisofflinehive
記事分析基盤の概要(2)
28
http://www.slideshare.net/smartnews/stremspark-streaming-kinesisofflinehive
ログ解析基盤の概要
29
http://www.slideshare.net/smartnews/stremspark-streaming-kinesisofflinehive
記事ランキングのアーキテクチャ
30
GitHub から始まる開発ワークフロー
31
開発ワークフロー
・GitHub の Pull Request をコードレビュー
・GitHub の PR を自動で JIRA issue と連携
・QA テスト確認した後 master へ merge 〜 CodeDeploy
・CircleCI ジョブがテスト実行だけでなく、ビルド成果物を S3 にアップロード、
CodeDeploy ジョブを kick するところまでやる
・itamae レシピ、Routefile も GitHub 上でレビューしてから反映
・さらに NewRelic、Datadog、Slack、PagerDuty の活用
32
開発 〜 デプロイ
33
http://developer.smartnews.com/blog/2015/10/01/20151001itamae-autoscaling-codedeploy/
GitHub 〜 CircleCI 〜 CodeDeploy
CircleCI でのビルドでS3 に置かれたリリースバイナリをCodeDeploy でEC2 インスタンス側から取得して切り替え
34
CircleCI Configuration (circle.yml)
http://developer.smartnews.com/blog/2015/10/01/20151001itamae-autoscaling-codedeploy/
プロジェクト毎の差分がある場合はcircle.yml で調整することもある
35
GitHub Pull Request Template
開発フローの明確化デプロイに関する暗黙知をなくす
36
運用監視
37
Datadog
Datadog
38
SmartNews と Datadog (2015.02)
https://speakerdeck.com/takus/smartnews-to-datadog
一年以上前の @takus の発表資料が詳しい今では完全に SmartNews のインフラになっています
39
Metrics をつくる
Datadog Agent でデータを送るようにしたらUI からメトリクスを可視化するだけ
40
Dashboard をつくる
41
Monitor をつくる
通知先は Slack やPagerDuty を指定
42
Slack 連携
43
New Relic
フロントエンドの Web サーバだけでなくengine 側のオフラインバッチ処理もNon-Web transaction として trace する
44
PagerDuty
45
緊急時に電話・SMS がくるよう設定
46
PagerDuty Incidents
Triggered > 担当 Engineer が Acknowledge して対応 > Resolved
47
SmartNews Ads
48
http://developer.smartnews.com/blog/2016/01/15/smartnews-technight-vol5/49
http://developer.smartnews.com/blog/2016/01/15/smartnews-technight-vol5/50
これからのSmartNews
51
52
SmartNews を進化させるエンジニアを募集中です
・まだまだ道半ば、世界中の人たちに使ってもらうために
・小さなチーム、大きな仕事(外部サービスの活用、適材適所な技術選択)
・SmartNews というサービスに愛着がある
・世界展開するサービスを自ら実現したい
・得意な Java / JVM で思う存分サービス開発をしたい
・データサイエンスでサービスに貢献したい
・興味のある方はぜひ懇親会でお話させてください
53