Today era is about cloud and analysing information. Cloud is everywhere. Be it business apps or mobile apps. So what it’s role in gaming world? What would be its significance? Front end? Back End? Hosting? Which services to exploit and for what?
Cloud offers a lot – Virtual machines (VMs), Storage, Scaling, ready environments, industry standard compatible server images, efficiency – all at reduced cost. One of the huge benefit is Scaling. We all know incoming requests increase by leaps and bounds during peak period as game may become popular, due to your marketing team strategy. During this period, it is likely that server usage spikes up and touches sky, looking like sky-scrappers, and which limits your memory and fail to process new requests or may slow down server processing, impacting response time. Thus, deteriorate user patience and loss of business. What if it has to be scaled down, when users are less? Adding/removing server node to cluster is also an additional overhead for Operations team. Procuring server with required prerequisites, OS license, set up and configuring within the cluster. Hence, it has to be well planned and an architect should consider all this overhead and do capacity planning well ahead of its time. As an architect, you cannot predict it point-to-point. You may lay down capacity planning, however, it again depending on business suggested user numbers. So, it is your responsibility to utilise the cloud services and it should be among the solution options.
Next question, which cloud features should be utilised and for what purpose? Web Services, and/or Web Apps, if your game is made available on browser platforms including apps on different devices.
VMs are plain vanilla systems, they are like plain blank-black-slate. You can install any OS of your choice or based on game-engine platform is intended to build upon. VM gives you complete control with the bare OS and some management tools that you can manage and its resources like – network, bandwidth, how this should be used and operate – all through the console. Microsoft Azure provides one such console through its portal.
Cloud services are built and hosted on top of VMs. Services can be back-end processes require to compute using complex algorithm or it could be as small as web application which just upload images on storage server. These are services which are made available to users on demand. It is designed to provide easy, scalable access to applications, resources and services, and are fully managed by cloud service provider like Microsoft Azure. It is similar to daemon and windows services in Linux and Windows, respectively, but attached with fault-tolrent and scalable qualities. They are more focused on application deployment rather than focusing on other fluffs, which involves supporting this functionality. To develop a Web App, as-in online game, it be can built using ASP.Net, Python, PHP, Node.js using back-end persistence like SQL Server, MySQL databases, NoSQL – mongoDB.
Cloud services also offers storage services. It is more often comes in different flavours and types. It includes databases – both paid and free, both SQL and NoSQL, caching – for temporary storage, files storage – to store physical files, blob storage – to store binary files as a storage. Microsoft Azure offers everything in this category from persistence to temporary storage, from SQL to NoSQL. Named storage such as SQL database, SQL service on VM, MySQL, MongoDB, DocumentDb. This allows you to store right from gamers or players profile to player’s game state, from game data to game images and files on file storage. As an architect, it is necessary for you to define and evaluate which storage will suits for which data type you want to store.
You need to do a capacity planning, determine auto scaling options for databases. It is also necessary what will be it’s location – as this is crucial since it will impact on performance, an important quality attribute. Although, Azure gives you plenty of options in deciding server’s geolocation, it is up to architect to select appropriate based on players location.
If it is MMO, this is common use case that player should communicate with each other. To support your extreme large amount of data generated, you can go for DocumnetDb, a No-SQL database, as temporary storing service. It stores in JSON format and can read/write using LinQ, eliminating joining, adjoining and how other relational data will look like. Azure supports DocumentDb and its starting size is 10gb.
In MMO, it is necessary to architect tracking system which will consume and send the information back to down to other players or their opponents in real-time. This could be temporary information kept on the storage, however, what is important is the size and state of data. Azure offer Redis caching and this type of service is best suit for this use case. You can also support this using Pub/Sub model.
File Storage and Media Services, from Azure offerings, can be a handy option to store small chunk of video files and later can be monitored. Possible use case is when it is required to record a video on player behaviour and thought process in order to support game’s log or to judge player’s behaviour during particular level. This will further can be shared with developers to debug or with analysts to improve game level and difficulty.
This is information era. Business analysts may want to capture more informations from game app to get the insights and how well it is performing, this could be done through Machine Learning process which will evaluate the massive amount of data collected to determine patterns and predict the outcomes. Azure offerings on Machine Learning is massive, giving more control to user to predict from historical data utilising statistics algos.
In a nutshell, Azure offers various options among cloud services, help you, as an architect, to choose and to support game’s implementation and helping operations to create resources on Azure, which is as simple as few button clicks!