Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NIFTY Tech Talkコラボ 安定稼働するポータルサイトの作り方
Search
ニフティ株式会社
PRO
April 28, 2023
Video
Resources
Programming
1
610
NIFTY Tech Talkコラボ 安定稼働するポータルサイトの作り方
ニフティ株式会社
PRO
April 28, 2023
Tweet
Share
Video
Resources
落ちないシステムの作り方 (NIFTY Tech Talkとニフクラエンジニアミートアップのコラボレーション企画)
https://nifty.connpass.com/event/279053/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
AWS AppSyncを用いた GraphQL APIの開発について - NIFTY Tech Talk #22
niftycorp
PRO
0
75
「天気予報があなたに届けられるまで」 - NIFTY Tech Talk #22
niftycorp
PRO
0
83
@nifty天気予報:フルリニューアルの挑戦 - NIFTY Tech Talk #22
niftycorp
PRO
0
82
@nifty天気予報のフロントエンドを 実装するまで - NIFTY Tech Talk #22
niftycorp
PRO
0
82
Application Signalsで始めるSLO ユーザー満足度を数値化する第一歩
niftycorp
PRO
2
220
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
1
66
モニタリングダッシュボード に表示しておきたい情報 / NIFTY Tech Talk #21
niftycorp
PRO
1
100
PagerDutyを導入して変わったシステム運用とこれから / NIFTY Tech Talk #21
niftycorp
PRO
1
110
ゼロからボトムアップで始めるインナーソース ニフティのリアル事例 - InnerSource Gathering Tokyo 2024
niftycorp
PRO
2
250
Other Decks in Programming
See All in Programming
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.4k
Jakarta EE meets AI
ivargrimstad
0
560
Arm移行タイムアタック
qnighy
0
320
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.1k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
860
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
31
6.3k
Bash Introduction
62gerente
608
210k
KATA
mclloyd
29
14k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Music & Morning Musume
bryan
46
6.2k
GraphQLとの向き合い方2022年版
quramy
43
13k
Optimizing for Happiness
mojombo
376
70k
Docker and Python
trallard
40
3.1k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Transcript
Copyright © NIFTY Corporation All Rights Reserved. 安定稼働するポータルサイトの作り方 渡邊 大介 会員システムグループ
第一開発チーム
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. 安定稼働するための工夫(デプロイ) 各ブランチと各環境の対応付けを実施 開発環境#1
featureブランチ developブランチ 本番環境 masterブランチ PR#1 開発環境#2 ラベル付与 ラベル付与 ステージング環境 マージ時 PR#2 PR#3 マージ時 施策A 施策B 開発環境#1 ラベル付与 PR#4 施策C releaseブランチ
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. まとめ • サーバレスを活用して運用負荷の軽減
• 機械的にチェックできるところは積極的に自動化する • 可用性の高いサービスを活用して負荷軽減する