失敗前提の設計
エッジ層は高速だが、ネットワークや上流依存の失敗に晒されます。最初に「失敗の型」を定義し、ハンドリング戦略を決めます:タイムアウト、レート超過、オリジン不達、整合性エラー、データ欠損。
ベストマッチ
最短で課題解決する一冊
この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。
タイムアウトと再試行(ジッタ付き)
// app/api/edge-resilient/route.ts
export const runtime = 'edge';
async function fetchWithTimeout(url: string, ms = 1500, init?: RequestInit) {
const ctrl = new AbortController();
const t = setTimeout(() => ctrl.abort('timeout'), ms);
try {
const res = await fetch(url, { ...init, signal: ctrl.signal });
return res;
} finally { clearTimeout(t); }
}
async function retry<T>(fn: () => Promise<T>, times = 2) {
let e: any;
for (let i = 0; i <= times; i++) {
try { return await fn(); } catch (err) {
e = err; await new Promise(r => setTimeout(r, 100 + Math.random()*200));
}
}
throw e;
}
export async function GET() {
try {
const r = await retry(() => fetchWithTimeout('https://example.com/api', 1200));
if (!r.ok) throw new Error(`upstream ${r.status}`);
return new Response(await r.text(), { headers: { 'content-type': 'application/json' } });
} catch (e: any) {
// フェイルソフト:キャッシュ or 既定値
return new Response(JSON.stringify({ ok: false, cached: true, items: [] }), { status: 200 });
}
}さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
サーキットブレーカー(簡易)
let failures = 0, openedAt = 0;
function allowCall() { return failures < 5 || Date.now() - openedAt > 5000; }
function record(ok: boolean) { ok ? failures = 0 : (failures++, openedAt = Date.now()); }さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
フォールトインジェクション(動作確認)
// ?fi=timeout|500|drop で擬似障害
export async function GET(req: Request) {
const fi = new URL(req.url).searchParams.get('fi');
if (fi === 'timeout') await new Promise(() => {});
if (fi === 'drop') return new Response(null, { status: 204 });
if (fi === '500') return new Response('boom', { status: 500 });
// 通常処理...
return Response.json({ ok: true });
}さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
メトリクスとSLO
成功率/レイテンシ/タイムアウト率/フォールバック率を収集し、SLO逸脱でNode Runtimeへ切替。実験用クエリ(fi)は本番では認証やIP制限で保護します。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
まとめ
「再試行+タイムアウト+フェイルソフト+観測」を最小キットとして導入し、フォールトインジェクションで確実に効くことを検証しましょう。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
この記事をシェア




