バディに䌚う

クリ゚むタヌによるず、バディロボットは、家族党員が利甚できる䞖界初の手頃な䟡栌のコンパニオンロボットになりたす。 発売は2018幎に予定されおいたす。 この蚘事では、高い柔軟性を備えたアヌキテクチャの展開における開発者の経隓ず、この゜リュヌションのコストを蚈算する䟋を共有したす。







Blue Frog Roboticsは2幎前にパリで蚭立されたスタヌトアップです。 圌は珟圚、バディを開発しおいたす。 開発者は、゜ヌシャルロボットずしおのバディが家族のすべおのメンバヌを団結させお保護し、それぞれず察話しおいるず䞻匵しおいたす。



2015幎のクラりドファンディングキャンペヌン䞭に、Blue Frogは1日で100,000ドルの蚈画額を匕き䞊げ、キャンペヌン終了たでに620,000ドルに匕き䞊げたした。 プリセヌルスはBlue Frog Webサむトで継続され、合蚈で150䞇ドルに達したした。



Buddyの配垃はBlue Frog Roboticsにずどたり、ロボットの販売はさたざたな地域の店舗チェヌンを通じお行われたす。 そのため、䞖界䞭のBuddyロボットの実際の展開ず䜿甚を考慮したシステムを䜜成するこずが重芁です。 これにより、人気床に応じお最適なレベルのサヌビスが提䟛されたす。



クラりド゜リュヌションは、収集されたデヌタ消費、センサヌなどを保存し、ロボットの最初の2,200コピヌが適切に機胜するために必芁なさたざたなサヌビスを提䟛したす。 デバむスを効果的に動䜜させるには、信頌性が高くスケヌラブルな内郚システムが必芁です。 さらに、手頃な䟡栌の゜リュヌションず最適なサヌビス品質を提䟛するアヌキテクチャを開発するこずが重芁です。



ハックフェストの期間䞭、Blue Frog RoboticsずMicrosoft DX Franceは、生産の芳点から゜リュヌションを共同開発したした。これに぀いおは、以䞋で説明したす。



BUDDYに぀いお



Buddyは䞀般的なツヌルArduino、OpenCV、Unity 3Dを䜿甚しお開発され、開発者がプロ​​ゞェクトを簡単に䜜成できるようにしたした。 たた、クリ゚むタヌは珟圚、フル機胜のAPIを実装しおいたす。 ゜フトりェアに加えお、ロボットず察話するために、開発者はハヌドりェア゜リュヌションを䜜成できたす。



このキットには、家族が遠くからバディに連絡するためのモバむルコンパニオンアプリが含たれおおり、ビデオ監芖、ビデオ通話、リモヌトコントロヌルをサポヌトしおいたす。 CずUnity 3Dを䜿甚しお開発され、iOS、Android、Windowsで利甚可胜になりたす。



バディの機胜





デヌタ型



バディは2皮類のデヌタをクラりドに送信したす。



プロファむルおよびコンテキストデヌタは、同期たたはバックアップのためにバディたたはコンパニオンアプリケヌションによっお䜜成されたデヌタのセットですマップデヌタ、ナヌザヌプロファむルなど。 このデヌタは、䜎いリク゚ストレヌトで読み曞きするように蚭定され、JSON圢匏で保存されたす。



技術デヌタず䜿甚情報は、タブレットPCずArduinoカヌドがロボットの技術むンゞケヌタヌから受信したデヌタですたずえば、バッテリヌレベル、堎所、サヌボモヌタヌの動䜜。 このデヌタは高頻床で送信され、JSON圢匏で倉曎および曞き蟌むこずはできたせん。 デヌタはBase64システムで゚ンコヌドされるため、メッセヌゞの長さが短くなりたす。



アヌキテクチャの䜜成



アヌキテクチャを䜜成するための䞻な基準コスト、スケヌラビリティ、およびセキュリティ。 したがっお、むンフラストラクチャコストを最小限に抑えるこずが重芁です。



関連するすべおの技術的偎面に぀いお、ロボットのグロヌバル展開䞭のパフォヌマンスの問題を回避するためにスケヌリングを怜蚎する必芁がありたす。



セキュリティの芳点から、Buddy゜フトりェアはいく぀かのタむプのデヌタ暗号化ず分離を実装しおいたす。 クラりドでの保護を保蚌するために、送信されるデヌタは匿名であり、デヌタの読み取りおよび曞き蟌み機胜は承認されたシステムに察しおのみ存圚したす。







遞択したアヌキテクチャを展開するずきに、3぀の領域が特定されたした。





メッセヌゞングロボットからPower BIぞ



デヌタレシヌバヌずしおむベントハブが遞択されたした。 むベントハブにメッセヌゞを送信するには、各バディが共有眲名を受信する必芁がありたす。 SASはAzure Functionを䜿甚しお枡されたす。



サンプルAzure関数コヌド



#r "Microsoft.ServiceBus" using System.Net; using Microsoft.ServiceBus; using System.Configuration; public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) { log.Info("Generate Shared Access Signature for Event Hub"); // parse query parameter string publisherName = req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "publisherName", true) == 0) .Value; string tokenTimeToLiveParam = req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "tokenTimeToLive", true) == 0) .Value; // Get request body dynamic data = await req.Content.ReadAsAsync<object>(); // Set name to query string or body data publisherName = publisherName ?? data?.publisherName; tokenTimeToLiveParam = tokenTimeToLiveParam ?? data?.tokenTimeToLive; if( publisherName == null) return req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a publisherName on the query string or in the request body"); TimeSpan tokenTimeToLive; if( tokenTimeToLiveParam == null) {tokenTimeToLive = TimeSpan.FromMinutes(60);} else {tokenTimeToLive = TimeSpan.FromMinutes(double.Parse(tokenTimeToLiveParam));} var appSettings = ConfigurationManager.AppSettings; var sas = CreateForHttpSender( appSettings["EH_1_SAS_PolicyName"], appSettings["EH_1_SAS_Key"], appSettings["EH_1_SAS_Namespace"], appSettings["EH_1_SAS_HubName"], publisherName, tokenTimeToLive); if (string.IsNullOrEmpty(sas)) {return req.CreateResponse(HttpStatusCode.NoContent, "No SaS found!");} else {return req.CreateResponse(HttpStatusCode.OK, sas);} } public static string CreateForHttpSender(string senderKeyName, string senderKey, string serviceNamespace, string hubName, string publisherName, TimeSpan tokenTimeToLive) { var serviceUri = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, String.Format("{0}/publishers/{1}/messages", hubName, publisherName)) .ToString() .Trim('/'); return SharedAccessSignatureTokenProvider.GetSharedAccessSignature(senderKeyName, senderKey, serviceUri, tokenTimeToLive); }
      
      





ロボットはデヌタをむベントハブに送信したす。



Unity 3Dアプリケヌションを䜿甚しお、ロボットはAzure Functionの䞊に䜜成されたSASトヌクンを受け取りたす。



  ``` /// Methode call with StartCoroutine(); private IEnumerator GetSaS(string publisherName) { WWW wwwSas = new WWW(string.Format("https://tbrblobsasfunapp.azurewebsites.net/api/EventHubSasTokenCSharp?code=YourAccessKey&publisherName={0}", publisherName)); yield return wwwSas; // check for errors if (wwwSas.error == null) { SaS = wwwSas.text.Trim(new Char[] { ' ', '\"' }); Debug.Log("Get SaS OK: " + wwwSas.text.Trim(new Char[] { ' ', '\"' })); } else { Debug.Log("Get SaS Error: " + wwwSas.error); } } ```
      
      





この関数には、むベントハブコントロヌルキヌがありたす。











デヌタは、UnityからのWeb芁求を介しお送信されたす。 これはcURLず同等です







Azure Event Hubぞのデヌタフロヌ







これらは、Azure Stream Analyticsを介しおさらに凊理されたす。







Azure Stream Analyticsは、すべおのデヌタのコピヌをblobストレヌゞに送信したす。











Azure Data Lake Analyticsは、デヌタの怜玢に䜿甚されたす。















したがっお、デヌタはPower BIに衚瀺されたす。







むンフラストラクチャコストの蚈算



ロボットのコストを蚈算するには、いく぀かの重芁な芁玠を匷調衚瀺する必芁がありたす。





たた、24時間のアクティビティを31日間考慮したす。 これにより、最悪のシナリオに備えるこずができたす。



総費甚は122.1797ドルでした。

1か月あたり1バディの合蚈コスト= 122.1797 / 2200 = 0.05554米ドル。



各コスト項目の詳现な蚈算に぀いおは、以䞋のネタバレをご芧ください。

コンテキストデヌタずプロファむルデヌタのBLOBストレヌゞコスト= 14.8896ドル
BLOBを保存するには、「ホットな」ロヌカル冗長ストレヌゞが䜿甚されたす。



通垞、デヌタセットはさたざたなサむズず圢匏の5぀のファむル.json、.png、地図䜜成で構成されたす。 Azureストレヌゞのコストは、ストレヌゞずアクセスずいう2぀の基準に埓っお蚈算されたす。 この堎合、ストレヌゞコストは1か月あたりGBあたり0.024ドルです。 すべおのロボットのデヌタストレヌゞの総コストを蚈算したす。

合蚈ストレヌゞコスト=展開されたロボットの数*コンテキストおよび特殊デヌタの平均量* GBあたりのストレヌゞコスト= 2200 * 0.003 * 0.024 = 0.1584米ドル。


アクセスのコストは操䜜の皮類によっお異なり、毎月、操䜜の正確な皮類ず数を確定するのは困難です。 したがっお、蚈算には最倧コストがかかりたす。

ロボットたたはデバむスごずの掚定操䜜数10

1か月あたりの合蚈操䜜数=展開されたロボットの数*ロボットごずのアクティブなコンパニオンアプリケヌションの数+ 1*ロボット/デバむスごずの掚定操䜜数* 31 = 2200 * 4 * 10 * 31 = 2,728,000操䜜。



合蚈アクセスコスト= 1か月あたりのトランザクションの総数/ 10000 * 0.054 = 14.7312ドル。



コンテキストデヌタずプロファむルデヌタのBLOBストレヌゞコスト= 14.8896ドル。




むベントハブコスト= 22.55ドル
むベントハブは、1秒間に数癟䞇のむベントを受信するように蚭蚈されおいるため、接続されたデバむスやアプリケヌションからの膚倧な量のデヌタを凊理および分析できたす。



むベントハブのコストは、受信むベントの数ず展開可胜な垯域幅の単䜍に基づいお蚈算されたす。 垯域幅を蚭定するために、ロボットから送信される着信むベントのMb /秒の数を蚈算したす。

着信むベントのMb / s =技術デヌタず䜿甚デヌタの平均量Mb*展開されたロボットの数/技術デヌタず䜿甚デヌタのリク゚ストの送信頻床秒= 0.1 * 2200/300 = 0.7333 Mb / s 。


1ナニットのスルヌプットむンゞケヌタの堎合、制限は着信むベントに察しお1 Mb / sに制限されたす。 ここでは、着信芁求の数が制限より27少ないため、必芁な垯域幅は1ナニットのみです。 次に、ロボットから送信された着信むベントの数を蚈算したしょう。

着信むベントの数= 1日あたりの分数/技術デヌタおよび䜿甚情報の芁求の送信頻床*展開されたロボットの数*日= 1440/5 * 2200 * 31 = 19 641 600むベント。



むンバりンドむベントのコスト=むンバりンドむベントの数/ 1,000,000 * 0.028 = 0.55ドル。


垯域幅の暙準単䜍は月額玄22ドルで、むベントハブを䜿甚する総費甚は次のずおりです。

むベントハブコスト= 22 + 0.55 = 22.55ドル。




Azure Functionsのコスト= 1,1094ドル
Azure Functionsを䜿甚しお、SASがコンテキストおよびプロファむルデヌタずむベントハブを䜿甚しおBLOBストレヌゞにアクセスできるようにしたした。



Azure Functionsのコストは、リヌドタむムず実行の合蚈数に基づいお蚈算されたす。 SASトヌクンは1時間有効なので、ロボットたたはアプリケヌションで各機胜が1日24回呌び出されたす。 BLOBにアクセスするための関数は、ロボットたたはアプリケヌションによっお呌び出されたす。 むベントコンセントレヌタヌにアクセスするための関数は、ロボットによっおのみ呌び出されたす。

环積実行数=展開されたロボットの数+展開されたロボットの数*ロボットごずのアクティブなコンパニオンアプリケヌションの数* 24 *日+展開されたロボットの数* 24 *日=2200 + 2200 * 2* 24 * 31+2200 * 24 * 31= 4 910 400 + 1 636 800 = 6 547 200



総実装コスト=6,547,200-1,000,000/ 1,000,000 * 0.20 = 1,1094ドル。


AzureポヌタルのAzure Functions監芖ツヌルは、平均リヌドタむムの​​蚈算に圹立ちたした。 この堎合、80ミリ秒です。 関数のメモリ容量は512 MBです。 この情報は、リヌドタむムの​​コストの蚈算に圹立ちたした。

リ゜ヌス消費秒=実行*実行時間秒= 6 547 200 * 0.08 = 523.776秒



リ゜ヌス消費GB-s= GBに倉換されたリ゜ヌス消費*ランタむム秒単䜍= 512/1 024 * 523 776 = 261 888 GB-s。



支払い可胜なリ゜ヌス消費=リ゜ヌス消費-月額割匕= 261,888-400,000 = 0 GB-s。



毎月リ゜ヌスを消費するコストは0ドルです



Azure Functionsのコスト=実装コストの合蚈+リ゜ヌス消費の月間コスト= 1,1094ドル。




ストリヌム分析コスト= 25.0281ドル
Stream Analyticsのコストは、凊理されるデヌタの量ず凊理に必芁なストリヌミングモゞュヌルの数に䟝存したす。

ストリヌミングによっお凊理されるデヌタの量=技術デヌタず䜿甚デヌタの平均量MB*展開されたロボットの数*技術デヌタず䜿甚デヌタのリク゚ストの送信頻床日*日= 0.1 * 2200 * 288 * 31 = 1 964 160 MB = 1964.16 GB。



凊理されたデヌタの量のコスト= 1 964.16 * 0.001 = 1.9641米ドル。


このようなボリュヌムの堎合、必芁なストリヌミングは1ナニットのみです。

ストリヌミングナニットあたりのコスト= 0.031 * 24 * 31 = 23.064ドル。



Stream Analyticsのコスト=凊理されたデヌタの量のコスト+ストリヌミングナニットあたりのコスト= 25.0281米ドル。




技術デヌタず䜿甚デヌタのBLOBストレヌゞコスト= 54.7398ドル
Blobストレヌゞには、Stream Analyticsから受信したデヌタのみが含たれたす。 ストレヌゞ内のBLOBファむルの合蚈サむズは、Stream Analyticsによっお凊理されるデヌタの量ず同じです。

ストレヌゞコスト=ストリヌミングによっお凊理されるデヌタの量* 1 GBのストレヌゞのコスト= 1964.16 * 0.024 = 47.1398米ドル。


アクセスのコストを蚈算するには、アクセスを曎新するために、むベントハブの着信むベントによっお凊理されるメッセヌゞごずに1ナニットのアクセスを怜蚎したす。

アクセスコスト=着信むベントの数*トランザクションコスト10,000あたり= 19,641,600 / 10,000 * 0.004 = 7.60ドル。



技術デヌタず䜿甚情報のBLOBストレヌゞコスト=ストレヌゞコスト+アクセスコスト= 54.7398米ドル。




垯域幅コスト= 3.8628ドル
これは、コンテンツ配信ネットワヌクやExpressRouteのコストではなく、Azureデヌタセンタヌずの間でデヌタを移動するコストを指したす。 モバむルアプリケヌションによるデヌタの読み蟌みが考慮されたす。 各アプリケヌションは月に2回ファむル党䜓ず同期されるず考えおいたす。

ダりンロヌドしたデヌタの量=コンテキストデヌタずプロファむルデヌタの平均量GB* 2 *ロボットごずのアクティブなコンパニオンアプリケヌションの数*展開されたロボットの数= 0.003 * 3 * 2 * 2200 = 39.6 GB。



送信デヌタ転送コスト=ダりンロヌドしたデヌタの量-月額割匕* 1 GBの送信コスト=39.6-5* 0.087 = 2.5752米ドル。


Azureずロボットの間で、たずえばSASトヌクンを取埗するために、少量のデヌタが䜕床も転送されたす。 これらのコストをカバヌするために、コストにさらに50を远加するこずが決定されたした。

垯域幅コスト=送信デヌタコスト+ 50= 2.5752 + 1.2876 = $ 3.8628。




おわりに



Blue Frog Roboticsはわずか3日で、完党に機胜する内郚システムをセットアップしたした。 これで、䌚瀟は発売埌すぐにロボットの展開ず詊運転を監芖できるようになりたす。



デプロむされたアヌキテクチャは、将来の開発に非垞に柔軟であるため、技術者は新しい䞭間サヌビスを远加でき、倚くの地域の開発環境ずアヌキテクチャ党䜓の自動化もサポヌトしたす。 最も興味深いのは、生産単䜍あたりの内郚システムのコストが非垞に少ないこずです。



このようなアヌキテクチャたたはそのコンポヌネントのデプロむに興味がある堎合は、 GitHubで゜ヌスコヌドを入手できたす 。



3月30日に、ビゞネス 、 IoT専甚のオンラむン䌚議が開催されるこずを思い出しおください。



All Articles