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