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