Backpressure in Go

Posted on

Motivation

昨今のMicroserviceブームの文脈で、例えばユーザ情報の更新だけを行うMicroseviceを作ったとする。

そのような場合に無限に処理を受け付けてしまうとネットワークはもちろん、バックエンドのDBも死んでしまう可能性がある。

ネットワーク周りはService meshなどの手法が良さそうなのでそちらに任せるとして、ここではコードレベルで工夫出来る点について書いてみる。

いきなり結論

Goではこのようなケースで使えるものがある。そうgoroutineである。

goroutineは使い方次第で面倒なものが簡単に書ける。今回であれば有名なWorkerパターンを適用するのが良いと思う。

ということでMattnさんのこの記事を読めば万事解決である: