RustでClient-side Load Balancingする

RustでClient-side Load Balancingを実現するための方法について書きました。

Client-Side Load Balancing

Client-side Load Balancingとはクライアントがリクエスト先のサービスインスタンスの位置を把握し、クライアント自体が負荷分散することです。Client-Side Load Balancingを実現するソフトウェアとしてはNetflixのRibbonが有名でしょう。※1

ラウンドロビン方式での実装

負荷分散の方法としては最も素朴であろうラウンドロビン方式で実装しました。http://instance01.example.comhttp://instance02.example.comhttp://instance03.example.comに対して、均等にトラフィックを振り分ける例です。

"http://instance01.example.com"
"http://instance02.example.com"
"http://instance03.example.com"
"http://instance01.example.com"
"http://instance02.example.com"
"http://instance03.example.com"
"http://instance01.example.com"
"http://instance02.example.com"
"http://instance03.example.com"
"http://instance01.example.com"

補足

AtomicUsizeやOrderingなどAtomicなものを使用しているのは、サーバーに対して並列にリクエストすることも想定しているためです。これらはスレッド間でも安全に共有できます。

参考

Software engineer