Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバサイドの技術スタック・アーキテクチャ総ざらい - SmartNews Tech Night in Fukuoka Vol.1

サーバサイドの技術スタック・アーキテクチャ総ざらい - SmartNews Tech Night in Fukuoka Vol.1

Nobutoshi Ogata

May 28, 2019
Tweet

More Decks by Nobutoshi Ogata

Other Decks in Technology

Transcript

  1. 1. はじめに 2. 自己紹介 3. SmartNews とは 4. SmartNews の技術スタック

    5. ニュースが配信される流れと規模 6. ニュース配信のアーキテクチャ 7. おわりに Agenda
  2. 尾形暢俊 (Nobutoshi Ogata) • Engineering Manager, Site Reliability Engineering •

    2015 年 5 月に入社し、開発基盤やインフラ周りの整備を担当 • 2016 年より SRE チームを立ち上げ、Engineering Manager に • ゲームと車と猫と酒で出来ています 自己紹介 @nobu666
  3. • スマートフォン・タブレット向けニュースアプリ • 日米 4,000 万以上のダウンロード • 月間利用者数 (MAU) 1,000

    万人以上 • マスコットキャラクターは地球くん SmartNews とは http://about.smartnews.com/ja/2019/02/20/20190220/
  4. • 基本的には AWS + Amazon Linux • CDN は Akamai(一部

    CloudFront) + WAF • Java 8 → 11 ◦ 一部 Ruby, Golang, Scala, Kotlin SmartNews の技術スタック
  5. • Online ◦ ALB(CLB) + ASG + EC2 ▪ nginx

    + Spring Boot embedded Tomcat ◦ ALB + ECS ▪ nginx + Consul Template ◦ EKS (検証中) • DMP ◦ EMR, Airflow, Hive LLAP, Presto ◦ Chartio, Superset, Jupyter SmartNews の技術スタック
  6. • Instance Provisioning ◦ AMI に共通で必要なものを焼き込み ◦ インスタンスがタグによって自律的に必要なものを Provisioning ◦

    Code Deploy によりアプリケーションを Deploy • itamae, Terraform, CircleCI, Jenkins, VAddy SmartNews の技術スタック
  7. Online のアーキテクチャ • メインのサービスは ◦ API gateway under L7 LB

    (ALB) ◦ search engine ◦ personalized engine • API gateway では ◦ 複数のデータソースから非同期に結果を取得 ◦ I/O を極力減らして non-blocking に
  8. Online のアーキテクチャ • Auto Scaling Group (ASG) で制御される EC2 群に

    よるサービス ◦ ASG, Lambda, Simple Notification Service (SNS) を組み合わせて scale out を自動化 ◦ scale out が前提なので、scalable なアーキテク チャである必要がある
  9. Online のアーキテクチャ • search engine は cache layer で守る ◦

    L1: in-memory ◦ L2: Memcached cache cluster • cache hit rate が重要 ◦ offline 処理で絶えず L1/L2 cache を作成
  10. Online のアーキテクチャ • cache が効きづらい personalized engine には、 in-memory data

    grid を採用し高速化 ◦ Hazelcast cluster • Application Framework には Reactive Streams (Reactor) を採用 • 負荷状態に応じて自律的に処理内容を変更