Cloudflare ล่ม 12 ก.ย. 2025: React useEffect Bug → Tenant Service 5xx Kubernetes
記事一覧へ戻る

Cloudflare ล่ม 12 ก.ย. 2025: React useEffect Bug → Tenant Service 5xx Kubernetes

Cloudflare outage 12/9/2025 React useEffect infinite API calls → Tenant Service overload Timeline, Kubernetes metrics, rate limiting, Argo Rollouts fix, code examples

cloudflare 更新: January 9, 2026

Cloudflare ล่ม 12 ก.ย. 2025: React useEffect Bug → Tenant Service API 5xx ทั่วโลก
Cloudflare outage จาก React useEffect hook bug ใน Dashboard เรียก Tenant Service API ซ้ำ → Kubernetes pods overload Global rate limit + Argo Rollouts fix

Root Cause: React useEffect Bug

🐛 Dashboard component:
useEffect(() => {
fetchTenantAPI(); // ❌ Runs on EVERY render
}, []); // Dependency array ignored
✅ Fixed version:
useEffect(() => {
let mounted = true;
fetchTenantAPI().then(data => {
if (mounted) setTenant(data);
});
return () => { mounted = false; };
}, []);
Thundering Herd: 10K+ users hit API simultaneously

Timeline Cloudflare Outage

09:15 UTC: Dashboard deploy (buggy useEffect)
09:22 UTC: Tenant Service CPU 1200%
09:28 UTC: API 5xx errors spike
09:45 UTC: Global rate limit (100 req/min)
10:15 UTC: Scale pods 2x → Still failing
10:30 UTC: Rollback dashboard → Secondary outage
11:12 UTC: Staggered API calls (random delay)
12:05 UTC: Full recovery
Duration: 2 ชม. 50 นาที

Impact: Services & Metrics

ServiceError RateUsers Affected
Tenant Service API99% 5xx500K+
Cloudflare Dashboard95%1M+
Workers KV45%100K
Access Policies78%200K
DownDetector: 850K reports peak

Technical Deep Dive: Kubernetes Overload

Kubernetes Metrics:
- Pods: 50 → 200 (auto-scaling failed)
- CPU: 1200% sustained
- Memory: 95% cluster capacity
- API calls/sec: 50K → 500K spike
Rate Limiting Fix:
// Global rate limiter
const rateLimit = new RateLimiter({
points: 100, // requests
duration: 60, // seconds
});

Cloudflare Response & Mitigation

🔧 09:45: Global rate limit 100/min
⚙️ 10:15: Horizontal Pod Autoscaler 2x
🔄 10:30: Argo Rollout rollback
⏱️ 11:12: Random jitter (100-500ms delay)
📊 11:45: Custom metrics (new vs retry)
Argo Rollouts Config:
strategy:
canary:
steps:
- setWeight: 20
- pause: {duration: 300}

Lessons Learned: Production Best Practices

✅ useEffect cleanup + abort controller
✅ Rate limiting ALL public APIs
✅ Staggered deploys (Argo CD)
✅ Circuit breakers (Istio)
✅ Thundering herd protection

Post-Mortem Action Items

IssueFixTimeline
useEffect bugESLint rules + review✅ Done
No rate limitsGlobal API limits✅ Done
AutoscalingHPA tuning + VPAQ4 2025
MonitoringCustom retry metrics✅ Live
RollbackArgo Rollouts PA✅ Live

Code: The Bug + Production Fix

Buggy Dashboard (React 18):
useEffect(() => {
fetch('/api/tenant').then(setData); // Runs infinitely
}, [userId]); // Missing deps
Fixed Production:
const abortController = useRef();
useEffect(() => {
abortController.current = new AbortController();
fetch('/api/tenant', { signal: abortController.current.signal })
.then(setData)
.catch(err => err.name === 'AbortError' || handleError(err));
return () => abortController.current?.abort();
}, []);
D

DRITESTUDIO

DRITESTUDIO COMPANY LIMITED - Cloud, VPS, Hosting and Colocation provider in Thailand

Cookie設定を管理

当サイトでは、お客様の体験を最適化するためにさまざまな種類のCookieを使用しています。下のカテゴリをクリックして詳細を確認し、設定をカスタマイズしてください。一部のCookieをブロックすると、体験に影響する場合があります。

必要なCookie

これらのCookieはウェブサイトの正常な機能に不可欠です。ページナビゲーションやセキュアなエリアへのアクセスなどの基本機能を有効にします。

使用されているCookieを表示
  • セッションCookie(セッション管理)
  • セキュリティCookie(CSRF保護)
常にオン

機能性Cookie

これらのCookieは、言語設定やテーマ設定などのパーソナライズされた機能を有効にします。これらがないと、一部の機能が正しく動作しない場合があります。

使用されているCookieを表示
  • lang(言語設定)
  • theme(ダーク/ライトモード)

分析Cookie

これらのCookieは、匿名で情報を収集・報告することで、訪問者がウェブサイトとどのようにやり取りしているかを理解するのに役立ちます。

使用されているCookieを表示
  • _ga(Google Analytics)
  • _gid(Google Analytics)

マーケティングCookie

これらのCookieは、お客様の興味に基づいて関連性の高い広告を表示するために、ウェブサイト間で訪問者を追跡するために使用されます。

使用されているCookieを表示
  • 広告Cookie
  • リマーケティングピクセル

プライバシーポリシー