Cloud Robotics FX V2 – based on Azure Service Fabric

Cloud Robotics FX は、クラウドサービスをベースとした IoT Hub に対応したアプリケーションサーバーです。Pepper とデバイス間の連携や AI の組み込みを容易にする為の基盤アプリとして開発し、OSS 化しています。

https://github.com/seijim/cloud-robotics-azure-platform-v1-sdk/tree/master/CloudRoboticsFX

クラウドサービスは、とても安定しており、分かり易いものでしたが、いかんせん、Azure 最古の PaaS で、ARM にも対応せず、、、で、そろそろ新版を開発せねばと思っていました。

移行先としての Service Fabric を真剣に調査し始めると、いやぁ、ミドルウェアの開発になんて最適なんだ!と。さすがに、SQL Database や DocumentDB の基盤になっているだけあるなと思いました。

しかしながら、一般のアプリを開発するには概念の理解や開発してディプロイできるようになるまでには、結構な勉強時間が掛かるので、App Services や Functions を利用することをお勧めします。

さて、本題の Cloud Robotics FX V2 ですが、開発を一先ず終えました。GitHubに、現段階のソースコードを公開しております。まだ、修正が入るかもしれませんが、ちゃんと動きます! セットアップガイドを用意しましたので、事前準備にある Service Fabric SDK とツールを導入して頂ければ、Service Fabric ローカルクラスター上にディプロイして、動作確認をすることが可能です。

https://github.com/seijim/cloud-robotics-fx-v2

従来の V1 では、1つのクラウドサービスがダウンすると、他のクラウドサービスが IoT Hub のパーティション範囲を変えることで、高可用性を担保していました。Service Fabric (Stateful Service) ベースの V2 では、IoT Hub のパーティション単位に一致する Service Fabric のパーティションを動かしており、そのパーティションが現在の設定では3つのサービスレプリカを持ちます。

1つがプライマリで、残り2つがセカンダリとなり、プライマリがダウンすると数秒でセカンダリに切り替わります。コードベースで言うと、RunAsync というメイン処理をプライマリでは動かして、セカンダリでは動かさないようにしてくれているので、ステートフルなサービスでも高可用性構成=レプリカ構成が可能です。更に、インメモリのデータ (Reliable Collection) は、トランザクションをサポートし、トランザクションログを書き込みながらセカンダリレプリカに伝搬させます。すごい!

以下は、IoT Hub のパーティション数が2なので、Service Fabric のパーティション数も2で動作させています。

CloudRoboticsFX2_1

1つのパーティションを指定してみると、3つのサービスレプリカが動作しているのが分かります。Node の表示がありますが、これは  Service Fabric クラスターの動作する仮想マシン相当です。Service Fabric は、Windows Server コンテナーを利用し、その中にサービスを配置しているので、非常に高密度なサービスとなります。6つもサービスレプリカがあっても、リソース利用量は少なく、そのオーバーヘッドは非常に小さいのです。

CloudRoboticsFX2_2

Node 4 を指定して (先程のパーティションのプライマリ=Node 4)、以下の Action からNode の Deactivate をすることで、Node をダウンさせることが可能なのです。フェールオーバーのテストがしっかり出来ます。

CloudRoboticsFX2_3

以下は、プライマリが Node 0 に移った結果を示しています。この間、3~4 秒くらいでしょうか。

CloudRoboticsFX2_4

いやぁ、素晴らしい!

コメントを残す