本記事シリーズでは、AlibabaのオープンソースのSentinel JavaフローコントロールプロジェクトをHystrixと比較しながらご紹介します。
ハイストリックスはここ数年でかなり人気がありました。現在はメンテナンスモードに入っているため、多くの人が代替案を探しています。この記事では、オープンソースのJavaフローコントロールプロジェクトであるSentinelを紹介します。より多くの人に親しまれているHystrixと比較しながら紹介します。このパートでは、この2つをより高いレベルで比較します。次回は、いくつかのコード例を見てみましょう。
Sentinelとは?
簡単に言えば、サーキットブレーカーです。サーキットブレーカーは、特定のリソースが故障し続けたときに起動されます。すでに故障しているリソースを叩き続けるのではなく、 サーキットブレーカはリクエストを傍受して故障信号を返します。これは、すべてのサーキットブレーカーのパターンと似ているように聞こえます。しかし、Sentinelは、フローシェーピング、過負荷保護、フォールトトレランスなど、より多くの選択肢を提供します。
Sentinelの歴史
- 2012: アリババのフロー制御コンポーネントとしてSentinelがスタート
- 2013年~2017年: マイクロサービスの飛躍的な成長に伴い、信頼性への挑戦が訪れる。Sentinelはあっという間にカスケードする災害を防ぐツールへと成長する。
- 2018: Sentinelはアリババによってオープンソース化される。
Sentinelは何のためにあるのか?
- Sentialには、フロー制御を処理するための多くのオプションが用意されています。ユーザーは、QPS、スレッドプール数、システム負荷に基づいてトラフィックを形成することができ、また、コマンドを直接使用してトラフィックを停止したり、コールドスタートを実行したりすることもできます。また、ユーザーは異なるルールを組み合わせて使用することもできます。Hystrixは、包括的なトラフィックシェーピングを提供していません。
- Sentinalは、フォールトアイソレーションとサーキットブレーキングを提供しています。これはHystrixに似ています。しかし、それらのアプローチは異なっています。
- Sentinalはリアルタイム監視を提供します。また、分散システムからの情報を集約するダッシュボードも提供します。
SentinelとHystrixの違いは?
この2つの主な違いは、分離をどのように実現するかにあります。Hystrixは通常、バルクヘッドパターンを使用して依存関係を分離します。Hystrixは、それぞれの依存関係を別々のスレッドプールに置きます。この方法の主な利点は、クリーンカットを提供することです。欠点は、主にスレッドプール管理に発生するオーバーヘッドです。
一方、Sentinelは、各依存関係に対してカウンタを使用します。そうすることで、スレッドプール管理のオーバーヘッドを節約できるだけでなく、ユーザにより多くのコントロールを与えることができます。ユーザーは、フローの劣化の粒度を決めることができるようになりました。
この表は、設計と実装におけるHystrixとSentinelの違いの詳細を示しています。
これは少し圧倒されているように見えるかもしれません。しかし、ユーザーはユーザーエクスペリエンスの観点からはあまり違いに気づかないでしょう。
エコシステム
Sentinalはクラウドネイティブ環境に適しています。他の一般的なクラウドネイティブソリューションと統合することができます。その一つがSpring Cloudです。また、中国で人気のあるJava分散フレームワークにはDubboがあります。Sentinalは、IstioやEnvoyなどのサービスメッシュソリューションと並べて動作することもできます。
参考文献
Sentinal はまもなく Spring Boot フレームワークの一部としてリリースされる予定です。詳細については、彼らのGitHubレポを参照してください。
アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ