これら前提条件を踏まえた上で、2つの環境を比較し、インフラレイヤーのどういった要素がギャップとなっているかを洗い出しました。システムを構成する各アプリケーションを異なるコンピュータで実行しようとすると、以下のようなギャップが発生します。
例えば、図4の「ROS Robot」上で実行していたアプリケーション(Pod)を、シミュレーション環境に合わせてパブリッククラウド環境で動かそうとすると、Wi-Fiや4Gなど不安定なネットワークの有無、CPUアーキテクチャの違い、自律移動などの他アプリケーション(Pod)との通信に際してのHop数の違いなどが発生します。こうなると、結果が返ってくるまでの時間やタイミングが変化し、検証結果に間接的影響を及ぼす可能性もあります。(もちろん、この程度の外乱を想定し、ロバスト性のあるアプリケーションを開発することが最も重要です)。
よって、インフラレイヤーのギャップを解消することも、ある程度は意識しなければなりません。しかし、アプリケーションエンジニアは、自分のアプリケーションに対し、シミュレーション環境/現実の作業環境、それぞれに特化した別々の実装をするのを避けたいと考えるでしょう。インフラレイヤーのギャップ解消のために「実装上のギャップ」という新しいギャップを作っては本末転倒です。
そこで活躍するのが、クラウドネイティブの考え方/支える技術です。インフラレイヤーのギャップ解消という文脈では、「システム構成要素を細かく分解し、環境間の差分だけをピンポイントに埋めること」を助けます。合わせて、前提条件としている、大規模(数十〜数百台のコンピュータ/ROSロボット/IoTデバイスが互いにつながる)、好みで配置できる、興味に応じて試験できる、同じ挙動が再現できるといった要件の実現に寄与します。
アプローチの解説に進む前に、前回記事で解説した「クラウドネイティブの定義」について、もう一度振り返っていただけるとより理解が深まるかと思います(図5)。
クラウドネイティブな技術アプローチを中心軸に、ギャップ要素への対処方法を以下の通り整理しました。
このような考え方/技術による裏付けをもって、マイクロサービスという設計思想が意味を成します。また、「それぞれに特化した別々の実装をするのを避けたい」という考えは、マイクロサービス的設計思想に、とても重要なモチベーションです。重複実装を減らすといった、生産性への影響もさることながら、エンジニアに関心の分離※3)を強く意識させることにつながります。
※3)関心の分離:ソフトウェア工学において、何をしたいのか(関心)ごとに分離された構成要素でプログラムを構築すること
今回の例では、CPUアーキテクチャの差への対処で登場した「サイドカー」という考え方のように、「アプリケーションそのものは変更せず、目的に応じて別コンテナを作る」というアプローチがそれに当たります。結果的に、各アプリケーションはテストのしやすさが改善され、個別のみならず全体に対しての品質向上にも貢献します。
冒頭に挙げた通り、「システム構成要素を細かく分解し、環境間の差分だけをピンポイントに埋めること」の実現によって、残りの大部分から見たインフラレイヤーは、環境間の差分を意識する必要がない、資源が「共用(Share)されている状態」を作り出します。このおかげで、アプリケーション開発者は、ピンポイントかつ極小な差分を埋めるだけで、2つの環境を跨ぐ開発に従来と比べて安心して臨むことができるのです。
Copyright © ITmedia, Inc. All Rights Reserved.