2023/03/08 に行われた OCHaCafe Premium #6 の資料です。
OCI Cloud Native 2023Oracle Cloud Hangout Café – Premium #6Shuhei Kawamura/Takuya Niita/Kyotaro Nonaka/Yutaka IchikawaOracle Corporation JapanMarch 8, 2023
View Slide
Copyright © 2023, Oracle and/or its affiliates2Agenda1. OCW Feedback and more – by 川村2. Container Instances & Virtual Nodes – by 仁井田3. OCI Queue – by 野中4. OCI DevOps – by 市川
OCW Feedback and moreShuhei KawamuraCloud Solution EngineerSolutions Architect, Oracle Corporation JapanMarch 8, 2023
Copyright © 2023, Oracle and/or its affiliates4• 所属• 日本オラクル株式会社• ソリューション・アーキテクト本部• 担当領域• Cloud Native, App Dev• Data Platform(Spark 周り)• AI Services• Search Service with OpenSearch• (趣味) 認証・認可関連• コミュニティ• OCHaCafe• CloudNative Days – Observability川村 修平 (Shuhei Kawamura)@shukawamTwitter/GitHub/Qiita参加登録お待ちしています…!
Copyright © 2023, Oracle and/or its affiliates5OCHaCafe Premium #3 (2021/03) から“かなり”進化しました
Copyright © 2023, Oracle and/or its affiliates6OCI Cloud Native Landscape (2023/03 現在)OCI Core InfrastructureOCI Cloud Native Landscape開発・運用管理ツールアプリケーション実行基盤 API 管理Oracle FunctionsAPI Gatewayサービス間連携 オブザーバビリティOCI DevOps OCI Registry Resource Manager OCI Service Mesh OCI Workflow*Container Enginefor Kubernetes(Managed/Virtual Nodes*)メッセージングQueue StreamingServiceConnector HubNotificationsApplicationPerformanceMonitoringLoggingMonitoringEventsWebLogic Serverfor OCI/OKEMicroTx開発フレームワークHelidonMP/SEMicronautCompute Database Network StorageContainer Instancesxxx: OCHaCafe Premium #3 から新たに追加された(予定含む)サービス *: Coming Soon!
Copyright © 2023, Oracle and/or its affiliates7OCI Data Platform Landscape (2023/03 現在)OCI Core InfrastructureOCI Data Platform Servicesメタデータ管理収集 蓄積/管理 提供 可視化/分析/データサイエンスData CatalogDataIntegrationGoldenGateGoldenGateStreamAnalyticsStreaming Object Storage ADW/ATP ExadataDatabaseMySQLHeatwaveBig Data Data FlowADW/ATP ExadataDatabaseMySQLHeatwaveBig Data Data FlowAnalytics ArtificialIntelligenceData ScienceQuery*CloudSQLOracleMachine Learning/ AutoMLCompute Database Network Storagexxx: OCHaCafe Premium #3 から新たに追加された(予定含む)サービス *: Coming Soon!
Copyright © 2023, Oracle and/or its affiliates8OCW Feedback – Application Development注目度の高い内容を厳選してご紹介…!
Copyright © 2023, Oracle and/or its affiliates9■ ユースケース• OCI の各サービスとのオーケストレーションとそれに伴うタスク処理の自動化例:インフラストラクチャのプロビジョニング、移行、およびパッチ適用の自動化、機械学習モデルのトレーニングタスク処理の自動化など■ 特徴• OCI サービスとのオーケストレーション• スケジュールおよびイベントドリブンにワークフローをトリガー• ビジュアルデザインによるワークフローの作成と監視• 組み込み済みのフロー制御• 組み込み済みのリトライ・ロジックと拡張可能なエラー処理• コンテキストとデータの管理• ワークフローのバージョン管理■ 価格2023 年 3 月時点では、Limited Availability(制限付き利用)プログラムを通じて利用可能となる予定OCI Workflow開発者およびアーキテクト向けのグラフィカルなフロー・デザイナーを備えたサーバーレス・ワークフローエンジンhttps://www.oracle.com/cloud/cloud-native/workflow/OCI Workflow Visual ExampleVirtualMachineContainer EngineFor KubernetesObject StorageVirtualCloudNetworkLoadBalancerDatabaseData ScienceOracleMachineLearningIAMWorkflowFunctions
Copyright © 2023, Oracle and/or its affiliates10参考:OCI Workflow のデモ動画https://www.youtube.com/watch?v=WlAyEezfQ4sOCI Workflow と AI Vision(Document Understanding) + αを組み合わせて、提出された免許書や入力情報をもとに信頼度チェックをワークフローとして行うサンプル
Copyright © 2023, Oracle and/or its affiliates11• JDK 8 と JDK 17 の リリースの間の 7 年間に Java にもたらされた大幅なメモリ管理とパフォーマンスの改善を JDK 8 のワークロードにも享受できるようになる• e.g. ZGC ガベージ コレクタ (JDK 11 から搭載された低遅延ガベージコレクタ)• JDK 8 で実行するアプリケーションにコード変更無しで適用可能• JDK 8 で稼働し続ける必要のある ワークロードにパフォーマンス向上の手段を提供• 対象• Java SE サブスクリプションをお持ちのお客様• Oracle Java on OCI を実行しているお客様• My Oracle Supportから入手Java SE Subscription Enterprise Performance PackJDK 17 のパフォーマンスを JDK 8 サーバーのワークロードにレスポンス タイム メモリー フットプリント GC ポーズタイムOracle によるテスト結果
Copyright © 2023, Oracle and/or its affiliates12• GraalVM EE は Java SE Subscription に含まれる• Oracle Cloud Infrastructure (OCI) の利用者は GraalVM EE を OCI 上で無償利用可能(ライセンスとサポート)GraalVM Community Edition を OpenJDK に寄贈https://www.graalvm.org/2022/openjdk-announcement/GraalVM 22.3 Community Edition (CE) Enterprise Edition (EE)ライセンス GNU General Public License V2with the “Classpath” Exception商用ライセンス--------------------------Oracle Technology Network (OTN) ライセンス(開発/テスト)ベースJDKs OpenJDK 11.0.17, 17.0.5, 19.0.1 Oracle JDK 8u351, 11.0.17, 17.0.5, 19.0.1サポート コミュニティ・サポート Oracleによる商用サポートRenaissance Suite (JVMベンチマーク) で計測した対 OpenJDK スピードアップ 1.04x 1.3xDocker コンテナ・イメージ ✔ ✔特許取得の高度なコンパイラ最適化 ✔ネイティブ・イメージの最適化- 圧縮されたポインタによる低メモリ使用- プロファイルガイド最適化による性能向上- G1ガベージ・コレクションによる低遅延✔Java One 2022 でCE を OpenJDK に寄贈することを発表
Copyright © 2023, Oracle and/or its affiliates13参考:GraalVM 最新事情https://speakerdeck.com/oracle4engineer/graalvm-whats-new
Copyright © 2023, Oracle and/or its affiliates14OCW Feedback – Data + AI Platform注目度の高い内容を厳選してご紹介…!
Copyright © 2023, Oracle and/or its affiliates15オブジェクトストレージ上のファイルデータへのクエリ機能• RDB では不可能な大規模データの分析を可能に• DB 内のデータとオブジェクトストレージのデータ結合や ETL 処理など、データの移動を伴わない柔軟なデータ分析が可能• CSV、Parquet、Aurora および Redshift のバックアップ形式に対応• 400TB のデータを対象にした TPC-H ベンチマークで、競合他社よりも高速な処理結果(ロードとクエリ)機械学習による自動化機能のエンハンス• 機械学習ベースの自動化機能「MySQL Autopilot」をエンハンス• 従来の自動プロビジョニング、自動クエリ実行計画改善機能の強化に加え、スキーマの自動推論、アダプティブ・サンプリング、自動ロード、アダプティブ・データフローなどの新機能を実装MySQL HeatWave Lakehouseオラクル、400TBのワークロードにおいてSnowflakeの17倍、Redshiftの6倍高速なクエリ性能を提供する「MySQL HeatWave Lakehouse」を発表
Copyright © 2023, Oracle and/or its affiliates16Oracle と NVIDIA のパートナーシップの締結を発表:• NVIDIA のアクセラレーテッド・コンピューティング・スタックを全てOCI に導入• ベアメタル、ネットワーク、ストレージと組み合わせることで大規模な AI トレーニングとディープラーニング推論のための選択肢を幅広く、簡単に利用可能に!OCI サービス関連情報:• NVIDIA AI Enterprise *の次期リリースを OCI で利用可能にする計画• OCI Data Flow にて、NVIDIA RAPIDS の早期利用の開始• OCI DataScience にて、NVIDIA A100 Tensor CoreGPUを備えた BM.GPU.GM4.8 のサポートを提供予定https://www.oracle.com/news/announcement/ocw-oracle-and-nvidia-partner-to-speed-ai-adoption-2022-10-18/NVIDIA PartnershipOracle と NVIDIA が企業向けの AI 採用を加速するために提携BM.GPU4.8Eight NVIDIA A100 40 GBBM.GPU.GM4.8Eight NVIDIA A100 80 GBGPUメモリー Eight GPUs, 40 GB each Eight GPUs, 80 GB eachGPUメモリー帯域幅 Eight 1.6TB/s Eight 2 TB/sCPU Two 32c AMD EPYC Rome Two 64c AMD EPYC Milanシステム・メモリー 2 TB DDR4Storage Eight 6.8 TB NVMe SSDsCluster NIC Eight 2 x 100 Gbps NICs価格 (per GPU/hour) $3.05 $4.00* NVIDIA AI Enterprise:NVIDIA が最適化し、認定し、サポートする AI およびデータ分析ソフトウェアからなるクラウドネイティブ エンドツーエンド スイート
Copyright © 2023, Oracle and/or its affiliates17• ETL、ML/DL 処理を高速化• プライス・パフォーマンスを最適化• コード変更の必要なし• 簡単な Data Flow アプリケーション設定だけで利用可能• エグゼキュータ/ドライバに適切な GPU シェイプを選択• Spark 構成オプションを追加するだけで OKOCI Data Flow – Spark アプリケーションを GPU で高速化NVIDIA RAPIDS Accelerator for Apache Spark を装備したサーバレス Spark 環境OCI Data FlowObject StorageStreamingData FlowAutonomousDataWarehousestreaming read/writeread/writeGPU InstancesRAPIDSPARIDS Accelerator for Apache SparkApache Spark 3.x ApplicationSpark SQL DataFrames ML/DL Frameworks
Copyright © 2023, Oracle and/or its affiliates18And more… (Application Development)2021 年(OCHaCafe Premium #3)からの注目アップデート情報※時間も限られているので、サーバレス関連(OCI Functions/API Gateway)に絞ってご紹介
Copyright © 2023, Oracle and/or its affiliates19• Function の実行前に決められた数(=PCUs*)の各種リソースの割り当てを事前に済ませておくことで初回実行時のレイテンシーを低減させるための機能• コールドスタート問題の対応策として有効• Provisioned Concurrency を適用した、未使用の Function リソースに対しては、25% のリソース利用料が発生プロビジョニングされた並行性(Provisioned Concurrency)のサポートOCI Functions各種リソースの割り当て 関数コードの実行一般的な Function 実行Provisioned Concurrency を利用した Function 実行関数実行前に一定数のリソース(PCUs*)を割り当てる*PCUs(Provisioned Concurrency Units): 事前に完了させておくリソース割り当て数関数コードの実行
Copyright © 2023, Oracle and/or its affiliates20OAuth 2.0 対応• JWT/非 JWT 形式のアクセストークンを認可サーバーの OAuth 2.0 イントロスペクション・エンドポイントを用いて検証可能な API Gateway を作成可能に• ※ 対応前は、JWT 形式のアクセストークンを JWKS or 静的キー + Payload の検証のみ対応OpenID Connect 1.0 対応• トークンが存在しない or 無効時のポリシーとして、OpenID Connect 1.0 の認可コードフローを用いた ID/アクセストークンの取得が可能に• ※ 対応前は、HTTP 401 – Unauthorized の返却のみをサポート• API Gateway が OpenID Connect – Relying Party の構成をとるユースケース• OAuth 2.0/OpenID Connect 1.0 を実装なし(設定レベル)で使用したい• レガシーな API サーバーの OAuth 2.0/OpenID Connect 1.0 対応を実施したいOAuth 2.0/OpenID Connect 1.0 のサポートAPI GatewayNEW!!NEW!!NEW!!JWT とか OAuth とか OIDC とかはこちらから…>> https://thinkit.co.jp/article/21142
Copyright © 2023, Oracle and/or its affiliates21実装が手間な API の認証を API Gateway にオフロードするデモ:OIDC を用いてセキュアに API を公開するUserOIDC - EnduserAPI GatewayOIDC-RPFunctionsFunctionsFunctionsCountryApplicationAutonomousTransactionProcessing ATPJWKSOpenID Connect 1.0 –AuthN Code Flowhttps:///ochacafe/countryIdentity DomainsOIDC - OPProvisioned Concurrency使ってます!
Copyright © 2023, Oracle and/or its affiliates22And more (Data + AI Platform)
Copyright © 2023, Oracle and/or its affiliates23OCI AI Services専門知識不要で AI 関連サービスを開発者が利用可能にAI ServicesDigital Assistant Language Speech VisionAnomary Detection Forecastingチャット・ボットの開発・運用に必要な機能を提供事前学習済みのモデルを用いた言語解析機能を提供音声や動画ファイルのトランスクリプション機能を提供事前学習済みのモデルを用いた画像分類、物体検出の機能を提供※Data Labelingを併用したカスタムモデルの作成も可能時系列データに基づいた異常検出モデルを提供時系列予測と予測結果のExplainabilityを提供comingsoonDocumentUnderstanding事前学習済みのモデルを用いたドキュメント分析機能を提供
Copyright © 2023, Oracle and/or its affiliates24• Data Science のノートブック・セッションを Data Flow へ接続し、対話形式で実行可能な Spark 環境をサポート• Jupyter notebook から Spark クラスタを対話的に操作するためのツール群である Sparkmagic が組み込み済み• 大規模なデータ処理を Data Science から Data Flow にオフロード可能OCI Data Science と OCI Data Flow の連携をサポートData Flow + Data ScienceUserData ScienceSparkmagicApacheLivyRemoteSparkContextExecutorExecutorData FlowData Flowコントロール・プレーンデータ・プレーン…DriverHTTPリモート(Data Flow)で計算処理を実行し、結果をDSへ返却する
Copyright © 2023, Oracle and/or its affiliates25• Spark 3.2.1 で Data Flow を実行する場合、デフォルトで Delta Lake がサポートされるように• Delta Lake• Lakehouse アーキテクチャを構築できるオープンソースのストレージフレームワーク• 既存の Data Lake(Object Storage, S3, HDFS, etc.)上で以下の機能を提供• ACID トランザクションのサポート• スケーラブルなメタデータの処理• スキーマのばらつきの自動処理(≒ 取り込み中に不正なレコードが挿入されることを防止できる)• タイムトラベル(≒ ロールバックや履歴の監査証跡をサポート)• merge/update/delete の操作をサポート(※素のSparkでは、”overwrite”, “append”のみがサポート)による複雑なユースケースの実現詳細: https://docs.oracle.com/ja-jp/iaas/data-flow/using/delta-lake-about.htmDelta Lake のサポートData Flow
OCI Container Services UpdateTakuya NiitaOracle Corporation JapanMar 8, 2023
Copyright © 2023, Oracle and/or its affiliates27自己紹介仁井田 拓也• 日本オラクル株式会社• ソリューション・アーキテクト本部• AppDev/Container/FaaS/(a little)ML…• 前職は某SIer• Oracle歴/Cloud Native歴:4年弱• ジブリ大好き• OCHaCafeは11回目の登壇(R:9回/P:2回)@takuya_0301
Copyright © 2023, Oracle and/or its affiliates28OCIコンテナ関連サービスアップデートOracle Cloud Hangout Café Premium – OCI Cloud Native 2023
OCIで選択可能な幅広いアプリケーションインフラストラクチャCopyright © 2023, Oracle and/or its affiliates29ContainerInstancesDIYK8s/DockeronVM or BMOKEwithCustomer-managedNodesServerlessOKE(VirtualNodes)OCIFunctionsMORE AGILITYComing Soon!!既存サービス/機能VirtualMachineBareMetalManagedKubernetes(OKE)Compute Containers FunctionsMORE CONTROLNew!!
インフラ管理不要(サーバレス)のコンテナ実行環境30 Copyright © 2023, Oracle and/or its affiliatesOCI Container Instances■ ユースケースコンテナオーケストレーション(Kubernetes)を必要としないコンテナアプリケーションのデプロイ例)API、Web アプリ、継続的インテグレーション・デリバリー(CI/CD)の ジョブ、開発・テスト環境など■ 特徴• セキュアに分離、最適化されたコンテナ実行環境• ユーザによる仮想マシンの管理、パッチ適用、トラブルシューティングが不要• コンテナを即座に実行可能■ 価格通常のComputeと同様(OCPU/メモリ課金)※ Serverless Container Instancesに対する課金はなしContainer InstancesContainer Container ContainerWebアプリ Web APICI/CDビルドジョブ物理マシン仮想マシンコンテナランタイムコンテナアプリケーションOracleManagedOCIRDocker HubpullpullpullOther Container Registries
インスタンスに指定可能なパラメーター• インスタンス名• 配置先のドメイン(可用性ドメイン/障害ドメイン)• シェイプ• 2023/3時点ではE3/E4のみ• CPU/メモリはフレキシブルに指定可能• VCNの作成および既存VCNの選択• インスタンスに割り当てるIPアドレスはプライベート/パブリックを選択可能• NSG(ネットワーク・セキュリティ・グループ)の指定• DNSレコードの設定• VNICでのソース/宛先チェックOCI Container Instancesのプロビジョニング ーインスタンスの設定ーCopyright © 2023, Oracle and/or its affiliates31
コンテナに指定可能なパラメーター※コンテナは1インスタンスに複数指定可能• コンテナの再起動ポリシー• 常時(Always)/なし(Never)/失敗時(OnFailure)• コンテナイメージの指定• OCIR• 外部レジストリ• 環境変数• リソース・スロットル• コンテナが利用可能な最大vCPU/メモリを数もしくはパーセンテージで指定可能• 起動オプション• ENTRYPOINTをオーバーライドOCI Container Instancesのプロビジョニング ーコンテナの設定ーCopyright © 2023, Oracle and/or its affiliates32
1. コンテナ・オーケストレーション (Kubernetes など) を必要としないコンテナ化されたアプリケーション2. 迅速なインスタンスの作成と破棄が求められるワークロード• APIサーバ/Web アプリケーション• 一時的なワークロード• CI/CD パイプライン・ジョブ• 開発/テスト環境• データ/メディア処理• 自動化タスク3. サーバー/VM 上で直接実行されるスタンドアロン コンテナ・ワークロードe.g., スケールアウトが考慮されていないレガシー・アプリケーションをコンテナ化してサーバレスで運用負荷軽減OCI Container Instances のユースケースCopyright © 2023, Oracle and/or its affiliates33
Copyright © 2023, Oracle and/or its affiliates34Container Instances demoOracle Cloud Hangout Café Premium – OCI Cloud Native 2023
1. OCI LoadBalancer(OCI LB)とは統合されていない(負荷分散が不可)• 複数のContainer InstancesをOCI LBのバックエンドに紐づけることは可能(IPアドレスで紐付け)• 水平オートスケールするわけではないので、 Container Instances数はユーザ側で管理• 将来的には水平スケールとOCI LBとのネイティブに統合する予定2. OCI DevOpsサービス(CI/CDサービス)とは統合されていない• OCI DevOpsのデプロイ対象としてContainer Instancesを選択することは不可• デプロイメント・パイプラインにて、シェルコマンドを実行可能なステージ(Shell Stage)を利用可能• OCI CLIを利用してビルドしたコンテナイメージでContainer Instancesをプロビジョニングすることは可能3. 永続化ができない• 現時点では、15GBのエフェメラル・ストレージが利用可能• OCI Container Instancesに対してBlock Volumeのアタッチが不可(ロードマップ)• 永続化する場合は、外部データベースなどを利用OCI Container Instances の制約事項(2023/3現在)Copyright © 2023, Oracle and/or its affiliates35
インフラ管理不要(サーバレス)の Worker Node オプション36 Copyright © 2023, Oracle and/or its affiliatesOKE (Oracle Container Engine for Kubernetes) Virtual Nodes■ ユースケースWorker Nodeの運用にコストをかけずに運用したいWorker Nodeの運用コスト増大を防ぎたい■ 特徴• Worker Node の管理が不要のサーバレス Worker Node環境 (Master Node は従来通りマネージドで提供)• スケーリング、アップグレード、トラブルシューティングなどのWorker Node 運用上のコストを自動化• コンテナアプリケーションが消費するリソース (CPU/メモリ) に基づいたきめ細やかな従量課金■ 価格Pod が利用するリソース (CPU/メモリ) による課金※具体的な価格はまだ未発表Container EngineFor KubernetesManaged Node PoolVirtualNodePod自動スケール Node自動スケールComing Soon!!VirtualNode
OCI Queue ServiceKyotaro NonakaSolutions ArchitectOracle Japan
Copyright © 2023, Oracle and/or its affiliates381. OCI Queue Service の概要2. OCI Queue Service の技術コンセプト3. Demo4. OCI Queue Service と OCI Streaming Serviceアジェンダ
OCI Queue Service の概要サービスの概要、特長、ユースケースCopyright © 2023, Oracle and/or its affiliates39
Copyright © 2023, Oracle and/or its affiliates40メッセージ基盤の分類分散ストリーミング• 点と(複数の)点を接続• ブローカー通信• リアルタイム/高スループット• メッセージの再利用性• 順序保証• 例) OCI Streaming(Kafka)メッセージキュー• 点と点を接続• ブローカー通信• 非同期通信• 一度だけのメッセージ処理• 処理の保証• 自動スケール• 例) OCI Queueメッセージブローカー• 点と(複数の)点を接続• ブローカー通信• Pushベース/非同期• 緩い順序保証• 例) Oracle TEQ (AQ)(ストリーミング)Web サービス• 点と点を接続• 直接の通信• 同期通信• 例) HTTP WebServices, gRPC
非同期メッセージングをサーバレスに実現する、ハイパフォーマンス・メッセージキューOCI Queue Service■ ユースケース• アプリケーションを分離し、疎結合なアーキテクチャを構築• 信頼性の高いスケーラブルなメッセージ基盤の活用■ 特徴• フルマネージド、オートスケール• OCI Streaming を補完する適用領域• オフセット カーソル 無し、メッセージ消費は逐次確認• パーティション無し、需要に応じてオートスケール• at-least-once 配信、配信順序はベストエフォート• Dead Letter Queue (DLQ) の提供 (異常終了メッセージを退避)• キューメッセージの暗号化• HTTPとSTOMPプロトコルをサポート■ 価格最初の100万リクエストは無料、移行100万リクエストごとに¥30.8* 1 リクエストのメッセージ容量が64KBを超える場合、64KBを1単位として複数のリクエストとして計算** 複数メッセージの同時取得は、メッセージ容量に基づいて計算Container EngineFor KubernetesContainersVirtualMachineOCI QueueServiceFunctionsProducer… etc. Container EngineFor KubernetesContainersVirtualMachineFunctionsConsumer… etc.• STOMP: Simple Text Orientated Messaging Protocol軽量なメッセージングプロトコルregulardead letterCopyright © 2023, Oracle and/or its affiliates. All rights reserved.41 Copyright © 2023, Oracle and/or its affiliates41
42マネージド自動化、メンテナンス要らずのインフラとプラットフォームセキュア外部/内部の脅威からデータを守るスケール停止なしの自動スケールと最低限のコストCopyright © 2023, Oracle and/or its affiliates42OCI Queue Service の特長従量課金最大限のコストパフォーマンス複数のプロトコルHTTP/STOMPのサポート
Copyright © 2023, Oracle and/or its affiliates43at-most-once デリバリー• メッセージ毎に、そのメッセージは0回か1回配信される• メッセージは重複しない• メッセージが失われる可能性があるat-least-once デリバリー• メッセージ毎に、少なくとも1回成功するように潜在的に複数回配信が行われる• メッセージの重複があり得る• メッセージの複製が失われないexactly-once デリバリー• メッセージ毎に正確に1回の配信が受信者に対して行われる• メッセージは重複しない• メッセージは失われたり複製されたりしないOCI Queue Service の機能at-least-once デリバリーを採用
Copyright © 2023, Oracle and/or its affiliates44OCI Queue Serviceは正常に処理されていないメッセージを格納する方法として、デッド・レター・キューを提供• メッセージがキューから取得されるたびに、メッセージの配信回数が増加• メッセージ配信回数がキューの最大配信試行回数を超えると、メッセージはデッド・レター・キューに移動• キューの最大配信試行回数はキューの作成時または変更時に指定可能デッド・レター・キューに転送されたメッセージが削除されるのは以下の2パターン• 保存期間が過ぎてサービスによって削除される• 手動でメッセージを削除するOCI Queue Service の機能デッド・レター・キュー (DLQ)
Copyright © 2023, Oracle and/or its affiliates45フロントエンドとバックエンドの分離• バックエンドサービスの並列化• 非同期処理の実現• システム利用ユーザはバックエンドの処理終了を待たずに結果を得る• 疎結合性による開発スピードの向上コンポーネントの独立したスケール• ボトルネックの解消• システム内でボトルネックの部分(IaaS/コンテナ/DB/etc.)のみを必要なだけスケール• 余剰リソースの削減システムの拡張性• 後からコンポーネントの追加(機能の追加など)が容易• QueueにProduce/QueueからConsumeと言う形を守ればよいOCI Queue Service のユースケースアプリケーションの分離FrontSvc1ProducerConsumerConsumerConsumerスケールProducer ConsumerProducerメッセージのスキーマを揃えれば、Consumerの変更は不要Svc2Svc3
OCI Queue Service の技術コンセプトサービス利用にあたって知っておくべきことCopyright © 2023, Oracle and/or its affiliates46
Copyright © 2023, Oracle and/or its affiliates47コンテンツ(メッセージ)• 文字列形式のキュー内の要素プロデューサ• キューにメッセージを送信するクライアントコンシューマ• キューからメッセージを受信するクライアント• コンシューマは、メッセージの受信後にキューからメッセージを削除可能最大保存期間• コンシューマによって削除されない場合の、メッセージがシステムによって自動的に削除されるまでキューがメッセージを保持する期間最大配信回数• デッド レター キューに送信されるまでに、メッセージがコンシューマに配信され、更新または削除されていない回数OCI Queue Service の概念
Copyright © 2023, Oracle and/or its affiliates48公開中• メッセージは、1つ以上のプロデューサによってキューに公開• 各プロデューサにて保存期間を指定• 保存期間が指定されていない場合、メッセージはキュー(サービスの単位)で定義された保存期間に応じる処理中• 複数のコンシューマが1つのキューからメッセージを消費可能• コンシューマ数はスケーリング可能• メッセージは一度コンシューマに配信されると、表示タイムアウトに応じて他のコンシューマから見えなくなる更新中• メッセージの処理に予想よりも時間がかかる場合、コンシューマはメッセージの表示タイムアウトを延長可能• 表示タイムアウトを延長すると、メッセージの削除権は維持され、他のコンシューマから見えない状態が続く削除中• コンシューマにメッセージが配信され処理された後は、別のコンシューマへの再配信を防ぐためにメッセージ削除が必要OCI Queue Service の原則メッセージの状態
Copyright © 2023, Oracle and/or its affiliates49①プロデューサはメッセージをOCI Queueに公開②コンシューマがOCI Queue上の取得可能なメッセージを取得• 取得時のタイムアウトを指定可能(ポーリング・タイムアウト)• メッセージの最大取得数の指定が可能 ※指定がない場合は20③コンシューマが取得したメッセージを処理• 処理中のメッセージを他のコンシューマから見えないようにすることができる(表示タイムアウト)④コンシューマがOCI Queueに対して処理したメッセージの削除リクエストOCI Queue Service の原則基本的な処理の流れProducerOCI QueueConsumer①② ④③
Copyright © 2023, Oracle and/or its affiliates50ポーリング・タイムアウト• コンシューマがメッセージの取得を待機する時間• タイムアウトが経過して消費可能なメッセージがない場合、リクエストは空のレスポンスを返す• ポーリング・タイムアウトを増やすと、コンシューマがキューにメッセージをリクエストする回数が減る• デフォルトは30秒表示タイムアウト(メッセージロック)• 他のコンシューマに表示されない期間• コンシューマは、別のコンシューマが同じメッセージを取得できないように、メッセージをロック可能• キュー・レベル/メッセージの消費または更新時に指定することが可能OCI Queue Service の概念2つのタイムアウトQueueConsumerGetMessageリクエスト指定(設定)した時間、Consumerがポーリング消費可能なメッセージがあればそれを取得Consumerタイムアウト時は空のレスポンスを返却ConsumerQueueConsumer AGetMessageリクエスト指定(設定)した時間、メッセージをロックメッセージロック中はメッセージが見えないConsumer B
Copyright © 2023, Oracle and/or its affiliates51メッセージ配信の仕組み (Put/Get/Update/Delete)1. Producerは、デフォルトのメッセージ保持時間でメッセージをキューに送信。Producerは、キュー サービスがメッセージを受信して保存したという確認を受け取る。2. Consumer A は、表示タイムアウト A 内に処理することになっているメッセージを受信。3. Consumer B は、利用可能な唯一のメッセージがConsumer A によって既に消費されているため、何も受信しない。4. Consumer A は表示タイムアウト A 内にメッセージを処理できなかったため、メッセージを更新して表示タイムアウトを延長。5. Consumer B は再度メッセージを受信しようとするが、利用可能な唯一のメッセージがConsumer A によって消費および拡張されたため、受信できない。6. 延長された表示タイムアウトが経過すると、メッセージが再び表示されるように。7. Consumer B は 3 回目のメッセージの受信を試みる。Consumer B はメッセージを受信。これは、表示タイムアウト B 内に処理することになる。8. Consumer A はメッセージを受信しようとするが、Consumer B がメッセージを消費したため、何も受信しない。Consumer A は、メッセージの表示タイムアウトを延長したり、メッセージを削除したりすることができなくなる。9. Consumer B はメッセージを正常に処理し、キューからメッセージを削除しようとする。Consumer B は、メッセージが完全に削除されたという確認を受け取り、このメッセージは他のConsumerに配信されることはない。
Copyright © 2023, Oracle and/or its affiliates52• DLQのOCIDは[QueueのOCID]-dlqとなる• DLQのOCIDを利用して、通常のQueueと同様にGetMessage/DeleteMessageを行うデッド・レター・キュー (DLQ)の利用
Demoプロビジョニング/各種パラメータ/コンソール/SDKで実行Copyright © 2023, Oracle and/or its affiliates53
OCI Queue Service と OCI Streaming Serviceそれぞれのサービスの使い分けCopyright © 2023, Oracle and/or its affiliates54
Copyright © 2023, Oracle and/or its affiliates55OCI Queue Service• メッセージキュー• 点と点を接続• 自動スケール• 一度だけのメッセージ処理• 処理の保証• HTTP/STOMPOCI Streaming Service• 分散ストリーミング• 点と(複数の)点を接続• リアルタイム/高スループット• メッセージの再利用性• 順序保証• Kafka API 互換OCIで利用可能な2つのMessaging サービス
Copyright © 2023, Oracle and/or its affiliates56Queue• メッセージ: 128KB• ストレージ/キュー: 2GBStreaming• メッセージ: 1MB• ストレージ/Stream: 無制限(最大保持期間有り)OCI Queue と OCI Streaming の違い制限ProducerConsumerOCI Queue- 1000 APIリクエスト/秒- 10MB イングレス/秒- 512KB PutMessage/秒 or 20メッセージ /秒- 1000 APIリクエスト/秒- 10MB エグレス/秒- 2MB GetMessage/秒 or 20メッセージ /秒StreamingProducer- 無制限リクエスト数- 1MB 書込み/秒/パーティション- 5リクエスト/秒/Consumer Group- 50 ConsumerGroup/StreamConsumerGroup
Copyright © 2023, Oracle and/or its affiliates57Queue StreamingOCI Queue と OCI Streaming の違い配信方式ProducerConsumerOCI Queue StreamingProducerConsumerGroup4 3 2 1ConsumerConsumerConsumer43213 2 1123ConsumerGroup3 2 13 2 1
OCI DevOps UpdateYutaka IchikawaOracle Corporation JapanSolutions ArchitectMar08, 2023
Copyright © 2023, Oracle and/or its affiliates59ProflieName• Yutaka Ichikawa/市川 豊Belong• Solutions ArchitectRole• Principal Cloud Solution EngineerSNS• Twitter/GitHub/Qiita:cyberblack28Blog• https://cyberblack28.hatenablog.com/Materials• https://speakerdeck.com/cyberblack28/Community• Oracle Cloud Hangout Cafe #ochacafe• CloudNative Days Tokyo #cndt #o11y2022Certified• Certified Kubernetes Administrator• Certified Kubernetes Application Developer• Certified Kubernetes Security Specialist• Kubernetes and Cloud Native AssociatePublicationsNew
1. OCI DevOps 概要2. OCI DevOps Update3. Blue-Green Deploy/Canary Release DEMOAgendaCopyright © 2023, Oracle and/or its affiliates60
Copyright © 2023, Oracle and/or its affiliates61OCI DevOps 概要
Copyright © 2023, Oracle and/or its affiliates62OCI DevOps 概要ソースコード、ソフトウェアビルド、アーティファクト、リリースを一括管理継続的インテグレーション/継続的デリバリー(CI/CD)の実現、アプリケーション開発のライフサイクルを想定したシステム開発および運用環境の整備
Copyright © 2023, Oracle and/or its affiliates63OCI DevOps 概要一気通貫の開発・運用プロセス、幅広いリリース環境、コスト削減コード管理ビルド成果物管理デプロイEnd to End の開発・運用プロセスコード管理、ビルド・パイプライン、 成果物管理、デプロイメント・パイプラインから構成される各機能を用いた、一気通貫の開発・運用プロセスを実現幅広い環境に対応アーティファクトサービスと連携、実行環境を問わず、幅広い環境へのデプロイを実現Bare MetalCompute&VirtualMachineOKEFunctionsOCIRArtifactRegistry環境管理アーティファクト管理OCI DevOpsのサービスとしての価格は無料価格無料(*コード・リポジトリのストレージ、およびビルドのためのコンピュートは別途必要)
Copyright © 2023, Oracle and/or its affiliates64OCI DevOps 概要イベントドリブンな連携を実現するトリガー機能OCICode RepositoryOracleVisual Builder Studio
Copyright © 2023, Oracle and/or its affiliates65OCI DevOps Update
Copyright © 2023, Oracle and/or its affiliates66OCI DevOps UpdateHelm チャートの検証をサポートデプロイ前にHelmチャートの整合性を検証可能となり、検証に失敗した場合はデプロイされない。• OCIRにHelmチャートがあることが必要• Helmチャートには有効なPGPキー・ペアによって署名されたバイナリ形式が必要• 公開鍵はOCI Vaultに格納するか、インラインで指定できるアーティファクト追加時にタイプで「Helmチャート」を選択後、「Helmチャートの検証」で設定可能
Copyright © 2023, Oracle and/or its affiliates67OCI DevOps Updateデプロイ パイプラインでのコマンドの実行をサポートデプロイメント・パイプライン実行中にカスタムのシェルコマンドを実行。実行したいコマンドをコマンド仕様に合わせたYAMLファイルを作成して、アーティファクトレジストリに格納ArtifactRegistryデプロイメント・パイプライン作成時にステージとして「シェル・コマンドの実行」テンプレートを選択https://docs.oracle.com/ja-jp/iaas/Content/devops/using/command_spec.htmコマンド仕様 (YAML)YAMLを格納したアーティファクトレジストリを登録コマンドを実行するコンテナ・インスタンスの設定ArtifactRegistryContainerInstancesOCIDevOpsYAMLを参照してシェルコマンド実行YAML
Copyright © 2023, Oracle and/or its affiliates68OCI DevOps Updateデプロイ パイプラインでのコマンドの実行をサポート利用できるコマンド(2023年3月時点)https://docs.oracle.com/ja-jp/iaas/Content/devops/using/shellruntime_details.htm
Copyright © 2023, Oracle and/or its affiliates69OCI DevOps Updateプロジェクトのカスケード削除をサポートこれまで、プロジェクトを削除するには、事前に関連リソースを削除しておくことが前提だったが、カスケード削除がサポートされたことにより、DevOps の Web UI から関連リソースも含めて、一括で削除可能• カスケード削除は72時間後に実行される• 72時間以内であれば、カスケード削除をキャンセル可能
Copyright © 2023, Oracle and/or its affiliates70OCI DevOps UpdateDevOps と連携した外部リポジトリ(コード)の Terraform 構成からスタック作成DevOps と連携した外部リポジトリ(コード)に保存されている Terraform 構成からスタックを作成できる• Bitbucket クラウド• Bitbucket サーバー• DevOps• GitHub• GitLab「ソースコード管理タイプ」のプルダウンメニューから以下を選択して、DevOps で利用および Terraform 構成を格納しているリポジトリを選択可能
Copyright © 2023, Oracle and/or its affiliates71OCI DevOps UpdateDevOps ビルド・パイプラインでの GraalVM Enterprise の使用可能OCI DevOps のビルド・パイプラインで使用する定義ファイル(build_spec.yaml)に、YUMパッケージ・マネージャー・コマンドを追加することで、ネイティブイメージ、JDK などの GraalVM Enterprise コンポーネントをインストールして使用可能。https://docs.oracle.com/ja-jp/iaas/Content/devops/using/graalvm.htm・・(省略)env:variables:"JAVA_HOME" : "/usr/lib64/graalvm/graalvm22-ee-java17"# PATH is a reserved variable and cannot be defined as a variable.# However, PATH can be changed in a build step and the change is visible in subsequent steps.steps:- type: Commandname: "Install the latest GraalVM Enterprise 22.x for Java 17 - JDK and Native Image"command: |yum -y install graalvm22-ee-17-native-image- type: Commandname: "Set the PATH here. JAVA_HOME already set in env > variables above."command: |export PATH=$JAVA_HOME/bin:$PATH- type: Commandname: "Build a native executable with the installed GraalVM Enterprise 22.x for Java 17 - Native Image"command: |mvn --no-transfer-progress -Pnative -DskipTests package・・(省略)build_spec.yamlGraalVM Enterpriseコンポーネントインストール環境変数 JAVA_HOME を設定環境変数 PATH 設定MavenおよびGraalVM Enterprise 22.x for Java 17 - Native Imageを使用して、Javaアプリケーションからネイティブ実行可能ファイルを構築するビルド仕様ファイルのサンプルComputeOKEFunctionsGraalVM Enterprise Native ImageによるビルドApp
Copyright © 2023, Oracle and/or its affiliates72OCI DevOps UpdateBlue-Green と Canary Release デプロイ新機能デプロイ戦略として、Blue-Greenデプロイ、カナリア・リリースに対応、Container Engine forKubernetes(OKE)およびComputeインスタンス環境へのBlue-Greenデプロイ、カナリア・リリースを実現
Copyright © 2023, Oracle and/or its affiliates73OCI DevOps UpdateBlue-Green と Canary Release デプロイ新機能最小限のダウンタイムと即時のロールバック機能を提供するBlue-GreenデプロイBlue-Green Deploy(例:OKE)Blue Greenカスタム関数を利用してデプロイ前にGreen環境(ネームスペース)のアプリケーションを検証可能手動承認によるBlue環境(ネームスペース)へのトラフィック・シフトOKEデプロイメントでは、トラフィックをルーティングするためにNGINXイングレス・コントローラを設定Green環境(ネームスペース)へトラフィックシフトhttps://docs.oracle.com/ja-jp/iaas/Content/devops/using/deploy_bgstrategy.htm
Copyright © 2023, Oracle and/or its affiliates74OCI DevOps UpdateBlue-Green と Canary Release デプロイ新機能アプリケーションの新しいバージョンを一部のユーザーに段階的にリリースするカナリア・リリースCanary Release(例:OKE)カスタム関数を利用して、デプロイ前にカナリア環境(ネームスペース)でアプリケーション検証可能OKEデプロイメントでは、トラフィックをルーティングするためにNGINXイングレス・コントローラを設定検証成功後、本番環境(ネームスペース)の一部のトラフィックがカナリア環境(ネームスペース)にシフト手動承認後、本番環境(ネームスペース)に検証済みのアプリケーションがデプロイされるhttps://docs.oracle.com/ja-jp/iaas/Content/devops/using/deploy_canarystrategy.htm
OCI DevOps DemoCopyright © 2023, Oracle and/or its affiliates75
Copyright © 2023, Oracle and/or its affiliates76OCI DevOps Blue/Green & Canary DemoBlue/Green Deploy Demo Environmentアプリケーションの新しいバージョンを一部のユーザーに段階的にリリースするカナリア・リリース
Copyright © 2023, Oracle and/or its affiliates77OCI DevOps Blue/Green & Canary DemoBlue/Green Traffic ShiftLoadBalancerContainersLoadBalancerContainers ContainersLoadBalancerContainers ContainersOCI DevOps OCI DevOps OCI DevOpsdeploy deploy deploynginx.ingress.kubernetes.io/canary: "true“nginx.ingress.kubernetes.io/canary-by-header: redirect-to-namespaceBnginx.ingress.kubernetes.io/canary-weight: "100"nginx.ingress.kubernetes.io/canary: "true“nginx.ingress.kubernetes.io/canary-by-header: redirect-to-namespaceBnginx.ingress.kubernetes.io/canary-weight: "0"1回目 2回目 3回目namespaceA(blue)namespaceB(green)接続先を切り替え 接続先を切り替えnamespaceA(blue)namespaceB(green)namespaceA(blue)namespaceB(green)
Copyright © 2023, Oracle and/or its affiliates78OCI DevOps Blue/Green & Canary DemoBlue/Green Traffic ShiftLoadBalancerContainersLoadBalancerContainers ContainersLoadBalancerContainers Containersnginx.ingress.kubernetes.io/canary: "true“nginx.ingress.kubernetes.io/canary-by-header: redirect-to-namespaceBnginx.ingress.kubernetes.io/canary-weight: “100"4回目 5回目 6回目ContainersOCI DevOpsdeploynginx.ingress.kubernetes.io/canary: "true“nginx.ingress.kubernetes.io/canary-by-header: redirect-to-namespaceBnginx.ingress.kubernetes.io/canary-weight: "100"OCI DevOpsdeploynginx.ingress.kubernetes.io/canary: "true“nginx.ingress.kubernetes.io/canary-by-header: redirect-to-namespaceBnginx.ingress.kubernetes.io/canary-weight: "0"OCI DevOpsdeploy接続先を切り替え 接続先を切り替え 接続先を切り替えnamespaceA(blue)namespaceB(green)namespaceA(blue)namespaceB(green)namespaceA(blue)namespaceB(green)
Copyright © 2023, Oracle and/or its affiliates79OCI DevOps Blue/Green & Canary DemoCanary Demo Environment
参考情報Copyright © 2023, Oracle and/or its affiliates80
Copyright © 2023, Oracle and/or its affiliates81参考資料OCI DevOps Release Notehttps://docs.oracle.com/en-us/iaas/releasenotes/services/devops/OCI DevOps Documentshttps://docs.oracle.com/ja-jp/iaas/Content/devops/using/home.htmSample Source of Demohttps://github.com/oracle-japan/devops-deploy-strategy
Thank youCopyright © 2023, Oracle and/or its affiliates82