Red Hatのソリューションアーキテクトの井上たかひろです。
「Module3:サービスメッシュによるアプリの制御とセキュリティ」に続いて「Dev Module4:イベント駆動型サーバーレス編」についてざっくり紹介いたします。
Cloud Native アプリケーションの作成し、Kafkaクラスターを作成し、イベントドリブンサービスに改修し、さらにはサーバレス化します。最後はTekton を使った CI/CD Pipelines の作成を実践します。
使うソフトウェア:Red Hat AMQ Streams(Apache Kafka ),Red Hat Runtimes(Quarkus, Spring BootNode.js), Red Hat Data Grid, Knative, Tektonなど
Module3:イベント駆動型サーバーレス編
ハンズオンで実施する項目
- Cloud Native アプリケーションの作成
- イベントドリブンサービスの作成(Kafkaクラスターの作成)
- サーバレスの作成
- Tekton を使った CI/CD Pipelines の作成
Cloud Native アプリケーションの作成
5 つのマイクロサービスを OpenShift上で開発します。
これらの アプリケーションは PostgreSQL や MongoDB 等の複数のデータソースとのトランザクションを持ちます。
特に、 Quarkus Extensions を使ってデータソースを簡単に設定する方法を学びます。
最終的には、エンドユーザー(顧客)の満足度を高めるために、 Cache(Data Grid)サーバー と統合することで、
ショッピングカートサービスの データトランザクションパフォーマンス を最適化します。
作ろうとしているアプリのアーキテクチャは以下になります。
ガイドを見ながら、やっていきます。
利用したことないプログラミング言語やフレームワークでも、ガイドに詳細に手順があるので、大丈夫です。
3つのアプリケーションができた状態です。赤枠の部分は、QuarkusとCache(Data Grid)のアプリの部分になります。
5つのアプリケーションができた状態です。
次では、一部をAMQ Streams(Apache Kafka ベース)を使って、イベントドリブンな処理を追加していきます。
イベントドリブンサービスの作成(Kafkaクラスターの作成)
ここでは、ショッピングカートと注文の実装を変更し、イベントドリブン/リアクティブアプリケーションとして決済サービスを追加します。
これらの アプリケーションでは、メッセージング/ストリーミングのバックボーンとして、AMQ Streams(Apache Kafka ベース)を使用します。
AMQ Streams は、OpenShift 上で Apache Kafka を簡単に構築できます
Kafka クラスターを作成します。
カタログからKafka クラスターを選びます。
Kafka クラスタを定義するYAMLエディタが表示されます。デフォルトのままCreateボタンを押すと、クラスターが作成できます。
次に、Kafka Topicを作成します。
カタログからKafka Topicを選びます。
KafkaTopicを定義する YAML エディタに入ります。
Topic名を orders に変更し、下部にあるCreateボタンを押すと、Topicが作成できます。
出来上がるとこのようになります。KafkaTopicはもう1つ追加しています。
簡単にKafkaが構築できてしまいます。
あとはガイドを見ながら、アプリケーションの修正や追加をやっていきます。
サーバレスの作成
ここでは、さきほど作成した決済サービスをサーバレスにします。
まずは、さきほど作成した決済サービスをネイティブ実行ファイルにして、高速起動、低メモリ消費にします。
これは GraalVM を使って実現しています。先行コンパイル、積極的なデッドコードの排除、起動ロジックの多くをビルド時に移動させるネイティブバイナリとしての最適なパッケージ化などにより、起動時間と必要なメモリリソースを大幅に削減します。
起動してみると、0.012secで12ミリ秒で起動していることがわかります。
__ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] (main) getting-started 1.0-SNAPSHOT native (powered by Quarkus xx.xx.xx) started in 0.012s. <xxx> INFO [io.quarkus] (main) Profile prod activated. INFO [io.quarkus] (main) Installed features: [cdi, resteasy]
ガイドを見ながら、Kafkaのメッセージからネイティブ実行ファイルにしたアプリをサーバレスで起動する設定をやっていきます。
以下が完成した状態です。
Kafkaのメッセージを入れると、サーバレスでアプリが実行されます。また、 一定期間経過するとPodが停止します。
Tekton を使った CI/CD Pipelines の作成
サーバレスをやって結構満足になるのですが、まだ終わっていません。
最後に、 CI/CD Pipelines の作成をやります。
OpenShift Pipelines は、Cloud Native なCI/CDソリューションで、Tekton をベースにしたスタンダードな CI/CD パイプラインの定義ができ、
複数のプラットフォーム(Kubernetes、サーバーレス、VM など)におけるデプロイの自動化を可能にします。
ガイドを見ながら、パイプランを作っていきます。
実際にパイプランを実行した様子は以下になります。
手順の類はだいぶ端折っているので、短く感じるかもしれませんが、実際にハンズオンを行うとかなりのボリュームです。このモジュールが一番ボリュームがあります
ガイドに従って進めればAMQ Strems(Apache Kafka)の構築、Java(Quarkus)からのネイテイブアプリケーションの作成、Knativeでのサーバレースアプリ、Tekton を使った CI/CD Pipelinesの作成の流れが体験できます。
ワークショップにご興味があればご連絡ください。