【facebook groupについて】
マイクロサービスの情報をシェアするためのFacebook Groupがありますので、興味のある方はぜひお入りください。
「Microservices Community / マイクロサービスコミュニティ」
マイクロサービスアーキテクチャのフレームワークをまとめました
マイクロサービスアーキテクチャ、最近流行ってますが、どんなフレームワークがあるのか、一覧になっていなかったので、まとめました。ところどころ参考資料から文章を引用させていただいている部分があります。また、全部触ったわけではないので、解釈が間違ったものがあればコメント欄で教えてください。加筆修正致します。
また2017/02/02より、「マイクロフレームワーク」も扱うことにしました。
マイクロサービスフレームワークとマイクロフレームワークはマイクロサービスの開発に使えるフレームワークという意味合いでは同じです。実際にマイクロサービスアーキテクチャのコンテキストでマイクロフレームワークが述べられていたりします。
マイクロサービスは設計上の理念が重要です。マイクロサービスフレームワークはマイクロサービスアーキテクチャのアプリケーションを構築しやすくするためのものであって、マイクロサービスフレームワークを使ったからといってサービスがマイクロサービスになるわけではありません。そうした理由から、今回「マイクロフレームワーク」も同列のものとして扱うものとしました。
不定期で新しいフレームワークを見つけたら更新していきます。
(最終更新2017/02/25)
そもそもマイクロサービスアーキテクチャとは
脱モノリシックなアプリケーション
- 分割された複数のサービスの組み合わせでアプリケーションを作るアーキテクチャ
- 従来型の全ての機能を盛り込んだ一枚岩(モノリシック)なアプリケーションと対照的
従来のモノリシックアプリケーションのアプローチ
モノリシックなアプリケーションはすべての機能が共通のドメインにあり、すべての実行はシングルプロセスに投げ込まれる
スケーリングは「すべての機能を含んだVM」を増やすことによって実現される
マイクロサービスアプリケーションのアプローチ
マイクロサービスでは機能ごとにアプリを分断し、それぞれのロールに準じた小さなサービスとして運用される
スケーリングは それぞれのサービスを独立して作り、サーバーをまたいで新しいサービスのインスタンスをたてることによって実現する
マイクロサービスアーキテクチャが向いているケース
設計段階
- サービスはビジネス機能の粒度にして、開発チームもそれに合わせた構成にしたい
- アプリケーションを 小さなサービスの組み合わせで構築したい
- サービス間で異なるデータストレージ技術を使うはありだ
開発段階
- サービス間はHTTPのような軽量なプロトコルにしたい (スマートエンドポイント)
- 複数のサービスを異なる言語で記述したい
運用段階
- サービス単位でデプロイしたい
- インフラを自動化して、デプロイや運用の複雑さを減らしたい
それではまとめていきます。
Ruby
Hanami(旧:Lotus)
【特徴】
Hanamiは多くのマイクロサービスからなるRubyのMVCのwebフレームワークです。シンプルさや安定したAPI、最小のDSLを特徴とし、責任範囲が多種多様で複雑なオブジェクトよりも一般的で普通のオブジェクトを重視しています。シンプルなオブジェクトを明確な責任範囲で使うことで、より予測可能なコードでのプログラミングが可能になります。
【言語/開発環境等】Ruby
【提供元】dnsimple
【ページ】
Hanamirb.org
github
【参考記事】
Hanami(旧:Lotus) - MicroservicesのためのRubyフレームワーク
Praxis
【特徴】
人的ミスを避け、テストと実装が常に同期するような開発ができるフレームワークです。それによって開発者が期待する精度でのAPI開発が可能です。デザインを対話形式で確認でき、他のドキュメンテーションツールにエクスポートできます。このフレームワークの利用でアプリケーションロジックに集中できるようになります。
【言語/開発環境等】Ruby
【ページ】
ホームページ
github
サンプルアプリ(github)
Scorched
【特徴】
Scorchedは、Rubyでできたの一般的で、柔軟な軽量Webフレームワークです。HTTP要求を処理するための汎用的かつ強力な構造体を提供し、いかなる規模、いかなるタイプのWebサイトやアプリケーションでも構築することができます。
【言語/開発環境等】Ruby
【ページ】
ホームページ
github
C♯
Service Fabric (Reliable Services / Reliable Actors)
【特徴】Service Fabric は、スケーラブルで信頼性の高いマイクロサービスの簡単なパッケージ化、デプロイ、管理を実現する分散システム プラットフォームで、クラウド アプリケーションの開発や管理での大きな課題に対処します。同システムでは主にReliable Collectionsを用いたReliable Services / Reliable Actorsのフレームワークが選択可能です
【言語/開発環境等】C#, (Java)
【提供元】Microsoft
【ページ】
Azure Service Fabric(公式)
Service Fabric の概要
github(Azure-Samples/service-fabric-dotnet-getting-started)
【参考記事】
Microsoftが発表したAzure Service Fabricは完全なオートスケーリングのPaaSを提供する(将来的には他社クラウドに対しても)
MicrosoftのマイクロサービスプラットホームAzure Service Fabricが一般公開へ
go
goa
【特徴】DSL(Domain-Specific Language)によるサービスAPIの定義と,対応するサーバとクライアントの“ボイラプレート”コード,およびドキュメントの自動生成が可能です
【言語/開発環境等】Go
【提供元】RightScaleのシニアシステムアーキテクトであるRaphael Simon氏
【ページ】
goa: Untangling Microservices (英語)
github
【参考記事】
Goベースのマイクロサービスフレームワーク"goa"によるサービスAPIの定義,レビュー,実装
Gizmo
【特徴】標準化されたコンフィギュレーションとロギング,戦略設定の可能な状態監視とエンドポイント計測機能,サービスのエクスペクテーション(expectation)とボキャブラリ(vocabulary)を定義する基本的なインターフェースを備えています
【言語/開発環境等】Go
【提供元】The New York Times開発チーム
【ページ】
Introducing Gizmo(英語)
github
【参考記事】
Gizmo - The New York Times開発チームによるGo言語ベースのマイクロサービスツールキット
Go kit
【特徴】
Go kit は大きな組織のマイクロサービスを作るためのプログラミングツールキットです。マイクロサービスによってビジネスロジックにフォーカスすることができます。
【言語/開発環境等】go
【提供元】Peter Bourgon
【ページ】
gokit
github
【参考記事】
go言語でのマイクロサービスフレームワークの雑な比較メモ
micro
【特徴】
microはシンプルかつアクセスしやすいマイクロサービスで、誰もが、簡単にマイクロサービスを書き始められます。数百個のサービスをスケールするときは、microはマイクロサービスの環境をマネジメントする基礎となるツールを提供します。
【言語/開発環境等】go
【提供元】MicroHQ(Asim Aslam)
【ページ】
micro
github
【参考記事】
go言語でのマイクロサービスフレームワークの雑な比較メモ
Scala
Colossus
【特徴】 Scala 製のノンブロッキング I/O (NIO) フレームワーク。高性能なマイクロサービスを構築するためのフレームワークを謳っており、まだ OSS 化されて日が浅いがTumblr ではすでに production で使われているとされます。また、Colossus 自体がアクターフレームワーク Akka のアクターとして実装されており、それを使った独自のスレッドモデルを提供しています
【言語/開発環境等】Scala
【提供元】 Tumblr
【ページ】
Colossus - Service I/O Framework
github
【参考記事】
マイクロサービスのための Tumblr 製フレームワーク "Colossus"
マイクロサービスが Scala を選ぶ3つの理由
Java (一部はScalaもサポート)
Lagom
【特徴】Play FrameworkやAkka製品ファミリに加え、開発用としてConductRを使用しているのが特徴です。デフォルトはメッセージ駆動型の非同期方式で、分散型CQRS永続化パターンとイベントソーシングを実装の中心に使用しています
【言語/開発環境等】Java、Scala
【提供元】Lightbend (Typesafeから名称変更)
【ページ】
Lagomホームページ
github
【参考記事】
Lagom - 新しいマイクロサービスフレームワーク
リアクティブなマイクロサービスフレームワーク「Lagom」を試してみる
VERT.X
【特徴】Java仮想マシンを基礎とし、リアクティブで分散され、異なるプログラミング言語が混合されたアプリケーションの構築基盤。
【言語/開発環境等】Java
【提供元】 Eclipse Foundation project
【ページ】
VERT.X
github
【参考記事】
Vert.x 3.3.0は改良されたネットワーク、マイクロサービス、テスト機能などを提供する
Spring Boot
【特徴】Spring Frameworkでマイクロサービスアーキテクチャのアプリケーションを作るために作られた。
【言語/開発環境等】Java
【提供元】Pivotal Software
【ページ】
Spring Boot
github
【参考記事】
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ!
WSO2 MSF4J
【特徴】WSO2 Microservices Framework for Java (WSO2 MSF4J) の略。Javaのマイクロサービスアーキテクチャを実現するフレームワークで、開発者がJavaのマイクロサービスを開発するのに役立ちます。コンテナべースのデプロイで、数秒でドッカーコンテナを起動することができ、ドッカーイメージの追加設定も簡単です。
【言語/開発環境等】Java
【提供元】WSO2
【ページ】
WSO2 Microservices Framework for Java
github
Datawire Connect
【特徴】自動生成されるRPCスタイルのクライアントライブラリを使用した"レジリエントなマイクロサービス接続"を実現します。クライアントライブラリでは,サービス登録やディスカバリ,ダイナミックなロードバランシングとルーティング,自動タイムアウト,サーキットブレーカなどの機能を提供します。
【言語/開発環境等】Java, Python, NodeJS
【提供元】Datawire
【ページ】
Introducing Datawire Connect for Resilient Microservices (英語)
github
【参考記事】
Datawireがフォールトトレラントなマイクロサービスフレームワーク 'Datawire Connect' をリリース
Python
Nameko
【特徴】NamekoはPythonのマイクロサービスを立ち上げるためのフレームワークです。AMQPでのRPCや非同期イベント(pub-sub)をサポートします。シンプルなHTTPのGETとPOSTを使う設計になっています。
【言語/開発環境等】Python
【提供元】onefinestay
【ページ】
Nameko
github
Web.py
【特徴】イベント・ドリブンのネットワークプログラミングエンジンです
【言語/開発環境等】Python
【提供元】Aaron Swartz worked at reddit.com
【ページ】
homepage
github
Twisted
【特徴】イベント駆動型のネットワークエンジンです。主にPython2の上で動き、現在発展中のsubsetはpyton3でも動きます。
【言語/開発環境等】Python
【提供元】 Twisted developers
【ページ】
homepage
github
Blog
Tornado
【特徴】Tornadoはウェブフレームワークと非同期のネットワークライブラリです。
もともとはFriendFeedで開発されていました。ノンブロッキングネットワークI/Oを使うことによって、何千もの接続経路を確保でき、ロングポーリング、ウェブソケット、ユーザーの長時間の接続が必要なアプリケーションにとても良い選択肢です。
【言語/開発環境等】Python
【提供元】FriendFeed
【ページ】
homepage
github
wiki
Flask
【特徴】Flaskは、Werkzeug、Jinja 2に基づくPythonのマイクロフレームワークです。
【言語/開発環境等】Python
【提供元】Armin Ronacher
【ページ】
homepage
download
github
Perl
Mojolicious
【特徴】リアルタイムWebフレームワークで、簡単によく出来たMVC Webアプリケーションを作成できます。また、あらゆる種類のアプリケーションに使用できるWeb開発ツールキットを備えています。きれいで移植性の高いオブジェクト指向のPerl フレームワークです。
【言語/開発環境等】Perl
【提供元】Sebastian Riedel
【ページ】
ホームページ
github
PHP
Lumen.
【特徴】Lumen はマイクロサービスの開発のためのソリューションであり、PHP で書かれた競合のマイクロフレームワークよりも速度が速いことをアピールしている。LumenはLaravelのマイクロフレームワーク版で、同じIlluminateコンポーネントを利用して、ルーターは最速ルーティングライブラリとも言われる nikic/FastRoute を利用しています。
【言語/開発環境等】PHP
【提供元】Larave
【ページ】
Lumen
github
【参考記事】
マイクロフレームワークLumen
Introducing Lumen from Laravel
API Platform
【特徴】API Platformは、高い拡張性と柔軟性を備えた、最初のAPIプロジェクトを簡単に作成できるように設計された、次世代のPHP Webフレームワークです。
【言語/開発環境等】PHP
【提供元】Kévin Dunglas Supported by Les-Tilleuls.coop
【ページ】
ホームページ
github
Silex
【特徴】SilexはPHPのマイクロフレームワークです。 SymfonyとPimpleをベースに構築され、sinatraに触発された作りになっています。
【言語/開発環境等】PHP
【提供元】Fabien Potencier
【ページ】
ホームページ
Slim
【特徴】Slimはシンプルで強力なWebアプリケーションやAPIを素早く作成するためのPHPマイクロフレームワークです。
【言語/開発環境等】PHP
【提供元】Josh Lockhart, Andrew Smith, Rob Allen, and the Slim Framework Team
【ページ】
ホームページ
github
【参考記事】
PHPのマイクロフレームワーク「Slim」を使ってみたら本当にスリムだった話
javascript
SENECA
【特徴】障害の発生を前提として作られたフレームワーク。例えば、メッセージの繰り返しやループの対策として,内部的にサーキットブレーカが用意されています。ネットワークトポロジをサービス実装から完全に分離することによって,驚くべき柔軟性を実現します。例えば,関数コールをトランスポート機構として使用するだけで,Senecaマイクロサービスをモノリスに変えることさえ可能
【言語/開発環境等】javascript
【提供元】nearForm
【ページ】
senecajs
github
【参考記事】
Richard Rodger氏の講演"Surviving Microservices"より - メッセージ,パターンマッチング,障害
ArangoDB Foxx
【特徴】FoxxはJavascriptのフレームワークで、データセントリックなHTTPマイクロサービスを提供します。このサービスはArangoDB(ドキュメント指向データベース)の中で動きます。
データセントリックアーキテクチャとは、データの移動を最小限にし、データの近傍で演算する設計のことです。現在は「データの演算」よりも、例えばストレージからメモリー、メモリーからプロセッサへとデータを転送する「データの移動」に時間や電力を多くの消費しており、システム全体の性能を高める上で最大のボトルネックになっているので、データの移動をできるだけ少なくするようにして、システム全体の高速化や省電力化に直結するように最適化されています。
【言語/開発環境等】javascript
【提供元】ArangoDB
【ページ】
ArangoDB Foxx
github
【参考記事】
米IBMに聞く「データ・セントリック・システム」の正体
更新履歴
2016/07/30:作成
2016/07/31:ArangoDB Foxx、Nameko を追加
2016/08/03:go-kit、microを追加
2017/02/17:Scorched、praxisを追加
2017/02/22:Flask、Twisted、Tornado、Web.pyを追加
2017/02/25:Mojolicious、API Platform、Silex、Slimを追加