Architektura przykładowej gry w chmurze Azure / Architecture of the example game in the Microsoft Azure

Wpis ten powstał jako rozwinięcie mojego zapisu na facebook dot. proponowanej architektury rozwiązania gry w celu podniesienia jej grywalności.

Jak wygląda gra można zobaczyć tutaj: https://youtu.be/ulelEP_Zs_U

Pokrótce założenia:

  • ma być jak najtaniej do utrzymania i wytworzenia;
  • ma być skalowalnie – jakby gra okazała się sukcesem;
  • ma być dostępna na wszystkich platformach sprzętowych no i we wszystkich regionach świata szybko do ściągnięcia i/lub zagrania;
  • oczywiście mamy mieć pełną analitykę, kto się łączył i kiedy z naszą witryną, czy były jakieś błędy;
  • często zmieniamy sprzęt developerski i chcemy poprawiać błędy np. w knajpie internetowej, na laptopie, ewentualnie na słabym komputerze;
  • musimy mieć kontrole wersji, stronę www chcemy mieć możliwość poprawiania poprzez pisanie kodu w przeglądarce (zwłaszcza w chwili rollout’u)

Proponowane rozwiązanie:

Zaczynając od końca, a więc cały kod źródłowy rozwiązania będziemy trzymać w Visual Studio Team Services, a do kodowania wykorzystamy Visual Studio Community Edition. Dla małych zespołów do 5 osób rozwiązanie zupełnie darmowe. Samą grę będziemy pisać w Unity, co pozwoli nam za pomocą przysłowiowego jednego kliknięcia wdrożyć rozwiązanie na Windows, Linux, Mac, Android, Iphone. Kod źródłowy będziemy przechowywać również bezpłatnie w chmurze Unity. Samo Unity dla małych, niekomercyjnych, bądź przynoszących niewielkie 100000 USD rozwiązań również jest bezpłatne.

Jeżeli nie mamy dość wydajnego komputera, bądź wystarczająco dużo miejsca na dysku do instalacji wyżej wspominanych narzędzi i aby w miarę wydajnie pracować zmuszeni jesteśmy zapłacić za Azure (chyba, że wyrobimy się w miesięcznej darmowej subskrypcji, bądź planu free). Proponuje wykorzystać maszynę wirtualną z serii N, z którą dostajemy wydajną kartę graficzną (GPU). Na takiej maszynie możemy nie tylko grać, ale również tworzyć je! Pamiętajmy, aby zainstalować na niej odpowiednie drivery: https://docs.microsoft.com/pl-pl/azure/virtual-machines/windows/n-series-driver-setup.

Stronę z wynikami, taka jak tutaj https://mazeball.azurewebsites.net/ stworzymy jako App Service / Web App w planie bezpłatnym wraz z bazą danych SQL Database (na rok również bezpłatnie z ograniczeniem do 32 MB, ale same wyniki to kilka bajtów na jednego gracza). Oczywiście, jeżeli będzie hit – to szybko migrujemy się do płatnego planu – odrobimy sobie na reklamach!

No właśnie, aby potencjalnemu reklamodawcy przedstawić bardzo dokładne statystyki, łącznie z glokalizacją uruchomimy Application Insight. Jak nie będziemy mieli za dużo danych również usługa jest usługa darmową.

Dany z gry będziemy przekazywać za pomocą Azure Functions – za pomocą prostych Get’ów. Usługa do miliona wywołań również bezpłatna! A jeżeli osiągniemy sukces, to przełączymy się na inny plan, wydajniejszy i bardziej odpowiedni.

Na naszej stronie będzie trochę plików statycznych do pobrania – wesja WebGL, EXE aplikacji i aby szybko ją dostarczyć końcowemu użytkownikowi użyjemy usługi Content Delivery Network. Usługa płatna, więc nie musimy jej wdrażać od razu.

Jeżeli osiągniemy sukces i będziemy rozkładać obciążenie na kilka WebApp wówczas wykorzystamy Traffic Managera – ale to już będziemy zarabiać, więc cena nie gra roli, zwłaszcza, że nie jest wysoka. Wdrożymy za pomocą jednego kliknięcia.

Aby szybko wdrażać nowe usługi i niejako uniezależnić się od adresów DNS Azure, od początku proponuje bazować na swojej strefie DNS, i aby przekazać za pomocą wpisu CNAME np. trafficmanager.mojadomena.pl -> mojadomena.trafficmanager.net lub azureedge.mojadomena.pl -> mojadomena.azureedge.net lub mazeball.mojadomena.pl -> mazeball.azurewebsites.net. Oczywiście obsługę DNS można powierzyć również Azure i o ile nie osiągniemy milion zapytań wyrobimy się w cenie najtańszego piwa z biedronki.

 

The game looks here: https://youtu.be/ulelEP_Zs_U

  • Brief assumptions:
  • be as cheap as possible;
  • it can be scalable – as if the game turned out to be a success;
  • it can be available on all hardware platforms and can be quickly downloaded and / or played in all regions of the world;
  • of course we have to have full analytics, who connected and when with our site, if there were any errors;
  • we often change the developer’s equipment, we need acces for example in an internet café, on a laptop, or on a weak computer;
  • we need to have version controls, we want to have a website to be able to correct by writing code in the browser (especially at the time of rollout)

Suggested soultion:

Starting from the end, so all the source code of the solution will be kept in Visual Studio Team Services, and for coding we will use Visual Studio Community Edition. For small teams up to 5 people, the solution is completely free. The game will be written in Unity, that allow us to implement a solution on Windows, Linux, Mac, Android, Iphone by one click. The source code will also be stored for free in the Unity cloud. Unity is also free for non-commercial or small businesses.

If we do not have a sufficiently efficient computer, or enough disk space to install the above-mentioned tools and to work reasonably efficiently, we have to pay for Azure (unless we make up for a monthly free subscription or free plan). My proposal is to use the N series virtual machine with which we get a powerful graphics card (GPU). We can play games on this and also create them! Remember to install the appropriate drivers on it: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/n-series-driver-setup

A website with results, such as https://mazeball.azurewebsites.net/, we will create as an App Service / Web App in the free plan together with the SQL Database (limit of 32 MB, but the results are several bytes on one player). Of course, if it will be a hit – we quickly migrate to a paid plan.

To get potential advertiser we need to provide very accurate statistics, including geo localization. We launch Application Insight . If we do not have too much data, the service is also free.

We will transfer data from the game using Azure Functions – using simple GET. The service up to a million calls is also free! And if we achieve success, we will switch to a different plan, more efficient and more appropriate.

On our site there will be some static files to download – WebGL, EXE applications and to quickly deliver it to the end user we will use the Content Delivery Network service. A paid service, so we do not have to implement it.

If we achieve success and we will spread the load on several WebApp then we will use Traffic Manager – but we will already earn, so the price does not play, especially since it is not high. We implement it with one click.

In order to quickly implement new services and to free yourself from DNS Azure addresses, from the very beginning we suggest to base your DNS zone on it, and to transfer using CNAME entry, for example: trafficmanager.mojadomena.pl -> mydomain.trafficmanager.net or azureedge.mojadomena.pl -> mojadomena.azureedge.net or mazeball.mojadomena.pl -> mazeball.azurewebsites.net. Of course, DNS support can also be moved to Azure, and if we do not reach one million queries, we will get the price of the cheapest beer in WallMarkt.