[レポート] 用途に合わせたデータベースを使って.NETアプリケーションをモダナイズする #XNT304 #reinvent

2021.12.05

いわさです。

AWS re:Invent 2021で行われた、「Modernizing .NET applications with purpose-built databases」のセッションレポートです。

この記事では、要点・見どころ・ポイントについてまとめてみました。

セッション概要

DESCRIPTION

Do you want to get the most out of your existing .NET applications in terms of database performance, scalability, and value but don’t want to make wholesale changes to your application? Do you want to understand how moving to a key-value or search database can impact your code? AWS has 15 purpose-built databases that .NET developers can use to help supplement or completely replace traditional relational databases. In this session, learn how to take an existing .NET application and move a segment of the relational database to a purpose-built database.

SPEAKERS

  • Chad Tindel
  • Thorr Giddings

SESSION LEVEL

  • 300 - Advanced

レポート

アジェンダ

AWSでは様々な種類のデータベースが提供されています。
このセッションでは、アプリケーションをモダナイズするためにモノリスなリレーショナルデータベースから、最小の変更で一部の機能を専用のデータベースへ移行する方法を学ぶことが出来ます。

このセッションには以下2つのデモが含まれています

  • SQL Serverに接続するEコマース.NETアプリケーションのカート機能をDnyamoDBへ移行する方法
  • .NETアプリケーションへOpenSearchを使った検索機能を追加する方法

Amazon Aurora

  • リレーショナルデータベース
  • 標準のMySQLの最大5倍、標準PostgreSQLの最大3倍高速
  • ハードウェアプロビジョニング、データベースセットアップ、パッチ適用、バックアップなどの管理タスクを自動化
  • クラスターあたり最大128TBまで自動スケーリング
  • 分散型のフォールトトレラントな自己修復ストレージシステムを備えている
  • 継続的なバックアップ、3つのAZにわたるレプリケーションによりハイパフォーマンスと可用性を実現

Amazon DynamoDB(デモあり)

  • あらゆる規模で1桁のミリ秒のパフォーマンスを提供するドキュメント/キーバリューデータベース
  • マルチリージョン、マルチアクティブ、耐久性、セキュリティ
  • 1日あたり10兆を超えるリクエストを処理でき、1秒あたり2,000万を超えるリクエストピークを処理可能
  • サーバーレスアーキテクチャをサポートしているため、ハードウェアプロビジョニングソフトウェアのパッチやアップグレードを処理する必要がない
  • 常に最新バージョンを使用しています

このデモでは、.NETアプリケーションが接続するSQL Serverに高トランザクションテーブルがあり、その単一テーブルをDynamoDBに移動してコストを削減し、スケーラビリティとパフォーマンスを向上させています。
ただし、他のアプリケーションやBIツールを変更したくないのでDynamoDB->SQL Serverへ非同期更新をDynamoDB StreamsとLambdaを使って行っています。

.NETアプリケーションからDynamoDBへ移行する方法はとても簡単で、まずはAWSSDK.DynamoDBv2のDynamoDBアノテーションを使ってプロパティとデータモデルをマッピングします。
あとは、DynamoDB用のDBコンテキストを使用するだけです。
もし、既にEntityFrameworkを使って実装されているとすると、少しの修正でDynamoDBへ移行することが出来ます。

.NET ドキュメントモデル - Amazon DynamoDB

Amazon DocumentDB

  • 高速でスケーラブルな高可用性で完全に管理されたドキュメントデータベース
  • MongoDB3.6および4.0API互換。高性能。

.NETで利用する場合、クライアント側でDocumentDB用の特別なSDKは不要です。
NuGetのMongoDBドライバーがそのまま使えます。

MongoDB C#/.NET Driver — MongoDB Drivers

Amazon Neptune

  • 高速で信頼性の高いフルマネージドグラフデータベース
  • Amazon Neptuneのコアは、数十億の関係を保存し、ミリ秒のレイテンシでグラフをクエリするために最適化された、専用の高性能グラフデータベースエンジン
  • ユースケース
    • 友人の友人を分析したいソーシャルネットワークでのクエリ
    • 製品の注文を分析したレコメンデーションエンジン
    • 詐欺の検出、ネットワークセキュリティ

.NETでは、Gremlin.NETを使うことが可能です。

.NET を使用して Neptune DB インスタンスに接続する - Amazon Neptune

Amazon Timestream

  • IoTおよび運用アプリケーション向けの高速でスケーラブルなフルマネージド時系列データベースサービス
  • リレーショナルデータベースの1/10のコストで、1日あたり数兆のイベントを簡単に保存および分析

.NETアプリケーションでアクセスする際は、AWS SDK for.NETを使ってアクセスします。

.NET - Amazon Timestream

Amazon Quantum Ledger Database(Amazon QLDB)

  • すべてのアプリケーションデータの変更の完全な検証可能な履歴を提供
  • 不変性を提供

相互にコンセンサスを達成するためにノードのネットワークを必要とする従来のブロックチェーンフレームワークとは異なり、QLDBは​​はるかに低い遅延と高いスループットで実行されます。

.NETアプリケーションで利用する場合は、.NET用に提供されているQLDBドライバーを使います。

Amazon QLDB driver for .NET - Amazon Quantum Ledger Database (Amazon QLDB)

Amazon Keyspaces(for Apache Cassandra)

  • スケーラブルで可用性が高い
  • フルマネージドでApache Cassandra互換

.NETアプリケーションの場合、.NET Cassandraドライバーを使用して接続することが出来ます。

Cassandra .NET Core クライアントドライバを使用して Amazon Keyspaces にプログラムからアクセスする - Amazon Keyspaces (for Apache Cassandra)

Amazon ElastiCache

  • フルマネージドのRedisとMemcachedを提供

.NET向けには ElastiCache Cluster Client for .NETが提供されています。

ElastiCache Cluster Client for .NET のインストール - Amazon ElastiCache

Amazon MemoryDB for Redis

  • オープンソースのRedisと完全に互換性があります。

.NETアプリで利用する場合、従来のRedisドライバーを使用出来ます

Redis with .NET | Redis Documentation Center

Amazon OpenSearch(デモあり)

  • リアルタイムのアプリケーションモニタリング、ログ分析、ウェブサイト検索などの幅広いユースケースに使用される分散型オープンソース分析スイート

ElasticsearchやApache Solrと同様に、OpenSearchはApache Lucene検索ライブラリを利用しています。 よって、.NETアプリから利用する際は特別なAWSドライバーは必要ありません。

通常検索機能はSQLで実装しようとするとかなり複雑な実装が必要になります。
このデモでは.NETアプリケーションにOpenSearchによる検索機能を以下に簡単に実装出来るかを紹介しています。

デモで利用しているライブラリはNESTという、.NET向けのElasticsearchクライアントです。

NEST - High level client | Elasticsearch .NET Clients [7.16] | Elastic

デモ内では、NuGetからNESTElasticsearch.NETを追加しています。

まとめ

既存のアプリケーションをAWSのデータストアサービスへ対応させる場合、多くのライブラリが提供されており想定していたよりもコードの修正量が低いことがよくわかるセッションだと思います。
EコマースのカートをDynamoDBへ移行するデモのように、パフォーマンスやコストの最適化として複数のデータベースを組み合わせた構成は検討していきたいと思いました。

.NET開発者の方は、re:Inventの.NETセッションは是非ご視聴ください。
Visual Studio拡張およびコード寄りのアプローチが多く盛り込まれているのでだいぶおもしろいです。