Featured image of post コードテイマー シリーズ目次

コードテイマー シリーズ目次

非同期処理や並行処理で起きる「たまにだけ壊れる」バグを、TypeScript のコードで直していく全12話の目次。困りごと別の一覧から、読みたい話を選べます。

「コードテイマー」は、魔物使いのカイナが、暴れる非同期・並行処理のコードを直していく全12話の連載です。依頼人のコードで起きる困りごとを、まず観察して再現し、型とテストで守る形に直します。実装は TypeScript です。

どの話からでも読めます。物語仕立てですが、どの話も直す前と後のコード、それを確かめるテストが載っています。何が変わったかを追えれば十分です。

このページは目次を兼ねた案内板です。初めてなら「まず読むなら」の3本から、手元に困っているコードがあるなら「困りごとから探す」から選んでください。

まず読むなら

  • Race Condition — ボタン連打で二重送信になる回。await をまたぐ処理は誰でも書くので、フロントでもバックエンドでも明日のコードにそのまま効く
  • Semaphore — 並列数を上げたら逆に全体が落ちる回。同時に動く数を絞るだけで、速さと安定の両方が手に入る
  • State Machine — boolean フラグを足し続けた末に、ありえない状態へ入り込む回。フラグが3本を超えたコードを抱えているなら、いちばん効く

困りごとから探す

たまに二重に動く、更新が消える

負荷が高いと、全体が落ちる

  • Semaphore — 並列数を上げすぎて共倒れになる
  • Token Bucket — 制限しているはずが、窓の境目で2倍通る
  • Bulkhead — 重い処理が枠を使い切り、大事な処理が動けない

外部サービスが落ちたとき、巻き込まれる

  • Exponential Backoff — リトライの連発が、かえって復旧を遅らせる
  • Circuit Breaker — 落ちた相手を待ち続けて、無関係な機能まで止まる
  • Eventual Consistency — 通知を取りこぼした側だけ、古い状態のまま戻らない

止まる、残る、終わらない

  • Deadlock — 互いのロックを待ち合って、永久に止まる
  • AbortController — 消したはずの処理が裏で動き続ける
  • Graceful Shutdown — 終了時に、処理中の仕事と接続を取り残す

全話一覧

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。