Go in Corporate Solution Engineering

@fivestar

  • 経営課題を解決することを目的としたエンジニアリング
  • メルカリではtwitter nameで呼ぶ文化?@fivestar
  • CSE(Corporate Solution Engineering)
  • CSEチームはアプリの開発チームからは独立してる
  • 最初は社長室の一部
  • 社長の課題解決することを目的として始まった
  • (経営課題をエンジニアリングで解決って何をすればいいの?google analytics API叩きまくる?)
  • 3つのpeople products(teams: チームに関する何か(忘れた), reviews: 評価, benefits: ボーナス)
  • frontはreact, redux / backendはgo
  • エンジニアリングチーム体制(メインのプロダクトはそれぞれ決まっているが、流動的)
  • 多くのメンバーはfrontend/backend両方やる
  • アーキテクト front/ backendにそれぞれアーキテクトが1にん
  • コードもめっちゃ描く、コードレビューもする
  • DevDay 月に1,2回技術的課題解決に注力(FixItsみたいな感じ)
  • リファクタリング、ドキュメント整理など
  • インフラはメルカリのMicroservice用のDockerがあるらしい
  • クリーンアーキテクチャに近い(何それ)
  • RESTフレームワーク(受ける側)を開発(PHPのBEAR.Sundayみたいなやつ)
  • api未定義の場合は405を返す(?)
  • laravelのresourceみたい
  • go-chi/chiがルーティング
  • hot-reloadの仕組みを最優先した(開発効率に妥協しない)
  • リリース前に管理画面がないことが判明(tamate webみたいだ…)
  • でも頑張って作った
  • CloudKMS(評価などの機密情報を暗号化)
  • Benefitsリリース(あとでググる)
  • カラム追加とか効率的に
  • testifyって何がいいの(goのテスティングフレームワーク)
  • マイクロサービス化する(teams, reviews, benefits と分けたいってこと?)

質問したこと: jsonがgoで扱いづらいと感じる理由

  • 未知のカラム追加をするなどの場合、特殊な構造体を使わなければならない(map[string]interface{}とかを構造体の一部に乗せるのがイヤなのかな カラムがネストしてなければそんなに辛くはないけど… reflectionはヤバイ)
  • nullableの扱いが困難(ポインタ型にするとなぜ危険なのかあとで考える)

俺たちのマイクロサービスはまだ始まったばかりだ

@kokukuma

  • マイクロサービスとは、開発、運用をスケールアウトできるようにするためにやる
  • 自分が関わる範囲を小さくする
  • その範囲を全部自分のものにする
  • 他の人の範囲を、API経由で利用する
  • コードベース、開発プロセス、組織などが全て独立しているのがいいマイクロサービス
  • “Microservices Platform at Mercari “ mercari tech conf 2018
  • リスティングサービスの解説が始まった
  • GCPに入ってるものとsakuraに入ってるものがある
  • QA, Client, SREは含まれていない
  • 分散モノリスって何 -> バイナリの依存関係でマイクロサービス同士が密結合になってしまうこと
  • とちゅう疲れたのであまり聞いてなかった
  • QA環境を複製(サービスメッシュを使う)
  • 特定リクエストのみ特定サービスに切り替える
  • 各サービスでは、デプロイだけ

質問とか

  • マイクロサービスとgoの相性いい点は?
  • 1バイナリなのでscratchで動く

keep watching and features of gRPC

@kazegusuri

  • gRPCの話(紹介を省略された)
  • grpcをどうやって知るか
    • github.com/grpc/propsal
      • gRFC
    • github.com/grpc/grpc-go
      • 新機能
    • twitterでgrpcを検索
  • gRFC: design proposal
  • github.com/grpc/grpc-go/Documentation (最近充実し始めた)

grpcのリリースの歴史

before v1.0

  • server intercepter
  • balancer v1 grpcはコネクション張りっぱなしなのでロードバランサがバランシングしてくれないのを解決
  • server reflection
  • graceful shutdown

v1.0

  • stats openCensusはstatsを使ってる
  • serviceConfig 設定パラメータを渡せる汎用的な仕組み
  • tap statsと同じタイミングで呼ばれる

v1.2

  • keepalive grpc.KeepaliveParams() grpc.KeepaliveEnforcementPolicy()
  • status

v1.4

  • CallOption (grpcではリクエストをcallという)

v1.6

  • status details: 詳細なエラーメッセージ

v1.7

  • balancer, resolver (gRFC L9)カスタムのDNSリゾルバとか使えるようになった

v1.8

  • client-side retry (gRFC A6)
  • encoding クライアント毎に別々の圧縮方式を使えるようになった

v1.10

  • encoding protobuf以外の実装が入った(grpc.Codec)

v1.12

  • channelz チャネルに通っているリクエスト数とか取れるようになった

v1.14

  • client-side retry サーバー側が、リトライを制御できるようになった

v 1.17

  • health check (gRFC A17)