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スタッフの皆さん、ありがとうございました!