生涯未熟

生涯未熟

プログラミングをちょこちょこと。

Golang Weekly #171

A Million WebSockets and Go – freeCodeCamp

ロシアの電子メールサービスを扱っている巨大企業、Mail.RuでのWebSockets ✕ Golangの話。

約300万のオンライン接続があるようなサービスで、メールのポーリングには1秒間に約50,000件のHTTPリクエストが含まれるような巨大システムに対して、 WebSocketによるアプローチをGolangで実装し、その時の学びがつらつらと書かれています。

netpollの独自実装・リソース制御・goroutineのプーリングなどなどがコードと一緒に説明されていて分かりやすいです。

ただ、ちょっと英語力の無さから細かいニュアンスが分からなかったので、今POSTDに翻訳リクエストを出しています!

github.com

Building a Worker Pool in Golang – uniplacesgeeks

UniplacesというサービスのAPISalesforceAPIを繋ぐ処理を実装した際に、キューのポーリング処理などの高速化におけるワーカープールの説明記事。

ワーカープールで実現した機能は以下の2つで、

  • 動的スケーラビリティ
  • グレースフルシャットダウン

それぞれの実装方法が事細かに書いてあります。

Using functional options instead of method chaining in Go

オブジェクトの構築にメソッドチェーン(またはBuilderパターン)を使う代わりに、functional optionを使おうという内容。

メソッドチェーンの例外周りについてはGORMを参考にしたコード例を紹介しているが、以下のような問題があるということを挙げている。

  • WhereFirst でエラーが呼ばれることがない
  • エラー発生が多くなり、適切にハンドリングを行わなくてはならない

それらの問題に対して、functional optionを使うと良いよという流れで、GORMに対してはfunctional optionを使ったラッパーを使用することで、更に使い勝手が良くなるのでは?ということが書かれている。