post Image
go言語でのマイクロサービスフレームワークの雑な比較メモ

golangとマイクロサービス

最近ではGo言語がWebサーバで利用される機会もだいぶ増えてきたと思います。
利用例の中にMicroServicesやそれを指向したアーキテクチャで使用されている方の話を聞く機会がちょいちょい有りまして、その界隈のツールセットが幾つか登場しつつありますので紹介してみたいなと思う次第でした。
マイクロサービスの運用となると、モノリシックなサーバの時は考えなかった問題に出会うことが多く、そうしたハマリポイントを各ツールについて学ぶことで避けることも出来ると思いますので、ツールを利用しないまでもチェックしてみるのは参考になるのではないでしょうか。

ツール間の比較

項目 go-kit/kit NYTimes/gizmo micro/micro
star数(2016/04/17時点) 3821 1341 1719 + 704(go-micro) + 78(go-platform)
サポートするプロトコル JSON over HTTP, その他独自追加可能 gRPC, JSON over HTTPなど Proto-RPC, JSON-RPC
サービスディスカバリ 独自のloadbalancerパッケージが担う、DNSやconsulなど様々なプラグインを追加可能 Configにて指定、HealthCheckに幾つかのタイプを持っている go-microからConsulを利用可能、各サービスをRegistryパッケージ経由でconsul登録し、利用する形式
ログ 独自、拡張可能、全HTTPリクエストにtransaction_idが振られている logrusをベースにWrapしている 特に用意はなし、exampleでは標準のlogを利用していた
監視 パラメタをstatsdやprometheusに送信するパッケージが用意されている rcrowley/go-metricsを利用、graphiteやその他ツールに送信は簡単 go-platformにあるmetricsから標準ではinfluxdata/telegrafに対してメトリクスを送出
Load Balancing loadbalancerパッケージが登録されたサービスディスカバリ方式とバランシング戦略に応じてノードを選択 gizmo自体にこうした機能は無い? Selectorパッケージが要求に応じてノードを選択
context net/context gorilla/context net/context
特記事項 APIリクエストのtracing機能あり 3つのツールの中では薄いFWな印象 micro/micro自体は複数の言語に対するツールセットの提供、golangではmicro/go-microを利用する。高度な運用に向けてはmicro/go-platformを組み合わせる。

各ツールセットを眺めての感想

サービス間のやり取りについてはどのツールセットにおいても、JSON over HTTPだけでなくgRPCや、様々なメッセージキューも使えるようになっており、同期・非同期にかかわらずサービスを連携させるための上手い仕組みが用意されています。どのツールも比較的Pluggableに作られており、自前のシステムであっても組み込みは容易かもしれません。

go-kit/kit

go-kit/kitは個人的にマイクロサービスでの開発において今回3つのツールセットの中では最も程よいサイズで利用しやすいツールかと感じました。
実運用においては障害やパフォーマンス課題が発生した際にどこで発生したものか、そのトレーシングの難しさが課題に上がることがしばしばですが、go-kit/kitではこのケースに対してtracingパッケージを用いて、どの経由のリクエストで出力されたログなのか追いやすく、運用について考慮がよりなされているように見えます。
また、contextを前提にしたフレームワークは今回調査のツールセットだけでなく多くのWebFWでも増えていますが、contextの利用においては、net/contextベースのツールが増えている印象があり、その点でもgo-kit/kitは利用しやすいと感じています。

NYTimes/gizmo

NYTimes/gizmoは3つのツールセットの中では最もシンプルな作りかなと思いました。
serverとpubsubの2つの形式を選択しつつ各サービスを構築するような形式になっています。
serverはいわゆる通常のHTTPサーバ、pubsubは間にメッセージキューを挟み、リクエストをキューイング、subscriberがそれを読み取り非同期に処理という形です。
利用する側からすると、理解しやすいツールかなと思いまして、全体を踏まえてもそれほどシステムが大きくないのであればgizmoは良い選択肢になりうるのではないでしょうか。

思想についてはこちらを読むのがより良いかと思います。
http://open.blogs.nytimes.com/2015/12/17/introducing-gizmo/?_r=0

micro/micro

micro/microについては、サービス開発のためのmicro/go-microパッケージと、より高度なサービス運用に向けた開発のためのmicro/go-platformの2つを包含しており、ツール規模が3ツールの中では最も大きいものとなっています。
Go以外からの利用も踏まえたもので、InfluxDBや多くのミドルウェアを用意しての協調・監視・スケーリングを構築可能で、Web側で設定値などを管理することもでき、全てをmicro/microに載せるのであれば、スケーラビリティ含め多くの恩恵を受けられるます。
ただしパッケージはgo-microgo-platformに分かれおり、本気で運用するのであれば依存ツールが多くなることなども踏まえて、場合によっては大きすぎるツールのようにも見えました。

思想についてはこちらを読むのがより良いかと思います。
Micro – a microservices toolkit https://blog.micro.mu/2016/03/20/micro.html

最後に

今回紹介した3ツールにおいて、見た限りではどれも非常に有用ですので、そのツールごとのクセなどを踏まえつつ利用してみる、もしくは一部のツールだけ利用するなどしてみてはいかがでしょうか。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。