Bagikan melalui


Sesi Remote Rendering

Di Azure Remote Rendering (ARR), sesi adalah konsep utama. Artikel ini menjelaskan apa sebenarnya sesi tersebut.

Gambaran Umum

Azure Remote Rendering bekerja dengan membongkar tugas rendering yang kompleks ke cloud. Tugas rendering ini tidak dapat dipenuhi oleh sembarang server, karena sebagian besar server cloud tidak memiliki GPU. Karena jumlah data yang terlibat dan persyaratan yang sulit untuk menghasilkan hasil pada kecepatan bingkai interaktif, tanggung jawab server mana yang menangani permintaan pengguna mana juga tidak dapat diserahkan ke komputer lain saat itu juga, seperti yang mungkin dilakukan untuk yang lebih umum. lalu lintas web.

Itu berarti ketika Anda menggunakan Azure Remote Rendering, server cloud dengan kemampuan perangkat keras yang diperlukan harus dicadangkan secara eksklusif untuk menangani permintaan rendering Anda. Sesi mengacu pada segala sesuatu yang terlibat dengan interaksi bersama server ini. Dimulai dengan permintaan awal untuk memesan (menyewakan) komputer untuk Anda gunakan, dilanjutkan dengan semua perintah untuk memuat dan memanipulasi model, dan diakhiri dengan melepaskan sewa di server cloud.

Mengelola sesi

Ada beberapa cara untuk mengelola dan berinteraksi dengan sesi. Cara independen bahasa komputer untuk membuat, memperbarui, dan mematikan sesi adalah melalui REST API manajemen sesi. Di C# dan C++, operasi ini diekspos melalui kelas RemoteRenderingClient dan RenderingSession. Untuk aplikasi Unity, terdapat fungsi utilitas lebih lanjut yang disediakan oleh ARRServiceUnity komponen.

Setelah Anda tersambung ke sesi aktif, operasi seperti memuat model dan berinteraksi dengan adegan diekspos melalui kelas RenderingSession.

Mengelola beberapa sesi secara bersamaan

Tidak mungkin untuk sepenuhnya menyambungkan ke beberapa sesi dari satu perangkat. Namun, Anda dapat membuat, mengamati, dan mematikan sesi sebanyak yang Anda suka dari satu aplikasi. Selama aplikasi tidak dimaksudkan untuk tersambung ke suatu sesi, aplikasi juga tidak perlu berjalan di perangkat seperti HoloLens 2. Kasus penggunaan untuk implementasi tersebut mungkin terjadi jika Anda ingin mengontrol sesi melalui mekanisme pusat. Misalnya, seseorang dapat membuat aplikasi web, di mana beberapa tablet dan perangkat HoloLens dapat masuk. Kemudian aplikasi dapat menampilkan opsi pada tablet, seperti jenis model CAD yang akan ditampilkan. Jika pengguna membuat pilihan, informasi ini dikomunikasikan ke semua perangkat HoloLens untuk menciptakan pengalaman bersama.

Fase sesi

Setiap sesi mengalami beberapa fase.

Memulai sesi

Saat Anda meminta ARR untuk membuat sesi baru, hal pertama yang dilakukan adalah mengembalikan sesi UUID. UUID ini memungkinkan Anda untuk meminta informasi tentang sesi tersebut. UUID dan beberapa informasi dasar tentang sesi tetap ada selama 30 hari, sehingga Anda dapat melakukan kueri untuk informasi tersebut bahkan setelah sesi dihentikan. Pada titik ini, keadaan sesi akan dilaporkan sebagai Permulaan.

Selanjutnya, Azure Remote Rendering mencoba menemukan server yang dapat menghosting sesi Anda. Ada dua parameter untuk pencarian ini. Pertama, server hanya dipesan di  wilayah Anda. Itu karena latensi jaringan di seluruh wilayah mungkin terlalu tinggi untuk menjamin pengalaman yang layak. Faktor kedua adalah ukuran yang diinginkan yang Anda tentukan. Di setiap wilayah, ada sejumlah server terbatas yang dapat memenuhi permintaan ukuran Standar atau Premium. Akibatnya, jika semua server dengan ukuran yang diminta sedang digunakan di wilayah Anda, pembuatan sesi akan gagal. Alasan kegagalan dapat dilakukan kueri.

Penting

Jika Anda meminta ukuran server Standar dan permintaan gagal karena permintaan yang tinggi, itu tidak berarti bahwa permintaan server Premium juga akan gagal. Jadi, jika ini merupakan opsi, Anda dapat mencoba kembali ke ukuran server Premium.

Ketika menemukan server yang sesuai, layanan harus menyalin komputer virtual (VM) yang tepat ke dalamnya untuk mengubahnya menjadi host Azure Remote Rendering. Proses ini memakan waktu beberapa menit. Setelah itu VM di-boot dan keadaan sesi beralih ke Siap.

Pada titik ini, server secara eksklusif menunggu input Anda. Ini juga merupakan titik yang menjadi dasar tagihan Anda untuk layanan tersebut.

Menyambungkan ke sesi

Setelah sesi siap, Anda dapat menyambungkan ke sesi tersebut. Saat terhubung, perangkat dapat mengirim perintah untuk memuat dan memodifikasi model. Setiap host ARR hanya melayani satu perangkat klien pada satu waktu, jadi ketika klien tersambung ke sesi, ia memiliki kontrol eksklusif atas konten yang dirender. Juga berarti bahwa performa rendering tidak akan pernah bervariasi karena alasan di luar kendali Anda.

Penting

Meskipun hanya satu klien yang dapat tersambung ke sesi, informasi dasar tentang sesi, seperti statusnya saat ini, dapat ditanyakan tanpa tersambung.

Saat perangkat tersambung ke sesi, upaya perangkat lain untuk tersambung akan gagal. Namun, setelah koneksi perangkat terputus, baik secara sukarela atau karena beberapa jenis kegagalan, sesi akan menerima permintaan koneksi lain. Semua status sebelumnya (model dimuat dan semacamnya) dibuang sedemikian rupa sehingga perangkat penghubung berikutnya mendapatkan status yang bersih. Jadi sesi dapat digunakan kembali berkali-kali, oleh perangkat yang berbeda dan dalam banyak kasus dimungkinkan untuk menyembunyikan overhead awal sesi dari pengguna akhir.

Penting

Server jarak jauh tidak pernah mengubah status data sisi klien. Semua mutasi data (seperti pembaruan transformasi dan permintaan beban) harus dilakukan oleh aplikasi klien. Semua tindakan segera memperbarui status klien.

Akhir sesi

Saat Anda meminta sesi baru, Anda menentukan waktu sewa maksimum, biasanya dalam rentang satu hingga delapan jam. Ini adalah durasi ketika host akan menerima masukan Anda.

Ada dua alasan reguler untuk mengakhiri sesi. Pertama, Anda secara manual meminta sesi untuk dihentikan atau, kedua, waktu sewa maksimum berakhir. Dalam kedua kasus, koneksi aktif apa pun ke host langsung ditutup, dan layanan dimatikan pada server itu. Server kemudian diberikan kembali ke kumpulan Azure dan mungkin diminta untuk tujuan lain. Menghentikan sesi tidak dapat diurungkan atau dibatalkan. Melakukan kueri untuk keadaan sesi pada sesi yang dihentikan akan menampilkan Dihentikan atau Waktu Habis, bergantung pada apakah sesi ditutup secara manual atau karena waktu sewa maksimum telah tercapai.

Sesi juga dapat dihentikan karena beberapa kegagalan.

Dalam semua kasus, Anda tidak akan ditagih lebih lanjut setelah sesi dihentikan.

Peringatan

Sambungan ke sesi, dan untuk berapa lama, tidak memengaruhi tagihan Anda. Apa yang Anda bayar untuk layanan bergantung pada durasi sesi, artinya, waktu server khusus disediakan untuk Anda, dan kemampuan perangkat keras yang diminta (ukuran yang dialokasikan). Jika Anda memulai sesi, sambungkan selama lima menit dan kemudian jangan hentikan sesi, sehingga sesi terus berjalan sampai masa sewanya berakhir, Anda akan ditagih untuk waktu sewa sesi penuh. Sebaliknya, waktu sewa maksimum sebagian besar merupakan jaring pengaman. Tidak soal apakah Anda meminta sesi dengan waktu sewa delapan jam, gunakan itu hanya selama lima menit, jika Anda menghentikan sesi secara manual setelahnya.

Perpanjang waktu sewa sesi

Anda dapat memperpanjang waktu sewa sesi aktif, jika ternyata Anda membutuhkannya lebih lama.

Contoh kode

Kode di bawah ini menunjukkan implementasi sederhana untuk memulai sesi, menunggu status siap, menyambungkan, lalu memutuskan sambungan dan mematikan lagi.

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();

Beberapa instan  RemoteRenderingClient dan RenderingSession dapat dipertahankan, dimanipulasi, dan dilakukan kueri dari kode. Namun hanya satu perangkat yang dapat tersambung ke RenderingSession pada satu waktu.

Masa pakai komputer virtual tidak terikat dengan instans RemoteRenderingClient atau instans RenderingSession. RenderingSession.StopAsync harus dipanggil untuk menghentikan sesi.

ID sesi persisten dapat dilakukan kueri melalui RenderingSession.SessionUuid() dan di-cache secara lokal. Dengan ID ini, aplikasi dapat memanggil RemoteRenderingClient.OpenRenderingSessionAsync untuk mengikat sesi tersebut.

Jika RenderingSession.IsConnected benar, RenderingSession.Connection mengembalikan instans RenderingConnection, yang berisi fungsi untuk memuat model, memanipulasi entitas, dan informasi kueri tentang adegan yang di-render.

Dokumentasi API

Langkah berikutnya