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で実装されていたときは、データベースサーバーで動作していました。




インベントリマイクロサービスのアルゴリズム


インベントリマイクロサービスは、オーダーキュー上でメッセージを待ち、各メッセージに対して、以下の処理を行います。


  1.     JSONオブジェクトとして表現されたペイロードを抽出
  2.     インベントリを確認し、更新
  3.     インベントリメッセージをJSONオブジェクトで構築
  4.     インベントリキューにメッセージをデプロイ
  5.     コミット


PL/SQLの実装


コードは非常に簡単に書くことができ、ロジックを明確かつ簡潔に表現することができました。 コードのロジックの内訳は以下の通りです。




このサービスは、DBMS_SCHEDULER PL/SQLパッケージを使用してデータベースサーバーに直接デプロイされました。 これにより、データベースが稼働しているときには常にコードが実行され、万が一の場合にはData Guardのスタンバイにフェイルオーバーされます。 


コードをコンパイルしたりビルドしたりする必要はなく、必要なパッケージはすべてデータベースにインストールされており、利用可能です。 


パフォーマンス


テストでは、PL/SQL実装は他のどの実装よりも少なくとも3倍の速さで注文メッセージを処理しました。 これは、データベースサーバー内で実行されているため、他の実装が別のKubernetesサーバーで実行されている場合に必要となる、処理の各段階でのネットワーク通信が不要になったためです。


まとめ


コードは簡単に書くことができ、ロジックを明確かつ簡潔に表現することができました。 PL/SQLは最速の実装であり、他の実装に比べて少なくとも3倍の速度が出ていることがわかりました。 データベースへの展開も簡単でした。 サービスは自動的にデータベースとともに起動し、データベースが稼働しているところならどこでも実行されます。 コードをビルドする必要はなく、必要なパッケージはすべてインストールされており、利用可能でした。 



参考文献

Inventory Microservice in PL/SQL PL/SQL
Inventory Microservice in Other Languages Java, Python, NodeJS, Go, .NET

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle GoldenGate 23aiでMicrosoft Fabricでのオープン・ミラーリングがサポートされるようになりました (2024/11/19)

OCIサービスを利用したWebサイトの作成 その4~Identity Cloud Serviceでサイトの一部を保護 (2021/12/30)