JSUG勉強会で「Spring BootユーザのためのArmeria入門」というタイトルでLTしました #jsug
JSUGスタッフの方にお声がけ頂いて、JSUG勉強会 2020年その6 LT大会!で「Spring BootユーザのためのArmeria入門」というタイトルでLTしました。
発表資料はこちらです。
発表で使ったサンプルアプリはここに置いています。
https://github.com/matsumana/armeria-example-for-jsug
Youtube録画もあります。
https://www.youtube.com/watch?v=a7TDu8aOSUw&feature=youtu.be&t=71
Armeriaとは?
ArmeriaはLINE社がOSSとして開発しているマイクロサービス向けのフレームワークです。
JavaやSpringユーザの皆さんにとってはおなじみのNettyというOSSがありますが、NettyプロジェクトのFounderであるTrustinさんが今はLINEにいて、彼を中心に開発が進められています。
公式サイト:
https://armeria.dev
2019年のLINE DEVELOPER DAYでのTrustinさんのセッション:
Armeria:どこでも役立つマイクロサービスフレームワーク
https://linedevday.linecorp.com/jp/2019/sessions/D2-2
LINEのサービス以外での使用事例ですが、JavaやSpringユーザの皆さんにとって身近なところだと、Zipkin Serverがあります。
Zipkin Server:
https://github.com/openzipkin/zipkin/tree/master/zipkin-server
Slackでも使われています。
Rebuilding Slack Search with Armeria:
https://linedevday.linecorp.com/jp/2019/sessions/D2-3
Armeriaの機能
たくさんの機能がありますが、いくつか紹介しておくと
- 非同期(Spring WebFluxと同じように)
- HTTP/2で通信が可能
- REST APIだけではなく、gRCPやThriftもサポートしている
- マイクロサービスアーキテクチャでサービスを構築する時に必要な機能が含まれている
- Circuit breaker
- Client-side load-balancing
- Service discovery
- Distributed tracing(Zipkin integration)
- Metrics(with Micrometer)
- etc
- Zipkin integration
- Rate limiter
- Graceful shutdown
- 既存のSpring Bootアプリに組み込んで使える(Spring MVC + Embedded Tomcat や Spring WebFlux) などです。
SREの視点では、以下の機能が特に嬉しいです。
- 非同期
- Circuit breaker(Envoy/Istioなどを別途導入する必要がない)
- Client-side load-balancing(Load Balancerが不要になる)
- 運用に役に立つMetrics
- Zipkin integration
- Rate limiter
- Graceful shutdown
Javaでマイクロサービスアーキテクチャでサービスを実装したい場合には、Armeriaはとてもおすすめできます。
サンプルアプリ
今回の発表で使ったサンプル以外にもサンプルアプリがあるので紹介しておきます。
GitHubのリポジトリにOfficialのexamplesが含まれています。
https://github.com/line/armeria/tree/master/examples
僕が個人的に作ったサンプルアプリもあります。
https://github.com/matsumana/armeria-sandbox
このサンプルアプリではArmeriaの以下の機能を使っています。
- Circuit Breaker
- Client-side load balancing
- Service discovery(Central Dogma based)
- Zipkin integration
- Rate limiter
- Automatic retry
以上です。
ご参加いただいた皆さん、JSUGスタッフの皆さん、ありがとうございました!