yyh-gl's icon

yyh-gl's Tech Blog

技術ネタ中心のブログです。主な扱いはバックエンド技術と設計です。

yyh-gl

1 分で読めます

featured

mercari.go #11

今回もお弁当とドリンクがありました!ありがたや


[追記:2019年10月12日]
[Mercari Engineering Blog](https://tech.mercari.com/entry/2019/10/11/160000) にて、本イベントの記事が公開されました。
発表資料が載せてあります。ありがたや🙏

1. About error handling in Go

登壇者:jd さん(@JehandadKamal)

資料 (正式に共有されたものでないので、発表の内容が少し異なります)

Errors are values

Errors are values ” という考え方。

Goでよくあるエラー処理パターン

  • エラーをラップしてより詳細な情報を付与する
  • 専用構造体を作る
  • スタックトレースを構成する

”Error is your domain”

Domain Error Struct を作成する。

type Error struct {
  Op        Op
  Kind      Kind
  Serverity zapcore.ErrorLevel
  Err       error
}
  • Op:Operation → 関数名とか
  • Kind:エラー種別 → NotAvailable, NotFound といったもの
  • Serverity:エラーレベル
  • Err:エラー内容

上記のような構造体を作る理由

error を比較するときは、基本的に文字列の比較になるため取り回しが悪い
→ ”NotFound” という文字列を比較するとかとか

Domain Error Struct を作れば Kind での比較などが可能になる。

加えて、操作内容やエラー種別とか情報を付与できる。

これ大事!

Remember ”Error is your domain”


エラーの分割方法

Twitterメモ

2. singleflight

登壇者:@nsega さん

スライド

singleflight

  • 同じ処理が複数回実行される場合に、一回だけ実行して、その結果を使い回すというもの。
    → キャッシュに似ていますが、違いは後述します。

  • BFF レイヤーで活躍
    → マイクロサービスにおいて、複数のAPIにリクエストを投げて、レスポンスを集約するようなときに有効。

  • ここ にある3つの関数さえ押さえればOK。

singleflight のユースケース

初見だと、キャッシュとなにが違うのか分かりづらいと思います。
ここらへんを見ると singleflight のユースケースがわかってくると思います。

Q&A

Q. goroutine で使うのはどうでしょう?

A.

singleflight は扱いが難しいので、呼び出し元がわからなくなると、デバッグが余計難しくなる。
よって、goroutine ではあまり使わない方が良さそう。
→ 呼び出し元は明確な方が追跡しやすくていいと思う。

3. ISUCON9予選のベンチマーカーについて(TBD)

登壇者:カタツイさん(@catatsuy)

資料

上記資料が全てです!

ISUCON の裏側、つまりベンチマーカーを作った話です。

こんなことを考えて作られているんだと知ることができ、
めちゃくちゃおもしろかったし、勉強になりました!

ぜひ、上記資料読んでみてください!

最近の投稿

About

東京で働くソフトウェアエンジニアです。バックエンドがメインですが、フロントエンドやインフラもさわっています。