Carpe Diem

備忘録

gRPCでのLoad Balancing

背景

gRPCでは主に

  • Proxy Model
  • Balancing-aware Client
  • External Load Balancing Service

といったLBアプローチがあります。

それぞれの特徴や実装方法を調べてみました。

Load Balancingアプローチ

こちらで定義されてます。

grpc/load-balancing.md at master · grpc/grpc · GitHub

主な負荷分散のアプローチとしては以下です。

続きを読む

gRPCでのClient-Side LB実装の変遷

概要

gRPCでのバランシングをClient-Sideで直接実装する方法の紹介です。

gRPCはPolyglot(様々な言語で扱う)を意識しているので、gRPC自体の仕様が策定→各言語がそれに則って実装となります。
なので「元々はこういう実装だったけど、他の言語と統一してこう変更したよ」みたいなissueをちょこちょこ見ます。

結果これまでの書き方がいつのまにかdeprecatedになってたりするので、以前の書き方から遡って調べてみました。

環境

続きを読む

go modulesでコマンドラインツールのバージョン管理をする

概要

goはModulesリポジトリのライブラリのバージョン管理を行えます。
ただコマンドラインツールに関してはgo getしてgo.modに追加されても、goファイルで扱っているわけではないのでgo mod tidyすると消えてしまいます。

しかしながら「この機能は最新のmasterにしかない。かと言ってgo get -u@masterで常に最新にしてしまうと互換性が壊れるかもしれない。だからバージョン管理できないと困る」というシチュエーションはよくあります。

その対策としては現状tools.goにblank importするのがベストプラクティスとなっています。

環境

  • go 1.13.6
続きを読む

GoのDIツールwireで知っておくと良いこと

概要

christina04.hatenablog.com

こういった設計のようにレイヤ間の依存関係を抽象化していると、DIの初期化処理が段々冗長になっていきます。

google/wireはそういったDIの初期化を自動的にやってくれるコード生成ツールです。
今回はwireを使う上で知っていると便利なところをまとめます。

環境

wireの使い方知らない人

以下のチュートリアルが非常に分かりやすいので一度やってみてください。

github.com

続きを読む

vim-goからvim-lspへ移行しました

概要

vim-goからvim-lspへ移行する時に問題になってたところを全部mattnさんが解決してくださってたのでようやく完全移行したという話です。

環境

  • vim 8.2
  • go 1.13.5

これまでの課題

vim-goの問題点

2014年からgoを触っていましたが当時はvim-go一択で、しかもやりたいことはそれだけで事足りていました。

しかし時代は流れ、以下のように少しずつモヤモヤを感じるようになってきました。

  • 1.10のビルドキャッシュ辺りでバグがちょこちょこ起きたり
  • 機能が増えてきて重くなったり
  • Language Server Protocolの機運が高まってきた(色んなエディタやIDEが対応してきた)
続きを読む

MacでのGithubリポジトリのcloneを自動化

背景

パソコンを新調した時に大変なのが

です。

前者に関してはhomebrewが提供しているbrew bundleである程度対応できます。

後者でghqはdump, restore的な機能ってあるのかな?と思って探したのがこの記事のきっかけです。

環境

方法

ghqlistimportといった機能を提供しています。

続きを読む

check digitを使った誤り検出

概要

クレジットカード・シリアルナンバーなど、長くなるほど入力ミスはしやすくなります。

そんな時に毎回DBに問い合わせて正しい値かをチェックするのではなくアルゴリズムによって正しいものかどうかチェックする仕組みがcheck digit(チェックディジット)です。

具体例

例えば

全桁を足し合わせて10で割った値をcheck digitとする

という計算式でcheck digitを算出するとします。
元の値を1234 5678 901とするとcheck digitは

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + 1 = 46

46 \% 10 = 6

となります。
よってcheck digitを付加した最終的なコードは1234 5678 9016となります。

元の値 check digit 最終的な値
1234 5678 901 6 1234 5678 9016
続きを読む