組み込みエンジニアも知っておきたい「クラウドネイティブ」とは仮想環境を使ったクラウド時代の組み込み開発のススメ(3)(1/3 ページ)

IoT/クラウドロボティクス時代のシステム開発を加速化する仮想環境の活用について解説する本連載。第3回は、IT分野で浸透してきている「クラウドネイティブ」という考え方とその狙い、支える技術などについて紹介した上で、組み込み分野におけるクラウドネイティブの可能性について説明する。

» 2021年07月28日 10時00分 公開

はじめに

 これまでの連載では、主に組み込みソフトウェアのエンジニアの視点から、IoT(Internet of Things、モノのインターネット)システム開発/サービス構築の方策について、シミュレーション環境「箱庭」を軸に見てきました。しかし、連載の第1回第2回とも、記事の冒頭で掲げている通り、IoTは情報技術(IT)の総合格闘技ですので、さまざまな視点からの知見が必要となります。そこで今回からは、主にIT分野のエンジニアの視点から、仮想環境を用いたROSロボットの開発、IoTシステム開発/サービス構築のアプローチを紹介していきます。

⇒連載「仮想環境を使ったクラウド時代の組み込み開発のススメ」バックナンバー

 今回は、最初にIT分野で浸透してきている「クラウドネイティブ」という考え方とその狙い、支える技術などについて解説します。その上で、組み込み分野におけるクラウドネイティブの可能性について説明したいと思います。

クラウドネイティブが埋める「箱庭」と現実のギャップ

 前回の記事では、筆者らが研究開発に取り組んでいるシミュレーション環境「箱庭」について紹介しました。シミュレーション環境を活用するモチベーションは、以下を一例とするような、現実の作業環境やプロダクト設計への「フィードバック」を得ることにあると推察されます。

  • 実機テストでは危険を伴うような極限場面での挙動を設計・実装段階で追い込む
  • 現実的にはコストなどの問題で全ての確認が難しい多数の組み合わせパターンを試す
  • 強化学習など繰り返し動作が必要なシステムを効率的に実行する

 これらのフィードバックを、なるべく「早く、確実に」実行することはとても重要です。それによって「何度も無理なく繰り返す」ことが可能になります。これは、理想的な「フィードバックサイクル」を構成できることを示しています。

 筆者らの研究開発では、クラウドネイティブの考え方/技術を活用して、この理想的なフィードバックサイクルの構成を実現しています。ただし、シミュレーション環境「箱庭」と、現実の作業環境の間には、従来技術では埋めることが難しい“ギャップ”が存在します。そこで、筆者らは以下の2点に着目してギャップの解決に当たりました。

  1. 各環境の「可観測性」のギャップ
    • 開発対象となるROSロボットやIoTシステムの動作が、内界および外界から正確に計測されて、検証に必要な計測結果が適宜アウトプットできるか
  2. 環境同士の「相似性」のギャップ
    • 現実の作業環境を忠実に再現できるシミュレーターが用意できるか(シミュレーション環境と現実の作業環境の相似性)
    • 検証に必要な計測結果に影響を及ばさない部分の共通化ができるか(コンピュータ資源/ネットワーク資源などのインフラレイヤーの相似性)

 クラウドネイティブでは、ギャップを埋めることを阻む複雑怪奇な問題を、細かい事象に分解し、シンプルに扱うことで克服します。「徹底した抽象化」をシステマチックに適用可能にする枠組みと言ってもいいかもしれません。これを現実的コストで実現する手段として、クラウドネイティブという考え方や、支える技術が大いに役立ちます。

 上記のギャップ要因の詳細や、クラウドネイティブな具体的な解決方法については次回以降、順次解説していきます。まず今回は、クラウドネイティブについて、組み込みソフトウェアとの関連を織り交ぜながら順に見ていきましょう。

クラウドネイティブとは何か

 ここからは、クラウドネイティブの一般的な解説をしていこうと思います。クラウドネイティブの推進や、エコシステムの構築は「CNCF(Cloud Native Computing Foundation)」という財団を中心に行われています。2020年の年次報告書によると、メンバーシップ企業が600社を超え、最高位のプラチナメンバーにはパブリッククラウドベンダーからエンドユーザーまでが名を連ねます。「Kubernetes」「Prometheus」「Envoy」など80以上のプロジェクトを主催しています。

 クラウドネイティブの定義は日本語を含む各言語で公開されています。

クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャおよび宣言型APIがあります。

これらの手法により、回復性、管理力および可観測性のある疎結合システムが実現します。これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測通りに行うことができます。

Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えています。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。

CNCF公式の定義「CNCF Cloud Native Definition v1.0」から引用

 最初の段落で、実効性の高いアプローチの代表例が5つ挙げられています。これら1つ1つが多くの議論を呼ぶ複雑な概念です。ここでは、概要に触れる程度に留めておきます。

  • コンテナ/イミュータブルインフラ
    • コンテナは、小さなサービス(≒アプリ)をOSやミドルウェアなどの「環境」も含めて丸ごと開発・配布・実行する仕組みです。そのため、アプリから見える「環境」は、どのコンピュータで実行されてもイミュータブル(不変)です
    • 代表的な実装:Dockercontainerd(コンテナ・ランタイム)
  • サービスメッシュ
    • 複数の小さなサービスの疎結合な集合体の中では、1つのアプリケーションとして動くために幾つものサービス間通信が発生します。この通信は従来のモノリシックなシステムと比較すると複雑/難解です。これをコントロールするのがサービスメッシュです
    • 代表的な実装:Istio
  • マイクロサービス
    • 1つのアプリケーションを、複数の小さなサービスの疎結合な集合体として構成します。マイクロサービスにおける小さなサービスの実体は、1個から数個のコンテナにより構成されます
    • 代表的な実装:Kubernetes(コンテナ・オーケストレーター)
  • 宣言型API
    • コンテナをはじめとする、マイクロサービスの構成要素を宣言的に管理します
    • 代表的な実装:Kubernetes(コンテナ・オーケストレーター)
図1 図1 クラウドネイティブの定義(クリックで拡大) 出典:「Kubernetesのロゴ」「モノリシックからマイクロサービスの図」はCNCFより引用。その他の図の組み立ては「クラウドネイティブの定義」を基にした筆者解釈によるものです
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.