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

1,017 views
836 views

Published on

SmartNewsのニュース配信を支えるサーバ技術
@ JJUG CCC 2016 Spring
Speaker by Kazhiro Sera @ SmartNews,Inc.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,017
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

×