覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Go Conference 2018 Autumn に行ってきたよ #gocon

Go Conference 2018 Autumn に参加してきましたので、自分用のメモ。

といっても、今回は実務でゴリゴリにGolang使ってる人やGolangにかなり深い知見のある人の発表で、
正直自分の知らない単語拾いに行った感じでした。


概要

  • 開催場所
    • Google Tokyo office 27F
    • Roppongi Hills Mori Tower, 6-10-1 Roppongi, Minato-ku, Tokyo, Japan
  • 日時
    • 2018/11/25 10:00〜19:00

f:id:nini_y:20181125094724j:plain


Microservices実装ガイド in Go at メルカリ

Speaker: Hidetatsu Yaginuma @yagi5(株式会社メルカリ)

  • メルカリとMicrosrtvices
    • メルカリはもともとPHP製のモノシリックAPIだった
  • どのようにMicroservicesを実装しているか?
    • Protocol Buffers定義 → サービス実装
  • Protocol Buffers 定義
    • 各サービスのインターフェースを定義
    • protoc でProtocol Buffers定義の各プログラム言語のクライアントコードを自動生成している
    • すべてのメンバはprotoファイルを読めばAPIのインターフェースを理解できる
  • サービス実装
    • テンプレートプロジェクトをclone
    • rm -rt .git
    • git init
    • サービスを実装
  • テンプレートプロジェクト
    • echo と呼ばれている
    • 基本的な機能を提供
      • ミドルウェア(認証, Logging, Recover...)
        • Server Chain(Interceotors)の仕組みを利用している
      • Logging
        • opencensus, zap(zapgrpc) を利用している
    • 独立したチームを作ることを助ける
      • RateLimit / CircuitBreaker
  • Goのいいところ
    • ネットワーク/ミドルウェアレイヤーと相性がいい
    • チューニングがしやすい(go -test bench, pprof)
  • メルカリでのMicroservices
    • 各チームがメンバーの採用や技術スタックの選定にもオーナーシップを持つ


よくあるJava IT企業で新規プロジェクトをGoで立ち上げてみてる話

Speaker: 武田 洋平(株式会社メディアドゥ)

  • 抱えていた課題
    • 10年以上構造に変化がないプロダクト
      • 追加機能・不具合習性が難しい
  • ビジネスとして成り立つサービスにしたい
    • 安定した運用を行いたい。
  • Javaをやめよう
    • 優先度の高いものから置き換える
    • パフォーマンス、開発のしやすさからGolangを導入へ
  • 経営層、マネジメント層への説明
    • JVMではない点で楽な所もある
    • Javaで進める方が将来的にリスクが高い
    • 学習コストが低いので、Golangもすぐ書ける
  • スモールスタート
    • 論より証拠、さっさと動くものを作成
  • Golangの採用でよかったもの
    • 書き方がかなり制限される
  • Good Performance
    • みんなの開発が速い
  • error handling
    • 本格的なサービス運用で、いろんな課題が改めて露呈するはず
  • Golang利用企業としてブランディング
  • よくあるJavaメインのIT企業の会社もGolangは導入できる


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

Speaker: @munisystem

  • アプリのパフォーマンスを気にするのか?
    • ユーザ体験が重要な指標
    • ユーザ体験とパフォーマンスには重要な関係があるはず
  • APM
    • Application Performance Management
    • パフォーマンス及びその改善位必要なデータの取得
    • 取得したデータの可視化、活用できる基盤の構築
    • 取り扱う代表的なデータ
      • Tracing
      • Metrics
      • Logging
      • Error reporting
  • Tracing
    • Dstadog APM
  • Metrics
    • Datadog
  • OpenCensus
    • APMに必要なデータを収集し外部サービスに提供するフレームワーク
    • アプリケーションはデータを収集する部分を実装する
    • OpenCensusの欠点
      • バックエンド固有の最適化のためのメタデータが付与できない
  • ベンダーに依存しない実装により、APMはさらなるエコシステムの成長を遂げるのではないか


Profiling Go Application

Speaker: orisano

  • 画像変換サーバの例
    • 高速化のために
      • Boundary Check Elimination (BCE)
    • pprofで遅い原因を特定したら
      • ベンチマークを取る
  • 普段使っているものもカリカリにチューニングされてるわけではない
  • Golangはパフォーマンスチューニングしやすい言語


Biscuit Code Reading

Speaker: Yoshiki Shibukawa


Golang で作られた Biscuit というOSのお話。

  • Biscuit
    • Monolithic, POSIX-subset OS kernel in Golang
      • Multicore
      • Kernel-supported threads
      • Journaled FS with concurrent, deferred, and group commit
      • Virtual memory for copy-on-write and lazily mapped anonymous/file pages
      • TCP/IP stack
    • In addition to that, we can read the OS implementation in Go
  • 当たり前なんですが、OSに関する内容で、だいぶ理解が追いつきませんでした笑


Consider pluggable CLI tool implementation

Speaker: @izumin5210

  • grapi
    • GoのAPI Serve開発体験を高めるCLI+package

  • plugin機構
    • ユーザが外から拡張できるようにする
    • Extensibility
  • Plugin Experience
    • 複数人のプロジェクトでも利用できるか?
    • 実装・デバッグは簡単か?
    • 配布は簡単か?
  • 使いやすい・作りやすいplugin機構


フィードバック制御によるGoroutine起動数の最適化

Speaker: monochromegane

  • 並行処理とチューニングにおける課題
    • 最適な並行数を求めたい
      • ブロッキング発生する状況においては、開発者の経験と地道なチューニングに依存
      • 従来手法は、短期稼働で即時に反応できる場合に辛い
  • Kaburayaアーキテクチャ
    • 処理やランタイムの特性に依存せずにマシンの負荷に応じて反応的かつ継続的に、並行数を最適化する
    • フィードバック制御
    • PID制御(P:比例制御、I:積分制御、D:微分制御)
    • 制御器の2重ループにした
  • Go言語への適用
    • バッファ上限値を変更可能なElasticChannel
  • 最適な並行数とは
    • 高速化率(Speedup)
    • 実行効率(Efficiency)


Practical Go Concurrency Design Patterns

Speaker: moriyoshi

  • Goのsync.Mutex
    • LockしたGoroutine以外からUnLockできる。一般的なセマフォの代わりに使える。
      • (例えばJavaのLock系のクラスだと、ロックしたスレッドからしかアンロックできない。)
  • Monitors and Condtion Variables
    • Mesa semanntics
      • ほとんどのプログラミング言語はこちらを採用
    • Hore semantics
  • GolangでのBroadcastを実現する
    • channel の closeを利用すること大まかに再現できる
    • sync.Cond


Pains and gains of architecting microservices on local dev environment

Speaker: @creasty, @izumin5210(ウォンテッドリー株式会社)

  • 気持ちが良い開発体験を提供したい
    • 開発環境をDocker化
      • ただし、コンテナの起動状況を考えたくない(Dockerを使っていることに気づかないのが理想)
      • 解決策:rid


まとめ

若い人もかなりバリバリにGolangで開発してる感じが発表から伝わって来ました。
言語特性もあって、けっこう低レイヤな話になってるパターン多かったかな。
今度は、懇親会にも参加したいです。



関連リンク