Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

スタディプラスを支えるインフラ技術(2019年)

はじめに

スタディプラスには学習管理SNS「Studyplus」と教育機関向け学習管理サービス「Studyplus for School」の2つのサービスがあります。

今回は、社内では「本体」と呼ばれている「Studyplus」のAPIシステムである、コードネーム「steak」を中心にしたインフラ環境を紹介します。

構成

Studyplus本体は「steak」を中心とした複数のサブシステムで構成されており、関連するサブシステムをVPCで区切って管理しています。 「steak」を始めとした各サブシステムはRuby on Rails + Pumaで運用しています。

f:id:yo-shimada:20190821144527p:plain
サーバー構成の概要図

利用中の主なAWSのサービスは以下になります。

  • EC2
  • RDS
    • Aurora
    • MySQL
  • ElastiCache
  • S3
  • CloudSearch
  • Athena

構成管理 

基本的にインフラ関連の設定はコード化するようにしています。 スタディプラスでは構成管理には主にPackerとAnsibleを利用しております。

Packer+AnsibleでAMIを作成してEC2のサーバーを構築する際に利用します。 AWSサービスの構成管理やEC2の環境構築にもAnsibleを利用しています。

また、サイロ化を防ぐため開発エンジニアが各自実行できるようにしています。

環境

環境を以下の3つに分けて運用しています。

  • cage:開発者全員が共有する開発環境
  • stag:本番DBに接続しており、主にリリース前にアプリケーションの最終チェックをする環境
  • prod:本番環境

CI/CD

CIはCircleCIを利用しており、以下のような運用となっています。

  1. エンジニアがPull Requestの作成
  2. CircleCIにテスト
  3. レビューを経て、エンジニアがmasterブランチにマージ

デプロイに関してはSlackからHubotを経由してJenkinsでデプロイをしています。

  1. SalckでHubotにコマンドと変数を受け渡す
  2. JenkinsのJobを実行して対象にデプロイを行う

開発エンジニアの要望もあり、テスト、build、deployのパイプラインはこのような形になっています。

blue/greenデプロイ形式に則っており、リリース規模や影響度を見てカナリアリリースを行うこともあります。

f:id:yo-shimada:20190819183422p:plain
デプロイイメージ図

監視・検知

  • サーバーのメトリクス監視にはMackerelを利用しています
  • アプリケーションのエラー検知にはSentryを利用しています
  • ログ収集には、S3に保存してAthenaで確認する方法と、Amazon Elasticsearch Serviceを利用してKibanaで確認する方法を採用しています
  • OnCallはMackerelにTwilioを設定して、担当者に連絡が飛ぶようになっています

改善・挑戦

以下は、今年取り組んだ改善と今後1年以内に取り組んでいきたいと考えているインフラ関連の活動内容です。

  • 今年取り組んだ改善活動
    • RDS監視強化(パフォーマンスインサイトによるボトルネックの可視化)
    • CircleCIのPerformance Planを導入
    • 複数システムのRubyとRailsのバージョンを最新バージョンへ更新
    • jemallocの導入(Railsアプリケーションのメモリ上昇を抑えるため)
  • これから取り組みたい事
    • Cloud Native化
      • EKS等のコンテナ導入
      • サーバーレス化
    • SREチームとしての活動推進
      • 監視・ログ基盤の整備
      • ポストモーテムの整備
      • SLI/SLOの設定

現状では、まだ手作業や自動化する余地があり、安定したサービスを提供するために出来ることはあります。 その中で運用負荷を軽減する事を考えたり、モダンな思想・ツールを取り入れたりしています。