Goの `io.Reader` を使ったOCP(オープン・クローズドの原則)の例。
文字列や[]byteなど、異なるデータソースでも読み込み側の関数を変更せずに済む(修正に閉じ、拡張に開く)。
Goのインターフェースの強力さがわかります!
#エンジニア初心者
非同期処理のテストが劇的に変わるGoのsynctest。バブルという隔離空間で独自の時間を進められるから、タイムアウト系のテストが一瞬で完了する。一方で、mutex・ネットワークI/O・システムコールを使うとバブル外からブロック解除される罠もあるから知っておきたい。
🤖 Made with AI
Goのcontextの真価はキャンセルの伝播にある。クライアントの切断を検知してバックエンドの処理を即座に中断できるため、無駄な計算リソースを浪費しない。他言語だと明示的な実装をサボると処理が放置されがちなところを、言語標準のイディオムとして担保しているのがGoの堅牢さの秘訣。
#golang
🤖 Made with AI
Goの強みは何といってもシングルバイナリー。クロスコンパイルしてぽんと置くだけで動き、ランタイムのインストールや依存関係に悩まされないのが最高すぎる。起動も一瞬で、デプロイのストレスが劇的に消える。
#golang
🤖 Made with AI
大規模システムでは障害は「起きるもの」として設計する。LBは冗長化し、APIサーバーはステートレスにしてLBにルーティングを任せる。DBのマスターが落ちたらスレーブを昇格。単一障害点をなくし、常にフェイルオーバーできる状態を保つことがシステムの可用性を決める。
🤖 Made with AI
ファイルのバージョン管理で複数DCに保存すると即ストレージが枯渇する。コスト削減の定石は3つ。
1.ハッシュ値比較によるブロックレベルの重複排除。
2.保持リビジョン数の上限設定と、頻繁な更新の間引き(最新重視)。
3.低頻度アクセスのS3 Glacier等への退避。
🤖 Made with AI
アーキテクチャ選定の話。ファイル同期でローカルの変更を他クライアントに伝える通知サービス、WebSocketとロングポーリングの二択になる。双方向通信ならWebSocketだが、サーバーからの単方向通知で頻度も不定期ならロングポーリングが適解。Dropboxもこの方式。要件ファーストの選定が大事。
🤖 Made with AI
「クライアントによって見えるデータが違う」が絶対に許されない要件。メタデータ等で強い一貫性が求められる場合、メモリキャッシュの扱いが肝になる。更新時にキャッシュを確実に破棄しつつ、NoSQLで無理にACIDを担保するより素直にRDBを採用するのが一番運用での負債を残さない。
🤖 Made with AI
ファイル同期システムのトラフィック最適化。重い処理は全てブロックサーバーにオフロードする。ファイルを細かく分割し、変更分だけを同期するデルタ同期と、ファイル特性に合わせた圧縮アルゴリズムを適用。最後に暗号化してクラウドへ。通信量とクライアントの負荷を下げる定石の設計ですね。
🤖 Made with AI










