R 2 DBCとServerlessデータベースを用いた完全に反応可能でスケーラブルな春のアプリケーションの構築
リレーショナルデータベースによる真の反応性マイクロサービスの構築への挑戦
2011年に、ReactiveアプリケーションがJavaでより一般的になり始めたとき、私はJDBCでSQLデータベースにアクセスして、彼らについてしばしば冗談を言いました.もちろん、当時のSQLデータベースは古いものであり、スキーマの少ないNOSQLソリューションは次の5年間で標準となると考えられていました.春は死んだSQLデータベースは次で死ぬ!
歴史の奇妙なねじれにおいて、我々はまだ世界を支配している春とSQLデータベースを持っています.しかし、現在、彼らは反応的で、雲のネイティブで無力な建築で美しく働きます!
このブログの投稿では、次のようなアプリケーションを構築していきます.
R2DBCは、我々のアプリケーションが完全にデータベースから残りの終点
我々がここで使用する多くのテクノロジーがR 2 DBCを含んでいると警告して、非常に新しくて、まだ準備ができていません.我々は、作業アプリケーションを構築しており、我々はこのポストは、これらの技術の普及と安定化を支援するが、独自のリスクでそれらを使用することを期待!
サンプルアプリケーション
ここでは、単純なSpring Webflux MicroServiceを開発しています.これはSQLデータベースとの話です.最終的なコードはhttps://github.com/jdubois/spring-reactive-sql-serverでgithubで利用可能です.
サーバレスSQLサーバ
すべてのデータベースにR 2 DBCを持つ無効なドライバがあるわけではないので、ここでSQL Serverを選択しました.もう一つの理由は、“Serverless”オプションを持っていることです.事実上、SQL Serverのスケーラビリティオプションは印象的です.
the Azure portal
我々は最も安いオプションを選択しました:我々のデータベースは、我々につき0.15ユーロをプラスしました.そして、1秒につき0.000067ユーロ(1時間のために、それはおよそ0、24ユーロである)をプラスしました.これは実際にはdevやテスト環境に適しています.
データベーススキーマを作成するには、単純なスクリプト :
CREATE TABLE person (
id BIGINT NOT NULL IDENTITY PRIMARY KEY,
first_name VARCHAR(100),
last_name VARCHAR(100),
company VARCHAR(100)
)
データベースにこのスクリプトを実行する多くのオプションがありますが、最も簡単なものはavailable hereを通して利用できるオンラインエディタを使用することです.the Azure portal
R 2 DBCの使用と設定
は、Javaのための反応的なドライバーのための仕様です.具体的には、マイクロソフトSQL Serverの実装であるR2DBCを使用します.
私たちには、それを使用している多くの問題がありました、例えばRD2BC SQL Server、そして、そこで、我々はここでスナップショット・リリースを使用しています.
<dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-mssql</artifactId>
<version>0.8.0.BUILD-20190819.142517-35</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-r2dbc</artifactId>
<version>1.0.0.gh-151-SNAPSHOT</version>
</dependency>
これらの問題は、現在春チームによって対処されています、そして、安定したリリースが利用できるならば、我々はサンプルプロジェクトを更新します.この迷惑なSSLのバグ R 2 DBCのためのSpring構成
自動的にR 2 DBCを春のブートで設定するために があります.また、ここではR 2 DBCを手動で設定することもできます.
@Bean
public MssqlConnectionFactory connectionFactory() {
log.info("Connecting to database '{}'...", host);
return new MssqlConnectionFactory(MssqlConnectionConfiguration.builder()
.host(host)
.port(1433)
.database(database)
.username(username)
.password(password)
.build());
}
スプリングブーツスターター ばねデータとR 2 DBCによるデータアクセスコード
良いニュースは、R 2 DBCで部分的に春のデータが動作するということです.SQLクエリの生成のような機能はすべてありませんが、ほとんどのフレームワークは機能しています.
@Repository
public interface PersonRepository extends ReactiveCrudRepository<Person, Long> {
}
したがって、このリポジトリは、通常のスプリングJDBCまたはスプリングJPAリポジトリとして、残りのエンドポイントで使用できます.@RestController
public class PersonController {
private final PersonRepository personRepository;
public PersonController(PersonRepository personRepository) {
this.personRepository = personRepository;
}
@GetMapping("/persons")
public Flux<Person> list() {
return personRepository.findAll();
}
}
結論と最終思想
ここで開発したサンプルプロジェクトは にあります.将来的には、そのプロジェクトはR 2 DBCの安定版を使用するべきである.
良いニュースは、いくつかの非常に最先端の機能を使用しても、我々のコードはまだ通常の春のブートアプリケーションのように見える:ほとんどの設定と使用されるAPIは春のユーザーに慣れている必要があります、これは通常のスプリングブートアプリケーションのように実行されます.
このセットアップのキラー機能は、SQL Serverの“Serverless”のバージョンのおかげで、R 2 DBCとSpring Webfluxのおかげで、我々は非常にスケーラブルなアプリケーションを使用することができますが、コストに応じて異なります.アプリケーション側では、Spring Webfluxを使用すると、我々のアプリケーションは非常に迅速に(MacBook Pro上で1秒以上)を開始し、そのメモリ使用量が制限されていることを意味します.我々の最後の結果は、このように非常にスケーラブルで効率的です!
Reference
この問題について(R 2 DBCとServerlessデータベースを用いた完全に反応可能でスケーラブルな春のアプリケーションの構築), 我々は、より多くの情報をここで見つけました https://dev.to/azure/building-a-fully-reactive-and-scalable-spring-application-with-r2dbc-and-a-serverless-database-1jkeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol