PL/SQL マイクロサービス - シンプル、コンサイス、ファスト (2021/09/28)
PL/SQL マイクロサービス - シンプル、コンサイス、ファスト (2021/09/28)
https://blogs.oracle.com/developers/post/plsql-microservice---simple-concise-fast
投稿者:Richard Exley
Paul Parkinson氏のブログDeveloping Microservices in Java, JavaScript, Python, .NET, and Go with the Oracle Converged Databaseでは、ワークショップSimplifying Microservices with the converged Oracle Databaseで紹介しているGrabdishアプリケーションのために、5つの異なる言語でインベントリ・マイクロサービスを作成したことを紹介しています。ワークショップ「Simplifying Microservices with converged Oracle Database」で紹介したGrabdishアプリケーションのために、Java、JavaScript (NodeJS)、Python、.NET、Goの5つの言語でインベントリ・マイクロサービスを作成したことをPaul Parkinson氏が説明しています。 このブログでは、同じマイクロサービスをPL/SQL言語を使って作成する方法を紹介します。
PL/SQLは、Oracle Databaseサーバで手続き型ロジックを実行するためのプログラミング言語です。 データベースサーバーで実行することで、データベースデータにほぼ瞬時にアクセスできるようになり、パフォーマンスの向上と競合の減少につながります。 PL/SQL は、データの問い合わせや操作のための宣言型データベース言語である SQL と緊密に統合されており、明確で簡潔なコーディングが可能です。 また、サービスの開発に使用したJSON_OBJECTパッケージのように、強力で最新のパッケージも多数用意されています。
Grabdishのアーキテクチャ
Grabdishアプリケーションのアーキテクチャは以下の図のようになっています。 インベントリーマイクロサービスは、アプリケーションのコンポーネントの1つです。 マイクロサービスがJava、JavaScript(NodeJS)、Python、.Netで実装されていた頃は、Kubernetesクラスターで動作していました。
マイクロサービスがPL/SQLで実装されていたときは、データベースサーバーで動作していました。
インベントリマイクロサービスのアルゴリズム
インベントリマイクロサービスは、オーダーキュー上でメッセージを待ち、各メッセージに対して、以下の処理を行います。
- JSONオブジェクトとして表現されたペイロードを抽出
- インベントリを確認し、更新
- インベントリメッセージをJSONオブジェクトで構築
- インベントリキューにメッセージをデプロイ
- コミット
PL/SQLの実装
コードは非常に簡単に書くことができ、ロジックを明確かつ簡潔に表現することができました。 コードのロジックの内訳は以下の通りです。
このサービスは、DBMS_SCHEDULER PL/SQLパッケージを使用してデータベースサーバーに直接デプロイされました。 これにより、データベースが稼働しているときには常にコードが実行され、万が一の場合にはData Guardのスタンバイにフェイルオーバーされます。
コードをコンパイルしたりビルドしたりする必要はなく、必要なパッケージはすべてデータベースにインストールされており、利用可能です。
パフォーマンス
テストでは、PL/SQL実装は他のどの実装よりも少なくとも3倍の速さで注文メッセージを処理しました。 これは、データベースサーバー内で実行されているため、他の実装が別のKubernetesサーバーで実行されている場合に必要となる、処理の各段階でのネットワーク通信が不要になったためです。
まとめ
コードは簡単に書くことができ、ロジックを明確かつ簡潔に表現することができました。 PL/SQLは最速の実装であり、他の実装に比べて少なくとも3倍の速度が出ていることがわかりました。 データベースへの展開も簡単でした。 サービスは自動的にデータベースとともに起動し、データベースが稼働しているところならどこでも実行されます。 コードをビルドする必要はなく、必要なパッケージはすべてインストールされており、利用可能でした。
参考文献
コメント
コメントを投稿