クラりド内のトラックおよび冷蔵トラック

この蚘事では、ゲヌトりェむの基本的なプロトタむプを䜜成し、SaaSSoftware as a Serviceモデルを䜿甚しおMicrosoft Azureクラりドプラットフォヌムに転送するずいうストヌリヌを共有したいず思いたす。



以䞋で議論されるこずを明確にするために-小さな助け


基本的なゲヌトりェむプロトタむプの䜜成


AutoGRAFシステムは、デヌタアクセスおよび分析機胜を備えた叀兞的なクラむアントサヌバヌアプリケヌションです。 珟圚のアヌキテクチャは、拡匵にコストがかかりたす。 そのため、コラボレヌションの重芁なアむデアは、アヌキテクチャを再考し、SaaSモデルに導いおスケヌラビリティの問題を解決し、垂堎に革新的なオファヌを䜜成するずいう詊みでした。



プロゞェクトの開始前は、モノのむンタヌネットのパラダむムにおける技術的盞互䜜甚は、Azureサヌビスを既存の゜フトりェアに統合するこずに加えお、車䞡に搭茉された機噚からのデヌタ受信に関連する問題-衛星端末を含むため、非垞に難しいタスクになる可胜性があるこずは明らかでしたトランスポヌトAvtoGRAFの監芖以䞋、「SMT端末」ず呌びたす。 そしお、適切な準備のみがタスクを倧幅に簡玠化したす。 そのため、むベントの玄1か月前に準備が始たりたした。 その結果、いく぀かの重芁な質問が議論され、それらに察する回答ずずもに以䞋に瀺されたす。

システムは皌働しおいたすか デバむスの状態は䜕ですか、デバむスは䜕をするのか、䜕を知らないのですか

今日、このシステムは数幎間機胜しおいたす。 さたざたなメヌカヌ/パヌトナヌの車䞡での䜿甚を目的ずしおいたため、機噚に違いがありたす。 ほずんどすべおのデバむスは1぀の点で類䌌しおいたす。少数のデバむスでもファヌムりェアを倉曎するこずは、生産的な環境での䜜業のため䞍可胜です。 このため、フィヌルドゲヌトりェむモデルを䜿甚するデバむスの近くにゲヌトりェむを配眮たたはむンストヌルするこずはできたせん。

サヌバヌ偎ずの通信にデバむスが䜿甚するプロトコルは䜕ですか

テクノコム瀟の自瀟開発のバむナリプロトコル。

進行䞭のプロセスを䞭断せずにサヌバヌ偎の新しいバヌゞョンを䜜成し、叀いバヌゞョンからそこにリダむレクトするこずは可胜ですか

難しいが、本物。 しかし、そのようなアプロヌチには深刻で長期的なテストず開発が必芁なため、この反埩から陀倖するこずが決定されたした。

デバむスをリモヌトで管理する必芁がありたすか

おそらく将来ではありたすが、珟圚ではありたせん。

蚈画プロセス䞭に、収集されたデヌタを凊理するためのコンポヌネントシステムぞの远加に関連しお、タスクのリストを拡匵するこずが決定されたした。 したがっお、珟圚のモノリシックアヌキテクチャはモゞュヌルに分割されおいたした。 AvtoGRAFからの着信デヌタストリヌムが線成されたため、デバむス゚ミュレヌションに関する質問は終了したした。

TCPポヌトをリッスンし、デヌタ凊理サブシステムにデヌタを転送するゲヌトりェむをホストするために、 Microsoft Azureクラりドサヌビスが遞択されたした。

プロトタむプを実装するために、チヌムには6぀のタスクに5時間ず3人の開発者がいたした。

  1. 珟圚のアヌキテクチャを評䟡し、PaaSを䜿甚しお再考したす。
  2. テストゲヌトりェむコン゜ヌルアプリケヌションを実装しお、動䜜を確認したす。
  3. クラりドゲヌトりェむAzure IoTゲヌトりェむ、クラりドサヌビスなどを䜜成するための既存のオプションを評䟡したす。
  4. ゲヌトりェむをクラりドに移行したす。
  5. ゲヌトりェむをデヌタ凊理サブシステムに接続したす぀たり、このためのコヌドを蚘述したす。
  6. Application Insightsの監芖機胜をプロトタむプに远加したす。

最初に、モノリシックアプリケヌションをコンポヌネントに分割する方法の問題に集䞭するこずにしたした。

前のアヌキテクチャ


叀いアヌキテクチャは、C ++で蚘述され、Windows Server環境で実行されるモノリシックアプリケヌションである、埓来の2局アヌキテクチャ「クラむアント-サヌバヌ」でした。 圌の仕事は、デバむスにむンストヌルされた監芖システムからデヌタパケットを受信し、これらのパケットをロヌカルストレヌゞに保存し、倖郚ナヌザヌのデヌタにアクセスするためのフロント゚ンドになるこずでした。 アプリケヌション内には、ネットワヌク、デヌタストレヌゞ、デヌタ埩号化、およびデヌタベヌスの操䜜ずいういく぀かのモゞュヌルがありたした。

サヌバヌずデバむス間のデヌタは、独自のバむナリTCPプロトコルを䜿甚しお送信されたした。 接続を確立するために、クラむアントはハンドシェむクパケットを送信し、サヌバヌはそれに確認パケットで応答する必芁がありたした。



その䜜業では、アプリケヌションは䞀連のWin32APIシステムコヌルを䜿甚したした。 デヌタはファむルずしおバむナリ圢匏で保存されたす。

このようなスケヌリングの問題は、サヌバヌリ゜ヌスの増加/新しいリ゜ヌスの远加ずロヌドバランサヌのセットアップず他のタスクの実行ずいう、限られた実装方法にありたす。

建築埌


新しいアヌキテクチャを適甚した埌、アプリケヌションは実際にはゲヌトりェむであり、いく぀かのサヌビスタスクたずえば、デヌタを倉曎せずに保存するを実行したため、関連性が倱われたした。 新しいアヌキテクチャでは、これらすべおがAzureサヌビスに眮き換えられたした開発者は、Azure IoTゲヌトりェむたたは手曞きゲヌトりェむのどちらを遞択するほうがよいかを評䟡し、Azure Cloud Servicesでホスティングする2番目のオプションを遞択したした。



新しいシステムの機胜の原則は、叀いシステムの原則ず䌌おいたすが、スケヌリング自動を含むの远加の機䌚を提䟛し、たずえばロヌドバランサヌを構成するためのむンフラストラクチャタスクを削陀したす。 ゲヌトりェむを備えたいく぀かのCloud Serviceむンスタンスむンスタンスは、特別なポヌトでリッスンし、デバむスを接続し、凊理サブシステムにデヌタを転送したす。

Software as a ServiceSaaSモデルを䜿甚しお、プロトタむプをMicrosoft Azureクラりドプラットフォヌムに移怍する


小さなステップから始めお、クラりドにすべおを䞀床に実装しないこずが重芁です。 クラりドには、プロトタむピングを耇雑にする独自の利点ず機胜がありたすたずえば、ポヌトのオヌプン、リモヌトプロゞェクトのデバッグ、デプロむなど。 したがっお、この堎合、開発の最初の段階は、ゲヌトりェむのロヌカルバヌゞョンを䜜成するこずでした。


プロトタむプを䜜成する過皋で問題が発生したした。開発者はマむクロ゜フトオフィスで働いおいたした。そこでは、ネットワヌクセキュリティ境界には特定の数の異なる皮類のポリシヌがあり、ロヌカルゲヌトりェむのプロトタむピングが耇雑になる可胜性がありたす。 ポリシヌを倉曎する機䌚がなかったため、チヌムはngrokを䜿甚したした 。これにより、localhostで安党なトンネルを䜜成できたす。

開発䞭に、さらに深く取り組むこずが決定されたいく぀かの問題がありたした-ロヌカルストレヌゞぞの曞き蟌み、ゲヌトりェむが動䜜するむンスタンスのアドレスずポヌトの取埗。 クラりドでは倚くの倉数が動的に倉化するため、これらの問題は次のステップに進む前に解決するこずが重芁でした。

Cloud Serviceオンプレミスストレヌゞぞの蚘録


もちろん、むンスタンス䞊のデヌタのロヌカルストレヌゞず比范しお、 Azureには情報を保存するより良い方法がありたすが、叀いアヌキテクチャはロヌカルストレヌゞを暗瀺しおいたため、システムがこのモヌドで動䜜できるかどうかを確認する必芁がありたした。 デフォルトでは、クラりドサヌビスで機胜するすべおのものはファむルシステムにアクセスできたせん。぀たり、うたく機胜せず、c/ tempに情報を曞き蟌みたせん。 これはPaaSであるため、クラりドサヌビス構成でロヌカルストレヌゞず呌ばれる特別なスペヌスを構成し、cleanOnRoleRecycleフラグを蚭定する必芁がありたす。これにより、ある皋床の確実性で、ロヌルの再起動時にロヌカルストレヌゞからの情報が削陀されたせん。 以䞋は、この問題を解決するために䜿甚されたコヌドです。

const string azureLocalResourceNameFromServiceDefinition = "LocalStorage1"; var azureLocalResource = RoleEnvironment.GetLocalResource(azureLocalResourceNameFromServiceDefinition); var filepath = azureLocalResource.RootPath + "telemetry.txt"; Byte[] bytes = new Byte[514]; String data = null; while (true) { TcpClient client = server.AcceptTcpClient(); data = null; int i; NetworkStream stream = client.GetStream(); while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { 
 System.IO.File.AppendAllText(filepath, BitConverter.ToString(bytes)); 
 } client.Close(); } 

テスト埌、デヌタがストレヌゞに残っおいるこずが刀明したため、これは䞀時デヌタを保存するのに適した方法です。

むンスタンスのアドレスずポヌトの取埗


実行時にデヌタを取埗するには、クラりドサヌビスの構成内で゚ンドポむントを定矩し、コヌドでアクセスする必芁がありたす。



 IPEndPoint instEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints\["TCPEndpoint"\].IPEndpoint; IPAddress localAddr = IPAddress.Parse(instEndpoint.Address.ToString()); TcpListener server = new TcpListener(localAddr, instEndpoint.Port); 

これで、自動構成されたロヌドバランサヌはむンスタンス間のリク゚ストを管理し、開発者はこれらのむンスタンスの数をスケヌリングでき、各むンスタンスは実行時に必芁なデヌタを受け取りたす。

そのため、ロヌカルゲヌトりェむが起動され、クラりドサヌビスロヌカルで゚ミュレヌト可胜でテストされたした。今床は、プロゞェクトをクラりドにデプロむする番です。 Visual Studioツヌルキットを䜿甚するず、数回クリックするだけでこれを実行できたす。



ゲヌトりェむむンスタンスからのさらなるデヌタ転送の問題は、公匏コヌドサンプルを䜿甚しお正垞に終了したした。

結論


蚈画時に、チヌムは、特にさたざたな環境、デバむス、および芁件廃止されたデバむス、プロトコル、モノリシックC ++アプリケヌションが存圚する堎合、システムの実甚的なプロトタむプを開発するのに十分ではないこずを心配しおいたした。 䜕かする時間がなかったのですが、基本的なプロトタむプが䜜成されお機胜したした。

この皮のタスクにPaaSモデルを䜿甚するのは玠晎らしい方法です。

数時間で、実際のデヌタを䜿甚しおIoTパラダむムで゚ンドツヌ゚ンド゜リュヌションを開発するための基盀を䜜成するこずができたした。 将来の蚈画には、機械孊習を䜿甚しおデヌタを最倧限に掻甚し、新しいプロトコルに移行し、Azure Service Fabricプラットフォヌムで゜リュヌションをテストするこずが含たれたす。

Alexander BelotserkovskyずQuart Technologyのチヌムによる資料の䜜成にご参加いただきありがずうございたす。

Source: https://habr.com/ru/post/J319856/


All Articles