wakuwaku

ロードマップ

wakuwaku の現状、1.0.0 と 2.0.0 の意味、そして Spring のどのモジュールにすでに対応するものがあるか。

wakuwaku は、Java における Spring のような、強力で堅牢な Rust 向けマイクロサービスフレームワークを目指しています。バージョン番号は、その目標にどこまで近づいたかを表します。

マイルストーン

1.0.0-rc1

最初のリリース候補です。サービスビルダー、gRPC の登録、cron ジョブ、Apache Iggy 上の型付きイベント、PostgreSQL・MySQL・Redis・Meilisearch へのケイパビリティで型付けされたデータアクセス、証明を伴うバリデーションを含んでいました。

1.0.0-rc2

2 番目のリリース候補は、rc1 の内容をすべて引き継ぎ、次の点を改良しました。

  • データアクセス: すべてのクエリが自分のエラー型を宣言します。そのため、自ら拒否しうるクエリ (楽観ロックの喪失、ビジネスルール違反) はそれをエラーで伝えます。トランザクションは、開いたトランザクションの中でステップがクエリを実行するフローです。BEGIN・COMMIT・ROLLBACK と、トランザクションが中断されたときや COMMIT の結果が失われたときの意味は、ライブラリが受け持ちます。
  • サービス: 複数の依存から作るコンポーネントは、クロージャで登録します (compose_cron_job、compose_grpc_service、compose_iggy_consumer)。cron ジョブはスケジュールのモードを選べます。前回の実行が終わってから、少なくとも間隔を空けて、または固定のグリッドで、のいずれかです。
  • シャットダウン: cron ジョブとイベントコンシューマーは shutdown でグレースフルに後片付けし、abort でキャンセルできます。
  • イベント: 同じ型の多数のイベントをバッチで発行できます。
  • バリデーション: 定数として宣言できる純粋な検証器が、コンテキストや I/O を必要としない性質を証明します。

1.0.0-rc3 (現在)

現在のリリース候補は、本番のサービスを rc2 へ移植する中で見つかった点を修正しています。

  • データアクセス: トランザクションフローは、読み書きするエンティティを tx_effect! で宣言し、フローが実行するクエリはすべてその宣言の範囲に収まらなければなりません。フロー自身もハンドルもカバーしていないエンティティに、フローが触れることはもうできません。
  • バリデーション: ValidateError は標準のエラー型になり、? で伝播できます。Proven の値は Debug で表示でき、純粋な検証器は String を &str として検査できます。
  • ドキュメント: トランザクションの実行方法と状態の設計、コンシューマーのパーティションの割り当て方を説明しました。

下の表で「提供中」となっているものは、すべてこのリリースに含まれています。

1.0.0

1.0.0 は、実際のプロジェクトでの E2E テストに合格した時点でリリースされます。それまでは、テストで必要と分かった箇所についてリリース候補が変更される可能性があります。

2.0.0

2.0.0 は、Spring の意味のあるモジュールすべてに wakuwaku の対応物がそろう時点のマイルストーンです。下の表で「未対応」となっている行が、現在と 2.0.0 との差です。

これらのマイルストーンに日付は設定していません。

Spring のモジュールと対応物

「提供中」は、1.0.0-rc3 に対応物があることを意味します。Spring の API をそのまま写しているという意味ではありません。対応物はできるだけ多くをコンパイラが検査できるように設計されているため、動作が異なることもよくあります。違いは Spring から来た方へ で説明しています。

Springwakuwaku状況
Spring Framework のコア: IoC コンテナ、依存性注入ServiceBuilder、ServiceCreation提供中
Spring Boot のスターターフィーチャーフラグ 付きの wakuwaku 依存ひとつ提供中
Spring Boot の自動構成、@ConfigurationProperties、プロファイルなし未対応
タスクスケジューリング (@Scheduled(fixedDelay/fixedRate = ...))cron ジョブ (間隔のモードあり、cron 式なし)提供中
gRPC (Spring gRPC、grpc-spring-boot-starter)gRPC サービス提供中
Spring for Apache Kafka、Spring Cloud Stream、Spring AMQPApache Iggy 上のイベント提供中
Spring Data JDBC / JPA のリポジトリクエリ と sqlx (SQL を明示、ORM なし)提供中
Spring のトランザクション管理トランザクション提供中
Spring Data RedisRedis提供中
Spring のキャッシュ抽象化 (Redis)Redis のキャッシュ (明示的な呼び出し、アノテーションなし)提供中
分散ロック (ShedLock、Spring Integration の RedisLockRegistry)Redis のロック提供中
レート制限 (Spring Cloud Gateway の RedisRateLimiter)Redis のトークンバケット提供中
Spring Data Elasticsearch (全文検索)Meilisearch提供中
Bean Validation (@Valid、Hibernate Validator)バリデーション提供中
Spring Boot Testテスト: コンポーネントを直接ユニットテストする提供中
Spring Web MVC / WebFlux (HTTP、REST)なし未対応
Spring Securityなし未対応
Spring Boot Actuator (ヘルスチェック、メトリクス)なし未対応
Micrometer のメトリクスとトレーシングなし (wakuwaku はエラーを tracing でログ出力します)未対応
Spring Cloud Config、サービスディスカバリー、ゲートウェイ、サーキットブレーカーなし未対応
Spring Batchなし未対応
Spring Integrationなし未対応

「未対応」の行は、現時点で wakuwaku に該当するものがないことを意味します。対応物ができるまでは、その用途には wakuwaku と並べて Rust のクレートを使ってください。ServiceCreation で組み立てるコンポーネントは、他のクレートのクライアントを含め、登録した任意の値に依存できます。

0.3 からの変更

0.3 は RabbitMQ・Redis・sqlx まわりのユーティリティ集でした。1.0.0-rc3 はそのほとんどを置き換えています。0.3 からの移行 を参照してください。

目次