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,某些功能可能无法正常工作。

查看使用的 Cookie
  • lang(语言偏好)
  • theme(深色/浅色模式)

分析性 Cookie

这些 Cookie 通过匿名收集和报告信息,帮助我们了解访问者如何与网站互动。

查看使用的 Cookie
  • _ga(Google Analytics)
  • _gid(Google Analytics)

营销 Cookie

这些 Cookie 用于跨网站追踪访问者,以便根据您的兴趣展示相关广告。

查看使用的 Cookie
  • 广告 Cookie
  • 再营销像素

隐私政策