Carpe Diem

備忘録

Embulkの基本的な使い方

Embulkとは

fluentdのバッチ版のようなツールで、データを一括転送したい時に利用します。

f:id:quoll00:20190618131523p:plain

ref: GitHub - embulk/embulk: Embulk: Pluggable Bulk Data Loader.

メリット

自前で実装すると面倒な

  • 並列実行でパフォーマンスの最適化
  • validation
  • dry-run
  • エラーリカバリ
  • 冪等なリトライ

といった部分をサポートしてくれている上、

  • fluentdと同様にプラガブルに作られているので、inputもoutputも開発者が自由に開発できる

ため、プラグインが豊富なので大抵のユースケースをカバーできます。

なので自前でデータ転送をスクリプトやら簡易コードで書いたりすることはできるけれど、後々の運用を考えるとEmbulkを導入した方がいいケースは多々あると思います。

続きを読む

Goの実プロジェクトでのエラーハンドリングの悩みどころと解決案

概要

Go言語に限らずではありますが

  • レイヤ間のエラー伝搬
  • 外部APIを叩いた時のエラーコードハンドリング
  • HTTPやgRPCとしてレスポンスを返す時のエラーハンドリング

で悩むことは多いと思います。
今回はそれの1つの方針を紹介します。

課題

レイヤ間のエラー伝搬

Goのエラーは基本的に例外を扱わず、常にハンドリングする前提です。なので

user, err := findUser(id)
if err != nil {
  return User{}, err
}

みたいなコードが大量に生まれます。

一方でその関数を呼び出した側ではそれがどんな種類のエラーなのか分かりません
NotFoundだったりDB自体のエラーだったりしますが、それを外層のレイヤ(HTTPレスポンスを返すハンドラなど)でハンドリングするのは辛いです。
レイヤ毎のエラー内容を知る必要が出てくるため余計な依存が生まれてしまいますし、どこにどんなエラーが有るか把握するのが難しくなって考慮漏れも出てきます。

続きを読む

singleflight でキャッシュのOriginへのリクエストを抑制

概要

Goにはsingleflightという重複した関数呼び出しを抑制する仕組みがあります。
例えばキャッシュが切れた時にOriginへのアクセスが並行して走ってしまう(Cache Stampede)ケースでサーバやDBがスローダウンする問題がありますが、こういった時にsingleflightを挟むと解決できます。

環境

簡単なサンプル

通常だと10回呼び出す処理を、singleflightで抑制してみます。

続きを読む

Datadog SyntheticsでSSL/TLS証明書の期限チェック

概要

少し前にリリースされたDatadog Syntheticsですが、いつの間にかTLS証明書の期限チェックもできるようになったので紹介です。

Datadog Syntheticsって?

外形監視ができるDatadogの機能です。
後ほど設定にでてきますが、世界7箇所からチェックが可能です。

f:id:quoll00:20190530134925p:plain

ref: Simplified synthetic monitoring | Datadog

また、まだベータ版ですがDatadog SLOとも連携できます。

続きを読む

ConsulのACLでハマった話2

概要

以前

christina04.hatenablog.com

という記事を書きましたが、また別のケースでハマった話を書きます。

今回はACLを有効にしたConsulクラスタのサーバをアップグレードしようとしたら

Error joining address 'xxx.xxx.xxx.xxx': Unexpected response code: 403 (ACL not found)
Failed to join any nodes.

と出てクラスタに登録されなくなった、という問題です。

環境

  • Consul 1.5.0
続きを読む

ECSとFargateでコンテナの起動順が制御できるようになりました

概要

先日AWSの発表で

aws.amazon.com

と、コンテナの依存関係が制御できると発表がありました。

何が嬉しいかというと、サイドカー系コンテナに依存している場合アプリケーション側でそのコンテナの起動を待つ処理が必要だったのが、不要になるという点です。

christina04.hatenablog.com

こちらで以前デメリットとして指摘した点ですが、AWS側でサポートしてくれました!

まだ新しい機能なのでドキュメントも日本語対応していないため、確認する際は英語ドキュメントを参照してください。

Task Definition Parameters - Amazon Elastic Container Service

続きを読む

Clean Architecture で実装するときに知っておきたかったこと

概要

developers.cyberagent.co.jp

こちらで

  • 課金システムをマイクロサービス化した
  • サービス自体の設計をDDDにした

という対応をしました。
当時は試行錯誤の連続でしたが対応から1年程経ち、ある程度設計もfixされてきたので知見をまとめます。

続きを読む