概要
年の瀬なので2021年に買ってよかったものを挙げてきます。
ゲーミングチェア
リモートワークで自宅でも座ってる時間が長くなったので自宅の椅子を買い替えました。 座り心地がめちゃくちゃいいので個人的にNo.1な買い物でした。
フローリングが傷つかないようにキャスターを別途購入してます。
続きを読む年の瀬なので2021年に買ってよかったものを挙げてきます。
リモートワークで自宅でも座ってる時間が長くなったので自宅の椅子を買い替えました。 座り心地がめちゃくちゃいいので個人的にNo.1な買い物でした。
フローリングが傷つかないようにキャスターを別途購入してます。
続きを読むBazel解説第3弾です。
Bazelを使ってみる その1(Goのビルド) - Carpe Diem
Bazelを使ってみる その2(protobufのビルド) - Carpe Diem
今回はDocker imageをビルドしてみます。
通常docker imageを作成する際はDockerfileを使いますが、BazelではDockerfileを使わずにビルドします。
Dockerfile内で複雑にプロビジョニングする場合はDockerfileの方が直感的に書けてオススメですが、単純にバイナリを置くだけであればBazelも十分選択肢になります。
またBazelでバイナリを生成した場合はSandbox内に置かれるため、そこの連携という意味でもBazelに閉じる方がシンプルに用意できます。
続きを読むBazelは優れたビルドツールである一方で、導入したチームには1人はBazel職人が必要と言われるほどキャッチアップコストが高くハマったときに開発が止まると言われます。
そのためKubernetesからも削除されるほどです。
しかしながら導入の善し悪しを判断する上で最低限の知識は必要なので、一通りのことはできるようにとキャッチアップしてみます。
ちなみに発音は公式サイトでは「ベイゼル」とのこと。
How do you pronounce “Bazel”?
The same way as “basil” (the herb) in US English: “BAY-zel”. It rhymes with “hazel”. IPA: /ˈbeɪzˌəl/
ref: FAQ | Bazel
Bazelの特徴として以下があります。
特に1つ目の特徴である「inputが同じであればoutputも同じ」という再現性のため、Bazelはinputの明示を重視します。
通常inputというとソースコードが浮かびますが、それ以外にも
といった様々な要素があります。
大抵Bazelのビルドでコケるのはこのinput(特に依存ライブラリの関係)が不足しているケースが多いです。
続きを読むBigtableにはCheckAndMutateRow APIがあり、書き込む際に条件をつけることで更新のロストなどを防ぐ仕組みが用意されています。
※更新のロストについては以下を参考にしてください
トランザクションの分離レベルで出てくる用語 - Carpe Diem
今回はよくある書き込みパターンとその実装例を紹介します。
GoのSDKでは条件付き書き込みにはNewCondMutationを使います。
NewCondMutation(条件, 一致した時の変更処理, 一致しなかった時の変更処理)
と言った形式で利用します。
条件にはFilter interfaceを使います。
主なFilterとしては
などがあり、複数組み合わせて条件を絞ることも可能です。
続きを読むRedis Clusterが生まれるまではRedisの水平スケール手段としては前回紹介した
Consistent Hashing (コンシステントハッシュ法) - Carpe Diem
を用いた手法が使われていました。
これはRedis Ringと呼ばれる形でいくつかのライブラリでサポートされており、Goでもgo-redisでサポートされているので検証してみました。