Go Conferenceに参加してき話

参加した経緯

 wantedlyさんが応募していたスカラシップで参加しました!お金がない僕にとってありがたすぎました!笑  

www.wantedly.com

 今回は僕が聞いたセッションのみですが特に面白いと感じたものを書いていこうと思います。

Microservices実装ガイド in Go at Mercari

メルカリとMicriservices

  • メルカリはPHP製のモノリシックAPIだったという事を聞いてびっくりしました。
  • 組織的課題に立ち向かうためにマイクロサービスに移行したそうです!最近マイクロサービス流行ってる!

どのようにMicroservicesを実装しているのか

  • Protocol Buffersの定義をしてサービスを実装する
  • Protocol Buffersとは
    • スキーマ言語のことでgRPCにおけるインタフェース定義に使用できる。
    • メルカリではサービス間通信にgRPCを採用しているそう。
  • Protocol Buffer定義
    • 開発者がProtocolBuffersを作成
    • CIがprotocを実行し、言語ごとのクライアントコードを別リポジトリに自動生成
    • サーバなどの各言語も自動生成
    • すべてのメンバーはprotoファイルを読めばAPIのインタフェースを理解できる
      • 他のチームのサービスの詳細を知らなくていい

 それぞれの開発者がProtocolBufferを作成した別リポジトリに自動生成する事で、自分の開発に専念できるのか!

  • サービス実装の流れ
    • テンプレートプロジェクトをcloneして名前をつける
    • rm -rf .git
    • git init
    • サービスを頑張って作る

 これに関しては僕はやったことないからわからないけど、それぞれ開発者が同じリポジトリでブランチ切るってのもいいんじゃないかと思いました。

  • テンプレートプロジェクトについて
    • echoと呼ばれている(リクエストされたメッセージをそのままレスポンスする)
    • Microservices開発に必要な基本的な機能がある
      • ミドルウェア機能
      • ロギング
        • opencensus、zap(zapgrpc)を利用している
        • opencensusのexporterにはDatadogを利用している
        • main()でtracerをセットアップ
        • サービスの実装の中では、APM取得にDatadogにspanを使用

github.com

github.com

 初めて聞いたOSSだったのでとても勉強になった。今度読んでみよう、、

作ってみていいところ、GOのよさ

  • ネットワーク/ミドルウェアとの相性がいい
  • 静的解析ツールで書き方を強制できる
    • gofmt, go vet, golint, misspellなどなど
  • シングルバイナリが動く
  • チューニングしやすい(並列実行)

 goにはgoroutineとかchannelとかがあるから並列実行が比較的簡単にできていい!

OpenCensus による APM の実現と、未来

なぜアプリケーションのパフォーマンスを測る必要があるか

  • ユーザの体験がサービスの成長に大きく影響するから
  • ユーザの体験とアプリケーションのパフォーマンスは密接に関係している

 これは確かにそうだなーって思った。自分がサービス使っててレスポンス遅かったら使う気が...ってなる笑

APM

  • アプリケーションパフォーマンス管理のこと

APMの実現のために必要なこと

  • パフォーマンスおよびその改善に必要なデータの取得
  • 取得したデータを可視化、活用できる基盤の構築

APMで取り扱う代表的なデータ

  • Tracing
    • response time
  • Metrics
    • RPM / resource usage
  • Logging
  • Error reporting

OpenCensusとは

 またまたOpenCensusだ!流行ってるのかな笑

github.com

APM実装共通化

  • データの収集(collector)と、変換 / 送信(exporter)の分離
    • Cloud Providerはexporterだけ実装する。
    • アプリケーションはデータを収集する部分を実装する
      • 送信するデータを作成するwrapper libraryの利用
      • 手動でデータの作成を行う

 実際にデータを収集しての調査の大切さとかが改めてわかった。APMっていう概念の理解もできたのが大満足!

speakerdeck.com

Practical Go Concurrency Design Patterns

プロセス

  • いくつかの順序だった操作の集合体
  • 循環して同じ処理をするものをプロセスでまとめれる

リソース

シリアライズ

  • もしかしたら重なるかもしれないオペレーションを一列に並べる

Lock

  • あるプロセスがロックを持っていたら、それに関連する他のプロセスがロックを持てない。

mutex

  • ロックの所有権を表している。

 goにはgoroutineというものがありますが、それを使って説明すると抽象的なものになってしまうということで、プロセスの部分からConcurrencyの概念を資料で解説してあるので理解が深まる!自分で並行処理書くときもお約束のようにしか書いていなくて実際に中でどういう処理が動いていたりするのかをあまり理解せずに使っていたけど、とてもわかりやすくて理解が深まった! ちなみに、先日Go言語による並行処理という本が出版されたのでそれを読んでもっと並行処理を理解したい!(本が積まれてるからまずはそれから読む、、、)

Amazon CAPTCHA

speakerdeck.com

最後に

 今回、初めてgo conferenceに参加して得られたものが大きかったです。改めてwantedlyさん、ありがとうございました!!