この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
はじめに
現在のアプリケーション開発はコンテナーやサーバーレスの普及と共にモノリシックからマイクロサービス・分散アプリケーションへ移ってきています。
方法論としてアプリのための12要素や、機能としてサービスディスカバリー、サーキットブレーカー、分散トレース、監視などが必要であり、それぞれの機能やライブラリの実装として Netflix Eureka、HashiCorp Consul、Dapr、SteelToe などが開発されています。
Project Tye は、マイクロサービスの開発を容易にすること、.NETアプリケーションのKubernetesへのデプロイを自動化することを目的としています。
開発を容易にするとは、イコールローカルオーケストレーターのことで、「tye」から始まるコマンドで多くのサービスを実行したり、サービスディスカバリーのように他のサービスのアドレスを自動的に検出・動作することで開発時のURLの衝突を防いだりすることが可能です。
この記事では、Project Tye のサンプルコードを動作させどのような仕組みか試してみます。
▼ 用語説明
※サービスディスカバリー:マイクロサービスでは複数のエンドポイント(インスタンス)が動的に生成され、IP が固定されることはありません。それらのエンドポイントを一括管理する仕組みがサービスディスカバリーです。ロードバランサーでは各サービス毎のロードバランサーが必要になるため、現在はサービスディスカバリーで管理する手法が一般的です。
※サーキットブレーカー:あるバックエンドサービスが落ちた場合、それ以上そのバックエンドにリクエストさせないようサーキットブレーカーを配置し、フロントに通知します。バックエンドにリクエストを処理させず、より早い回復を促します。
※分散トレース・監視:マイクロサービスでは各サービス・各インスタンス毎にログ出力すると見にくく管理しにくいため、一括して監視するための仕組みが必要です。
動作させてみる
サンプルコードは多々ありますが、以下のサンプルを動作させてみます。
https://github.com/dotnet/tye/tree/master/samples/frontend-backend
VS Code で開き、tye run と打つだけです。
すると、「http://127.0.0.1:8000/」で専用のダッシュボードが動作します。
これは tye.yaml に記載されているサービスを tye が自動的に起動しているからで、開発者はこのサービスの記述をプロジェクトやその他の docker を動作させるような yaml にしたりすることで、任意のサービスを動作させます。
サービスディスカバリとログ出力を見てみます。
フロントエンドではバックエンドの IP を記載せず、tye.yaml 記載の ”backend” サービスを指定します。
ログはダッシュボードで各サービス毎に見ることが可能です。上記のログも URL が動的に生成されます。
まとめ
Project Tye は .NET Conf 等のイベントで紹介されていますが、実験的プロジェクトであり正式に開発されているものではありません。しかし、開発~Kubernetes 初期デプロイ時の yaml 記述などの簡略化やコンテナー開発への入り口として役立つものと思います。
※Kubernetes への本番デプロイは GitHub Actions や Azure Pipeline 等の CI/CD を使用します。
マイクロサービスの開発は複雑ですがこれを機に .NET での開発がさらに容易になればと思います。
参考URL:
https://devblogs.microsoft.com/aspnet/introducing-project-tye/
https://github.com/dotnet/tye
https://www.youtube.com/watch?v=kX0eX5tDGgc
https://www.youtube.com/watch?v=prbYvVVAcRs
https://www.youtube.com/watch?t=17224&v=J9oJTKwASjA