LoginSignup
1
3

More than 3 years have passed since last update.

mercari.go #9 参加レポート~預金残高管理の話、Gopherライブドローイングetc〜

Last updated at Posted at 2019-07-17

image.png

はじめに

こんにちは。Wano株式会社エンジニアのnariです。



今回は何と言っても@tottieさんによるGopher ライブドローイング!!!!
それ以外の内容も素晴らしかったため、復習がてらまとめ記事を書かせていただきます。

タイムテーブル

19:40 〜19:45 @tottie Gopher ライブドローイングのご説明
19:45 ~ 20:00 @rerorero protoactor-goでPregelを作った話
20:00 ~ 20:05 休憩
20:05 ~ 20:35 @knsh14 メルペイでの残高管理の話
20:35 ~ 20:40 休憩
20:40 ~ 20:55 @akkie Readable code in Go
20:55 ~ 21:10 @tenntenn The Go Playgroundをコマンドラインから扱う
21:10 ~ 21:20 @tottie Gopher イラスト発表
21:20 ~ 22:00 懇親会

@tottie Gopher ライブドローイングのご説明

  • sli.doで題材を募集
  • 普段はtottieさんはUI/UXデザイナーやっている
  • LINEスタンプを作る(gopher)のためにGoを学んだ(凄い..)
  • ボツ案とLINEスタンプの裏話をたくさんしていただけた
  • tottieさんのLINEスタンプは以下のnoteの記事のリンクから買えます! 僕はもちろん全種類買いました!!めちゃ可愛い
    GopherさんのLINEスタンプが完成しました!|とってぃ|note
  • 私はドラム叩くgopherくんを依頼してみました

スクリーンショット 2019-07-17 19.46.25.png

@rerorero protoactor-goでPregelを作った話

感想

@knsh14 メルペイでの残高管理の話

  • 全体設計
    • Go gRPC GKE Google Cloud Spannerなどなどメルカリ標準
    • クリーンアーキテクチャベース
    • Viewはない
  • トランザクションの貼り方
    • usecaseそうのinteractorでspannerのトランザクションを張っている
    • ビジネスロジックを持たせているので、処理全体のロールバックがしやすい
  • dbについて
  • APIの設計
    • balance serviceでは各種の残高の増減を提供する
    • 他のサービス
    • payment service
      • 様々な決済手段を提供する
      • 決済をフェーズに分割
      • 決済受付
      • 決済成功失敗
      • 返金
      • 各フェーズでリトライやロールバックをして成功失敗
      • balanceを叩くフェーズも起こりうる
      • 全ての残高の種類を共通のインターフェースで扱いたい
      • どの残高の操作するときも同じように扱える
      • 複数斬だけを処理する場合の失敗処理が楽
      • まとめてUseCase層でロールバックできる
    • マイクロサービスの機能を提供するときにはどんなサービスから叩かれるのかを意識するべき
    • 冪等性を担保するための仕組み
    • payment sercieは決済のフェーズごとにリクエストを送ってくる
      • 失敗したら再度リトライする
      • 基本的にリトライされる
      • もし冪等性がなかったら
        • とにかくリクエストを受けると全て処理する
        • その取引で二十三十引いてしまうかもしれない
    • 参照系のRPCの冪等性
      • あまり必要としない
        • 更新がかかるようなRPCの冪等性
        • 残高を消費したい
        • 途中でタイムアウトしたら
        • 叩く側のマイクロサービスがリトライしたら
        • 冪等性を担保する必要がある
        • 取引IDをチェックして処理を行う
        • パラメータが同一の処理がすでに行われているか調べる
        • すでに取引がある場合には処理せずその結果だけ返す
    • 冪等性はサービスの信頼性を保証するためには必須
      • balancesercie では種に取引IDで冪等性を担保している
    • お客様の残高の追跡する方法
      • 1.取引レコードから算出する ES的な発想
      • 2.取引後の残高のスナップショット
      • 操作まいにそれぞれに履歴テーブルにレコードを保存してる
      • 取引後の残高スナップショットはgit的な仕組みでID参照のチェーンで参照がつながっている
  • まとめ
    • アプリケーション設計 冪等性 お客様のデータの保存 の話をしました
    • シンプルな機能を提供しているマイクロサービスでも考えるポイントはたくさんある

感想

  • クリーンアーキテクチャやトランザクション管理の話は、個人的な興味領域なので非常に参考になった
  • 懇親会でもかなり質問させていただきましたが、トランザクションオブジェクトがusecase層に漏れるのは仕方がなさそうでした。。(repositoryで完結はまず無理だし、非同期での担保ってわけでもないみたい)
  • それぞれのマイクロサービスで設計思想がかなり異なるようなので、それぞれ聞いてみたくなった
  • ESとスナップショットのユースケースでの使い分けを質問し忘れた、、 これは今度聞いてみよう
  • 後dto -> domainモデルの変換はdtoにメソッド生やすのが確かにいいかもと懇親会で気づきを得た。。
  • Spannerの良さは、RDBとsql構文の恩恵を受けながらスケールインアウトがイージーなとこなんだろうな そこも詳しく聞いてみたい

参考記事

@akkie Readable code in Go

  • コードを読みやすくするためのTips
    • lintでは救いきれないもの
    • チームで話題となったもの
  • 読みやすいコードとは
    • 他の人が短時間で理解できるもの
    • 明確な言葉を選択する
    • FilterよりもSelect,Exclude,Older Than
    • SetXXXはgetter setterを思わせるので、重い処理にはつけない
  • コメントにはWhyを書く
  • 追加要件の時は実装を一から見直す
  • 読み手への思いやりが時間節約、技術負債解消につながる

感想

  • whatではなくwhyを書くは実践しているが、読み手への思いやりが時間節約、技術負債解消につながる これは常に肝に銘じたい、、(こなれてくるとより一層自分の癖が満載のコードになりそう)

@tenntenn The Go Playgroundをコマンドラインから扱う

  • go playGroundで、標準パッケージ以外も使えるようになった
    • 作ったOSSのreadmeとかに貼るといいかも
  • 複数ファイルをかけるようになった
  • ディレクトリもほれるようになった
  • 複数のファイルをタブで管理できるGhrome拡張機能がある
  • GitHub - tenntenn/goplayground: client of Go Playgroundでcliでいじれる
  • shareリンクを作ったり、ファイルをdownloadできたりする
  • txtarをGoのコードから扱う
    • Goのinternalにある
    • 外にだしてあるライブラリを使う
    • txtar -c txtar -xコマンドでできるじゃん、。。。
  • gpが活用できる場面
    • DevQuiz
      • 複数ファイルをまとめて提出できる
      • 採点者が簡単に採点できる

感想

  • 思った以上にGo Playgroundが進化していてびっくりした
  • 自分でライブラリを作った場合は、Readmeにぜひこの方式で貼らせてもらおう

@tottie Gopher イラスト発表

感想

  • LT中のリアルタイムで様子が別モニターで映し出されていて、どっちを見たらいいのか少し困りましたが、素晴らしいイベントでした
  • 次回はドラム叩いてたりとか、DJしているとか音楽モチーフのGopherくんが見たい!! 是非是非よろしくお願いします。。

なんとこの記事を書いている最中に、わざわざドラムを叩いているGopherくんを書いていただきました!!このままグッズ化してほしい。。
本当にありがとうございました!家宝にします!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3