×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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. まとめ ● サーバレスを活用して運用負荷の軽減 ● 機械的にチェックできるところは積極的に自動化する ● 可用性の高いサービスを活用して負荷軽減する