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
420
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 ニフティ株式会社
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
0
8
Visual Studio Code Dev Containers ススメ Python編 - NIFTY Tech Talk #17
niftycorp
PRO
1
68
dotfilesを作ろう - NIFTY Tech Talk #17
niftycorp
PRO
1
71
フロントエンドを始める前に どうしていっぱいツールがあるの? - NIFTY Tech Talk #17
niftycorp
PRO
1
79
サービスシステム監視 (シフト例)
niftycorp
PRO
0
49
スクラムマスターの技を磨く! ニフティのスクラムトーク vol. 1 - NIFTY Tech Talk #16
niftycorp
PRO
1
98
AWS基礎 / 2023 ニフティ新人研修
niftycorp
PRO
0
200
データベース / 2023 ニフティ新人研修
niftycorp
PRO
0
110
フレームワーク フロントエンド / 2023 ニフティ新人研修
niftycorp
PRO
0
140
Other Decks in Programming
See All in Programming
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
520
ONE WEDGE_Company_Information
1wedge
0
180
Dockerで始めるAWS Lambda開発
stutkhd0709
14
2.5k
品質とスピードを両立: TypeScriptの柔軟な型システムをバックエンドで活用する
kosui
5
1.1k
TCAの Shared Stateって どういう仕組みになってんの?
yimajo
0
330
Deno に Web 標準 API を実装する / Implementing Web Standard API to Deno
petamoriken
0
350
Compiling Python to WebAssembly with py2wasm
syrusakbary
0
140
Swiftの型推論を学ぼう | Let's Learn About Type Inference in Swift
omochi
2
720
Laravel OpenAPIによる"辛くない"スキーマ駆動開発
kentaroutakeda
2
2.1k
Kotlinを用いたDSL的な設計手法と使用上の注意
kohii00
3
530
CircleCIを活用して AWSへの継続的デリバリーを 実践する
coconala_engineer
1
110
WebComponentsで フレームワークを1ページに共存させる
webuilder240
0
150
Featured
See All Featured
Building Your Own Lightsaber
phodgson
97
5.6k
4 Signs Your Business is Dying
shpigford
174
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
225
51k
KATA
mclloyd
14
11k
Statistics for Hackers
jakevdp
789
220k
Fireside Chat
paigeccino
19
2.6k
We Have a Design System, Now What?
morganepeng
42
6.7k
The Mythical Team-Month
searls
214
42k
Building Effective Engineering Teams - LeadDev
addyosmani
25
1.8k
Become a Pro
speakerdeck
PRO
8
4.4k
Creatively Recalculating Your Daily Design Routine
revolveconf
209
11k
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. まとめ • サーバレスを活用して運用負荷の軽減
• 機械的にチェックできるところは積極的に自動化する • 可用性の高いサービスを活用して負荷軽減する