Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するポータルサイトの作り方渡邊 大介会員システムグループ 第一開発チーム
View Slide
Copyright © NIFTY Corporation All Rights Reserved. 渡邊 大介 入社 2019年4月(5年目) 担当業務 自社WEBサービスの運用開発 趣味 映画、ドライブ、バドミントン 自己紹介
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページについて 1 安定稼働するための工夫 2 キャッシュをほとんど効かせられない状況下での負荷軽減方法 3
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページについて 01
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページ PC(2022/07/05にフロントエンドを刷新)スマホ テキスト
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページ ● 20世紀から存在する月間3,000万PVのポータルサイト● 多くのコンテンツを展開している○ 接続会員向け(宝箱、ニフくじ、メール、ニフティポイントクラブ)○ その他(ニュース、検索、天気、占いなど)● ユーザーが日常的に使うサービスのため、安定稼働は必須
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページ(PC)の環境 ● AWS Lambdaを使ったサーバーレス構成● Terraformによるインフラ管理● フロントエンドにNext.js,TypeScriptを採用● バックエンドにGo言語を採用● GitHubによるコード管理、自動テスト・デプロイ
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫 02
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫(インフラ) ● APIの管理にはTerraformを採用● コード管理することで変更の追跡やバージョン管理が容易になる● 構文チェックや現在の状態と変更点を比較する機能がデフォルトで搭載● アプリケーションのデプロイにServerless Frameworkを採用
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫(インフラ) ● Lambdaで動くため自動でスケールが可能● サーバー作業が不要になり、アプリケーション開発に専念することが可能に● 本番環境以外の環境整備○ 開発環境○ ステージング環境○ 障害対応を擬似的に行うロールプレイング環境
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫(デプロイ) 各ブランチと各環境の対応付けを実施 開発環境#1featureブランチ developブランチ本番環境masterブランチPR#1 開発環境#2ラベル付与ラベル付与ステージング環境マージ時PR#2 PR#3 マージ時施策A施策B開発環境#1ラベル付与PR#4 施策Creleaseブランチ
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫(GitHub) ● pre-commitを導入し、commitの段階でフォーマットや構文チェックを実行● GitHub Actionsを使ってPRを出したタイミングでインフラの変更確認や単体テストを実行するワークフローを整備● デプロイはすべてGitHubで行う○ リリースで問題が発生したらGitHubからリバート
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫(GitHub) ● リリース状況を自動生成するワークフロー● リリース前のチェック項目を自動で投稿するワークフロー
Copyright © NIFTY Corporation All Rights Reserved. ● TypeScriptを採用し、型安全性とメンテナンス性の向上● 単体テストを追加し、機能の動作保証● 開発ルール○ データ取得処理はデータ層に分離○ コンポーネントとロジックを分離(カスタムフック化)○ エラーログ出力安定稼働するための工夫(アプリケーション)
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するための工夫(エラー通知) ● 設定したしきい値を超えたエラーが発生した場合にはSlack、メールに通知を送る仕組みを構築● 現在、約300個のアラートが設定されている○ エラーログはすべてCloudWatch Logsに出力するように設定
Copyright © NIFTY Corporation All Rights Reserved. キャッシュをほとんど効かせられない状況下での負荷軽減方法 03
Copyright © NIFTY Corporation All Rights Reserved. 自社サービスの情報を表示する機能 ● ポータルサイトという性質上、自社サービスの情報を表示する機能が多く存在する● リリースする上での課題○ 速報性の高いサービス(ニュース、地震情報など)を提供しているため、長めのキャッシュを効かせることが困難○ ほかサービスへの負荷を最低限に抑えなければいけない
Copyright © NIFTY Corporation All Rights Reserved. 実装内容 ● APIを定期的に叩くLambda(Go言語)を作成し、結果をS3に出力する仕組みを構築● フロントエンド側はS3からデータを取得する
Copyright © NIFTY Corporation All Rights Reserved. 今後 ● リリース後チェックの負担を軽減するためにE2Eテストの導入● 対応が必要なアラートだけに集中できるようにアラートの調整
Copyright © NIFTY Corporation All Rights Reserved. まとめ ● サーバレスを活用して運用負荷の軽減● 機械的にチェックできるところは積極的に自動化する● 可用性の高いサービスを活用して負荷軽減する