事象
下記のようなコードを書き、本番のみエラーになった。
app.ts
import * as express from 'express'
const app = express()
let count = 0
app.get('/health', (_req, res) => {
count++
res.send('ok')
})
app.listen(3000)
からの
pm2 start app.js -i 2
原因
pm2 では -i 2
オプションを付けると、クラスタ化された状態で Node.js のサービスを起動してくれる。
ゼロダウンタイムデプロイが手軽にできるので、非常に便利だが、上記のようなコードは動かなくなる。上記の例では、3回目以降のリクエストが止まる。
対策
アプリを Stateless にすれば良い。
工数は増えるが、 Redis などに格納すべき。