今回はゆるふわ系でgolangのWAFまとめ。
本当ならgoweb + angular とかでなにか作った話をしたかったが、ムリポ。
というわけでまとめます。
GitHub : https://github.com/robfig/revel
Site : http://robfig.github.io/revel/
フルスタックWAF、多分最もgolangのwafの中で人気ある(starの数的な意味で)。 フルスタックWAFとはいえ、JSONを返すだけのパフォーマンスの勝負でも上位。
http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json
https://github.com/TechEmpower/FrameworkBenchmarks

※ちなみに1位はpure golang
中にmail senderや web socket serverなども組み込まれてて便利、やりたい事は一旦revel apiの中を見ればよさ気。
https://github.com/robfig/revel/tree/master/samples
- コード変更を検知して自動リロード
- 中にテストフレームワークまで組み込んでくれる親切設計 (http://robfig.github.io/revel/manual/testing.html)
- フィルターでミドルウェアを作れる (http://robfig.github.io/revel/#filters)
GitHub : https://github.com/ngmoco/falcore
Site : http://fitstar.github.io/falcore/
我らがngmoco製。ただ最近、ngmocoじゃなくて、fitstarという方がforkして引き継いでくれてるみたい。
https://github.com/fitstar/falcore
fitstar製が今後の主流になってくる様子。本家と比較するとGAEサポートが付いているみたい。 フルスタックWAFだけど、こちらもやはり性能勝負ではrevelとほぼ同等。稀にfalcoreがrevelやpure golangを抜くことも。
http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json
- Hot restart hooks for zero-downtime deploys!! (https://github.com/ngmoco/falcore/blob/master/examples/hot_restart/hot_restart.go)
こんな感じでやるみたい。HUPを送ったら自動でforkして自分自身を殺す?みたいな?
- Builtin statistics framework (http://fitstar.github.io/falcore/performance.html)
ビルトインで自分のリクエストレスポンスの時間を測れる、嬉しい機能。どのフィルターで時間がかかっているか分かる。
GitHub : https://github.com/astaxie/beego
Site : http://beego.me/
astaxieさんという、先週紹介したGo Webプログラミングの本を書いた人。 日本語訳:https://github.com/astaxie/build-web-application-with-golang/tree/master/ja
beego is a Go Framework inspired by tornado and sinatra.
とのことなので、割りとミニマムスタックなWAF、MVCフレームワークに特化してる感じ。
とはいえ、中にtemplateがあったり、ORMサポートしてたりと結構フルスタックよりのフレームワーク。revel程高機能ではない。
性能勝負でもrevel, falcoreには劣るがそこそこ速い。
- ドキュメント超親切(http://beego.me/docs/intro/)
- ORMサポート
- MVCに特化してる感じ、中国では割りと使われてるっぽい。
GitHub : [https://github.com/stretchr/goweb]
個人的には一番好きな超シンプルフレームワーク。 覚えること少ない、基本的にルーティングとJSONのレンダリングしかしない。
性能勝負では誰も実装してないので、割りと後発なのかも。ただ、tenntennさんをはじめとして割りと日本でも使われ始めてる。
http://qiita.com/tenntenn/items/7f532cc883c9ba3151a8
goweb1から最近goweb2ができてガラッと実装を変更しており、性能も速くなっているとのこと。
- simple
- ここから学ぶといいかんじかも。
GitHub: https://github.com/gorilla/
Site: http://www.gorillatoolkit.org/
isuconで使われてたtoolkit,正確にはwafじゃない。
FAQに書いてある
Q. Is Gorilla a framework? A. No, it is a toolkit. Just use what you need with your favorite framework or the http package.
ということなので、単なるツールキット、WAFといっしょに使ってね、ということなので、WAFと一緒に使うと便利そうなツールが揃ってる。
https://github.com/gorilla/websocket https://github.com/gorilla/rpc https://github.com/gorilla/mux
- revelが高機能かつ高性能、でも覚えること多い
- falcoreも高機能かつ高性能、性能もrevelに勝つこともあるが、メンテンナンス母体氏...
- beego、MVC特化、document超親切。学ぶのに良さそう。中国のサービスでは実績ある。
- goweb、マイクロフレームワーク、学ぶのによさ気。後発なので性能計測が一緒にされてないけど、シンプルなので使い勝手が良い。
- gorilla 正確にはフレームワークじゃなくてツールキット。rpcの機能だけgowebに追加するとかいい感じにシナジれるといいかも。
revelは一番無難。 gowebでシンプルな設計をしつつ、gorillaを組み合わせるというのが成長するには良さそう。 goweb, gorillaの組み合わせは性能検証してみたいところ。