Remote Rendering-munkamenetek

Az Azure Remote Renderingben (ARR) a munkamenet kulcsfontosságú fogalom. Ez a cikk bemutatja, hogy pontosan mi is az a munkamenet.

Áttekintés

Az Azure Remote Rendering az összetett renderelési feladatok felhőbe való kiszervezésével működik. Ezeket a renderelési feladatokat egyetlen kiszolgáló sem tudja elvégezni, mivel a felhőkiszolgálók többsége nem rendelkezik GPU-kkal. Az érintett adatok mennyisége és az eredmények interaktív képkockasebességgel történő előállításának kemény követelménye miatt az a felelősség, hogy melyik kiszolgáló kezeli a felhasználói kéréseket, nem lehet menet közben átadni egy másik gépnek, ami a webes forgalom gyakoribbsága miatt lehetséges.

Ez azt jelenti, hogy az Azure Remote Rendering használatakor a szükséges hardverképességekkel rendelkező felhőkiszolgálót kizárólag a renderelési kérelmek kezeléséhez kell lefoglalni. A munkamenetek a kiszolgálóval való interakcióval kapcsolatos mindenre vonatkoznak. A rendszer azzal a kezdeti kéréssel kezdődik, hogy lefoglaljon (bérletet) egy gép számára, a modellek betöltésére és manipulálására vonatkozó parancsokkal folytatódik, és a bérlet a felhőkiszolgálón való kiadásával fejeződik be.

Munkamenetek kezelése

A munkamenetek többféleképpen kezelhetők és kezelhetők. A munkamenetek létrehozásának, frissítésének és leállításának nyelvfüggetlen módja a munkamenet-kezelés REST API-ja. C# és C++ esetén ezek a műveletek az osztályokon RemoteRenderingClient és RenderingSessiona . A Unity-alkalmazásokhoz az összetevő további segédprogram-függvényeket is biztosít ARRServiceUnity .

Ha aktív munkamenethez csatlakozik, a modellek betöltése és a jelenet kezelése az RenderingSession osztályon keresztül lesz közzétéve.

Több munkamenet egyidejű kezelése

Egy eszközről nem lehet teljes mértékben csatlakozni több munkamenethez. Egyetlen alkalmazásból azonban tetszőleges számú munkamenetet hozhat létre, figyelhet meg és állíthat le. Mindaddig, amíg az alkalmazásnak nem célja, hogy valaha is csatlakozzon egy munkamenethez, nem kell olyan eszközön futnia, mint a HoloLens 2. Egy ilyen implementáció használati esete lehet, ha egy központi mechanizmuson keresztül szeretné vezérelni a munkameneteket. Létrehozhat például egy webalkalmazást, ahová több táblagép és HoloLens-eszköz is bejelentkezhet. Ezután az alkalmazás megjeleníthet beállításokat a táblagépeken, például hogy melyik CAD-modellt szeretné megjeleníteni. Ha egy felhasználó kiválaszt egy lehetőséget, a rendszer ezt az információt az összes HoloLens-eszközzel közli egy megosztott felület létrehozásához.

Munkamenet-fázisok

Minden munkamenet több fázison megy keresztül.

Munkamenet indítása

Amikor az ARR-t egy új munkamenet létrehozására kéri fel, az első lépés egy munkamenet UUID-jának visszaadása. Ez az UUID lehetővé teszi a munkamenet adatainak lekérdezését. Az UUID és a munkamenet néhány alapvető információja 30 napig megmarad, így a munkamenet leállítása után is lekérdezheti ezeket az információkat. Ekkor a munkamenet állapota kezdőként lesz jelentve.

Ezután az Azure Remote Rendering megpróbál megkeresni egy kiszolgálót, amely képes üzemeltetni a munkamenetet. A keresésnek két paramétere van. Először is csak a régióban lévő kiszolgálókat foglalja le. Ennek az az oka, hogy a régiók közötti hálózati késés túl magas lehet a tisztességes felhasználói élmény biztosításához. A második tényező a megadott kívánt méret . Minden régióban korlátozott számú kiszolgáló teljesítheti a standard vagy prémiumszintű méretkérelmet. Következésképpen, ha a kért méretű összes kiszolgáló jelenleg használatban van a régióban, a munkamenet létrehozása sikertelen lesz. A hiba oka lekérdezhető.

Fontos

Ha standard kiszolgálóméretet kér, és a kérés a nagy igény miatt meghiúsul, az nem jelenti azt, hogy a prémium szintű kiszolgáló kérése is meghiúsul. Így ha ez egy lehetőség az Ön számára, megpróbálhatja visszaesni a prémium szintű kiszolgálóméretre.

Amikor a szolgáltatás talál egy megfelelő kiszolgálót, a megfelelő virtuális gépet (VM-et) kell rámásolnia, hogy Azure Remote Rendering-gazdagépgé alakíthassa. Ez a folyamat több percig is eltarthat. Ezt követően a virtuális gép elindul, és a munkamenet állapota készre vált.

Ezen a ponton a kiszolgáló kizárólag a bemenetre vár. Ez az a pont is, ahonnan a szolgáltatásért díjat kell fizetnie.

Csatlakozás munkamenetbe

Miután elkészült a munkamenet, csatlakozhat hozzá. Csatlakozás közben az eszköz parancsokat küldhet a modellek betöltéséhez és módosításához. Minden ARR-gazdagép egyszerre csak egy ügyféleszközt szolgál ki, így amikor egy ügyfél csatlakozik egy munkamenethez, kizárólagos vezérléssel rendelkezik a renderelt tartalom felett. Ez azt is jelenti, hogy a renderelési teljesítmény soha nem változik a vezérlőn kívüli okok miatt.

Fontos

Bár csak egy ügyfél tud csatlakozni egy munkamenethez, a munkamenetekkel kapcsolatos alapvető információk, például az aktuális állapotuk, összekapcsolás nélkül lekérdezhetők.

Amíg egy eszköz munkamenethez csatlakozik, más eszközök csatlakozási kísérletei sikertelenek lesznek. Ha azonban a csatlakoztatott eszköz önként vagy valamilyen hiba miatt megszakad, a munkamenet egy másik kapcsolatkérést fogad el. Az összes korábbi állapot (betöltött modellek és ilyenek) elvetése úgy történik, hogy a következő csatlakozó eszköz tiszta lappal rendelkezik. Így a munkamenetek többször, különböző eszközökkel újra felhasználhatók, és a munkamenet indítási többletterhelése a legtöbb esetben elrejthető a végfelhasználó elől.

Fontos

A távoli kiszolgáló soha nem módosítja az ügyféloldali adatok állapotát. Az ügyfélalkalmazásnak minden adatmutációt (például átalakításfrissítéseket és betöltési kérelmeket) végre kell hajtania. Minden művelet azonnal frissíti az ügyfél állapotát.

Munkamenet vége

Amikor új munkamenetet kér, meg kell adnia a maximális bérletidőt, általában egy és nyolc óra között. Ez az az időtartam, amely alatt a gazdagép elfogadja a bemenetet.

A munkamenetek befejezésének két rendszeres oka van. Vagy manuálisan kéri a munkamenet leállítását, vagy a maximális bérletidő lejár. Mindkét esetben a gazdagéphez való aktív kapcsolat azonnal bezárul, és a szolgáltatás leáll az adott kiszolgálón. A kiszolgáló ezután vissza lesz adva az Azure-készlethez, és más célokra is kérhet. A munkamenet leállítása nem vonható vissza vagy nem szakítható meg. A munkamenet állapotának lekérése egy leállított munkameneten leállt vagy Lejárt értéket ad vissza attól függően, hogy manuálisan volt-e leállítva, vagy hogy elérte-e a maximális bérletidőt.

Előfordulhat, hogy valamilyen hiba miatt egy munkamenet is leáll.

Minden esetben a munkamenet leállítása után a rendszer nem számláz tovább.

Figyelmeztetés:

Az, hogy csatlakozik-e egy munkamenethez, és mennyi ideig, nem befolyásolja a számlázást. A szolgáltatásért fizetendő összeg a munkamenet időtartamától függ, ami azt jelenti, hogy a kiszolgáló kizárólag Az Ön számára van fenntartva, valamint a kért hardverfunkcióktól (a lefoglalt mérettől). Ha elindít egy munkamenetet, csatlakozzon öt percig, és ne állítsa le a munkamenetet, hogy az a bérlet lejáratáig fusson, a teljes munkamenet-bérletért díjat számítunk fel. Ezzel szemben a bérlet maximális időtartama többnyire biztonsági háló. Nem számít, hogy nyolc órás bérletidővel kér-e munkamenetet, majd csak öt percig használja, ha később manuálisan állítja le a munkamenetet.

Munkamenet bérletidejének meghosszabbítása

Az aktív munkamenetek bérleti idejét meghosszabbíthatja, ha kiderül, hogy hosszabb időre van szüksége.

Mintakód

Az alábbi kód egy munkamenet indításának egyszerű implementációját mutatja be, várakozás a kész állapotra, a csatlakozásra, majd a leválasztásra és a leállításra.

RemoteRenderingInitialization init = new RemoteRenderingInitialization();
// fill out RemoteRenderingInitialization parameters...

RemoteManagerStatic.StartupRemoteRendering(init);

SessionConfiguration sessionConfig = new SessionConfiguration();
// fill out sessionConfig details...

RemoteRenderingClient client = new RemoteRenderingClient(sessionConfig);

RenderingSessionCreationOptions rendererOptions = new RenderingSessionCreationOptions();
// fill out rendererOptions...

CreateRenderingSessionResult result = await client.CreateNewRenderingSessionAsync(rendererOptions);

RenderingSession session = result.Session;
RenderingSessionProperties sessionProperties;
while (true)
{
    var propertiesResult = await session.GetPropertiesAsync();
    sessionProperties = propertiesResult.SessionProperties;
    if (sessionProperties.Status != RenderingSessionStatus.Starting &&
        sessionProperties.Status != RenderingSessionStatus.Unknown)
    {
        break;
    }
    // REST calls must not be issued too frequently, otherwise the server returns failure code 429 ("too many requests"). So we insert the recommended delay of 10s
    await Task.Delay(TimeSpan.FromSeconds(10));
}

if (sessionProperties.Status != RenderingSessionStatus.Ready)
{
    // Do some error handling and either terminate or retry.
}

// Connect to server
ConnectionStatus connectStatus = await session.ConnectAsync(new RendererInitOptions());

// Connected!

while (...)
{
    // per frame update

    session.Connection.Update();
}

// Disconnect
session.Disconnect();

// stop the session
await session.StopAsync();

// shut down the remote rendering SDK
RemoteManagerStatic.ShutdownRemoteRendering();

A kódból több RemoteRenderingClient példány RenderingSession is karbantartható, módosítható és lekérdezhető. Egyszerre azonban csak egyetlen eszköz kapcsolódhat egy RenderingSession adott eszközhöz.

A virtuális gép élettartama nincs a példányhoz vagy a RemoteRenderingClientRenderingSession példányhoz kötve. RenderingSession.StopAsync munkamenet leállításához kell meghívni.

Az állandó munkamenet-azonosító lekérdezhető RenderingSession.SessionUuid() helyileg, és gyorsítótárazható. Ezzel az azonosítóval egy alkalmazás meghívhatja RemoteRenderingClient.OpenRenderingSessionAsync a munkamenethez való kötést.

Ha RenderingSession.IsConnected igaz, RenderingSession.Connection visszaad egy példánytRenderingConnection, amely tartalmazza a modellek betöltéséhez, az entitások manipulálásához és a renderelt jelenettel kapcsolatos információk lekérdezéséhez szükséges függvényeket.

API-dokumentáció

Következő lépések