From 9a8b6963f6ef81ba254ba348fc6c5b7cac651fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20P=C3=A5lsson?= Date: Sun, 15 May 2011 20:39:11 +0200 Subject: [PATCH] Fixed grammar and spelling --- report.lyx | 166 +++++++++++++++++++++++++++++------------------------ 1 file changed, 90 insertions(+), 76 deletions(-) diff --git a/report.lyx b/report.lyx index c69267c..4bad6d0 100644 --- a/report.lyx +++ b/report.lyx @@ -364,13 +364,13 @@ Today users of network games often experience failures of the servers while playing or downtime due to maintenance. Additionally game developers often perform the difficult task of reinventing a game server to meet their needs. - The purpose of this thesis is to to design a reliable game server which - can power different types of games simultanously. + The purpose of this thesis is to design a reliable game server which can + power different types of games simultaneously. \end_layout \begin_layout Abstract It is investigated if the techniques and tools used in the telecom industry, - specifically Erlang and the OTP, can be used to create a highly reliable + specifically Erlang and the OTP can be used to create a highly reliable game server. To make the server generic, it is investigated if virtual machines can be used to run the actual games, thereby allowing the games to be developed @@ -507,12 +507,12 @@ Introduction \end_layout \begin_layout Standard -Online gaming, and computer gaming in general has become an important part +Online gaming and computer gaming in general has become an important part in the day-to-day lives of many people. A few years ago, computer games were not at all as popular as they are today. With the advances in computer graphics and computer hardware today's games - are much more sophisticated then they were in the days of + are much more sophisticated than they were in the days of \emph on NetHack \emph default @@ -560,7 +560,7 @@ textbf{NetHack}}{An early computer game developed by the NetHack team, arguably \end_layout \begin_layout Standard -The early computer games featured simple, or no graphics at all +The early computer games featured simple or no graphics at all \begin_inset CommandInset citation LatexCommand citep key "nethack:website" @@ -575,11 +575,11 @@ key "nethack:website" \end_layout \begin_layout Standard -Since these early games, the gaming industry have become much more influential +Since these early games, the gaming industry has become much more influential in many ways. Many advances in computer hardware are thought to come from pressure from the computer game industry. - More powerful games require more powerful, and more easily available hardware + More powerful games require more powerful and more easily available hardware \begin_inset Note Note status collapsed @@ -650,7 +650,7 @@ The idea of game servers is not new, network games have been played for \emph on Quake \emph default - series, or the + series, and the \emph on Doom \begin_inset Note Note @@ -789,8 +789,9 @@ status open \backslash nomenclature{ \backslash -textbf{Hardware failiure}}{A failiure in hardware (hard drive, memory, processor -, etc) which causes a system to stop functioning} +textbf{Hardware failure}}{A failure in hardware (hard drive, memory, processor, + etc.) which causes a system to function in a different way than originally + intended, or crash} \end_layout \begin_layout Plain Layout @@ -799,8 +800,9 @@ textbf{Hardware failiure}}{A failiure in hardware (hard drive, memory, processor \backslash nomenclature{ \backslash -textbf{Software failiure}}{A failiure in software (the GGS, the operating - system, etc) which causes a system to stop functioning} +textbf{Software failure}}{A failure in software (the GGS, the operating + system, etc.) which causes a system to function in a different way than + what was originally intended, or crash} \end_layout \end_inset @@ -825,7 +827,7 @@ The game industry is a quickly growing industry with high revenues and many Strangely enough gamers often experience long downtimes due to maintaining or because of problems with the servers \begin_inset CommandInset citation -LatexCommand citet +LatexCommand citep key "news/cnet/com/WoWProblems" \end_inset @@ -882,7 +884,7 @@ the nine nines of availability \begin_inset CommandInset citation -LatexCommand citet +LatexCommand citep key "Armstrong03" \end_inset @@ -905,7 +907,7 @@ s, leaving the public unable to contact emergency services. \begin_layout Standard Moving back to the gaming industry. - The main reason to develop reliable servers is a higher revenue for game + The main reason to develop reliable servers is higher revenue for game companies, to achieve this it is important for game companies to expand their customer base. Reliable game servers will create a good image of the company. @@ -969,10 +971,11 @@ key "Bondi:2000:CSI:350391.350432" . These two issues are addressed in this thesis. - Structural scalability means expanding an architecture, e.g. + Structural scalability means expanding architecture, e.g. adding nodes to a system without requiring modification of the system. Load scalability means using the available resources in a way which allows - handling increasing load, e.g more users, gracefully. + handling increasing load, e.g. + more users, gracefully. \end_layout \begin_layout Standard @@ -1023,8 +1026,8 @@ reference "sec:Generic" \begin_layout Standard The server behaves in a way similar to an application server, but is designed - to help running games instead pf typical applications. - An application server provides processing ability and time, therefore it + to help running games instead of typical applications. + An application server provides processing ability and time; therefore it is different from a file- or print-server, which only serves resources to the clients. In order to more easily understand the purpose of the GGS, it can be of @@ -1046,11 +1049,21 @@ Glassfish \emph on Google App Engine \emph default - where you can run applications written in Python or some language which + where you can run applications written in Python or any language which runs in the \emph on Java Virtual Machine \emph default + +\begin_inset Note Note +status open + +\begin_layout Plain Layout +Reference to app engine +\end_layout + +\end_inset + . An example of an application server not powering web applications, but instead regular business logic, is Oracle’s @@ -1314,7 +1327,7 @@ Internally the GDL VM needs to interface with the GGS to make use of the helpers and tools that the GGS provides. Thus an internal API has to be designed to make the GDL VM be able to interact with the GGS. - This API is ideally completely independent of the GDL, and reusable for + This API is ideally completely independent of the GDL and reusable for any GDL. \end_layout @@ -1340,7 +1353,7 @@ reliable In order to facilitate scalability the GGS needs a storage platform which is accessible and consistent. The scalability aspects of the GGS are discussed from a theoretical point - of view, however no practical implementation of the scalability aspects + of view, however no practical implementations of the scalability aspects are found in the prototype. \end_layout @@ -1386,7 +1399,7 @@ The UDP protocol is not supported for communication between client and server. ation process using TCP was faster and easier than if UDP would have been used. UDP is generally considered to be faster than TCP for the transfer of game - (and other) related data, this is discussed in more depth in + (and other) related data; this is discussed in more depth in \begin_inset CommandInset ref LatexCommand vref reference "sec:Choice-of-network" @@ -1394,7 +1407,7 @@ reference "sec:Choice-of-network" \end_inset . - In short, the decision of using TCP means that games that requires a high + In short, the decision of using TCP means that games that require a high speed protocol will not be supported by the GGS prototype. Another limitation necessary to set on the system is the possibility to have huge game worlds due to the implementation of the scaling mechanism @@ -1455,7 +1468,7 @@ World of Warcraft \begin_layout Standard In turn based games each player has to wait for their turn. Latency is not a problem since the gameplay does not require fast interactions - among the players, long round trip times will not be noticed. + among the players; long round trip times will not be noticed. Examples of turn based games include board and card games, as well as multiplay er games like \emph on @@ -1508,11 +1521,11 @@ textbf{Module}}{A part of a larger system} \end_layout \begin_layout Standard -The first prototype of the GGS consisted of simple modules, however, due +The first prototype of the GGS consisted of simple modules; however, due to the separation of concerns among the modules, they were easily independently modified and improved. Once the basic structure of the GGS had been established, the first prototype - was removed, remaining was the structure of the modules and the internal + was removed; remaining was the structure of the modules and the internal flow of the application. This could be seen as an iterative workflow, with the first prototype being the first iteration. @@ -1551,7 +1564,7 @@ name "cha:Theory" \begin_layout Standard In this chapter, the theory behind the techniques used in the GGS are discussed. - Performance issues and the measuring of performance is discussed. + Performance issues and the measuring of performance are discussed. Benchmarking techniques are discussed. The options when choosing network protocols are given, along with a discussion of each alternative. @@ -1601,7 +1614,7 @@ Chess club - a building where chess players can meet and play chess. In the following text the choice of using a chess club for modeling the GGS is discussed. - The chess club is described in greater detail, furthermore the corresponding + The chess club is described in greater detail; furthermore the corresponding parts of the chess club in the GGS are described. Since a real-world scenario is readily available, and to such a large extent resembles the computer software required for the GGS, the next step in @@ -2376,7 +2389,7 @@ name "sec:Choice-of-network" \begin_layout Standard There are two main types of protocols with help of which computer communication - over the Internet usually takes place; TCP and UDP which are known as the + over the Internet usually takes place, TCP and UDP which are known as the network layer protocols and HTTP which is the most prominent application layer protocol. The transport layer protocols are commonly used to transport application @@ -2534,11 +2547,12 @@ name "sec:Generic" The GGS is a game server. It was made with a desire to be suitable for many kinds of games. A game should not only be able to vary in terms of genre, graphics, gameplay - etc, but also in the way the game is implemented for example in different - programming languages. + etc. + but also in the way the game is implemented for example in different programmin +g languages. The GGS should be OS independent and run on Windows, OS X and Linux. - The GGS can be run as a listen server on the players computer and host - games locally. + The GGS can be run as a listen server on the computers of the players and + host games locally. It could also be a dedicated server running on dedicated independent hardware. It is meant to run any game in any environment in any way desired, therefore being as generic as possible. @@ -2547,7 +2561,7 @@ The GGS is a game server. \begin_layout Standard Clients upload the source code of the game it would like to play on the GGS, this way any client can connect to the server and install the game - through a API without the need of installation through the server provider + through an API without the need of installation through the server provider or maintainer. \end_layout @@ -2667,14 +2681,14 @@ name "sec:Availability" \begin_layout Standard One important factor of any server is the availability. - A server which is unreachable is an useless server. + A server which is unreachable is a useless server. \end_layout \begin_layout Standard Within the telecom sector high availability has been achieved \begin_inset CommandInset citation -LatexCommand citet +LatexCommand citep key "armstrong2011" \end_inset @@ -2688,7 +2702,7 @@ key "armstrong2011" There are several good papers (e.g. \begin_inset CommandInset citation -LatexCommand citet +LatexCommand citep key "VM:Jin2010,VM:Polze" \end_inset @@ -2696,7 +2710,7 @@ key "VM:Jin2010,VM:Polze" ) on how to migrate whole virtual machines among nodes to replicate them but for the GGS a different approach has been chosen. Instead of duplicating a virtual machine, an attempt to lift the state - of the VM to a storage external to the VM is made. + of the VM to storage external to the VM is made. The state is stored in a fast, fault tolerant data store instead of inside the VM. In addition to migrating the state of the game VM, the GGS uses tools from @@ -2728,7 +2742,8 @@ status open \backslash nomenclature{ \backslash -textbf{Supervisor}}{A process monitoring and hadning crashes in other processes} +textbf{Supervisor}}{A process monitoring and handling crashes in other processes +} \end_layout \end_inset @@ -3227,7 +3242,7 @@ status open nomenclature{ \backslash textbf{Network split}}{Separation of two networks, occurs when two networks - cannot communicate, commonly because of a hardware or software failiure} + cannot communicate, commonly because of a hardware or software failure} \end_layout \end_inset @@ -3375,7 +3390,7 @@ JavaScript is a prime GDL candidate for the GGS. \end_layout \begin_layout Standard -JavaScript, as a interpreted script language, has gained a lot of popularity +JavaScript, as an interpreted script language, has gained a lot of popularity in other fields of computer science lately. It is used as a server side language in large projects such as \emph on @@ -3598,7 +3613,7 @@ Pong \emph default , a game in which two players play a game involving a ball and two paddles. The goal for each player is to shoot beside the other players paddle while - not allowing the ball to pass by her own paddle. + not allowing the ball to pass by player's own paddle. The game requires real time updates and is demanding when played in several instances concurrently. \end_layout @@ -3643,7 +3658,7 @@ reference "chap:Results-and-discussion" for each player. Due to lack of hardware, not enough player processes could be started in this way. - The bots were rewritten in Erlang, and due to Erlang's light weigh threads, + The bots were rewritten in Erlang, and due to Erlang's light weight threads, enough processes could have been created to test the server successfully. \end_layout @@ -3699,7 +3714,7 @@ Overview of the prototype The prototype of the GGS was developed using the Erlang language. In Erlang, most things are processes. The software running the Erlang code is known as the Erlang machine, or - a Erlang node. + an Erlang node. Each Erlang node is capable of running several \emph on threads @@ -3751,7 +3766,7 @@ nomenclature{ \backslash textbf{Context switch}}{The act of switching from one context, commonly a process, to another. - Used by operating systems to achieve multi tasking} + Used by operating systems to achieve multi-tasking} \end_layout \end_inset @@ -3896,8 +3911,8 @@ reference "fig:The-layout-of" the entire GGS system is represented graphically. The circles marked with 'C' topmost in the picture represent game clients. - These circles represent processes running on gamers computers, and not - on the GGS machine. + These circles represent processes running on the computers of the gamers, + and not on the GGS machine. If a game of chess is to be played on the server, the clients on the machines of the gamers will be chess game clients. Clients connect through a network, pictured as a cloud, to the dispatcher @@ -4744,14 +4759,14 @@ The GGS protocol is modeled after the HTTP protocol. with HTTP due to its presence in internet software. Each GGS protocol packet contains a headers section. The headers section is followed by a data section. - In the headers section, parameters concerning the packet is placed. + In the headers section, parameters concerning the packet are placed. In the data section, the actual data payload of the packet is placed. \end_layout \begin_layout Standard There is no requirement of any specific order of the parameters in the headers section, however the data section must always follow directly after the - headers section separated by a empty new line. + headers section separated by an empty new line. \end_layout \begin_layout Standard @@ -4785,7 +4800,7 @@ The parser of the GGS protocol implemented in the GGS prototype is designed \end_layout \begin_layout Standard -Line 4 is a empty line which is, like in the HTTP protocol, the separator +Line 4 is an empty line which is, like in the HTTP protocol, the separator between the head and body or payload section. \end_layout @@ -5149,12 +5164,12 @@ Game data from all games on the GGS is stored in the database backend of \begin_layout Standard In the GGS prototype the database module is using a database management - system called Mnesia . + system called Mnesia. Mnesia ships with the standard Erlang distribution and is a key-value store type of database. - Mnesia is designed to handle the stress of telecoms systems + Mnesia is designed to handle the stress of telecoms systems \begin_inset CommandInset citation -LatexCommand citet +LatexCommand citep key "667766" \end_inset @@ -5240,9 +5255,9 @@ localStorage localStorage \noun default . - To store a value within the database, not only is the table token and the - name of the namespace required, but a unique key so that the value can - be successfully retrieved or modified later. + To store a value within the database, not only are the table token and + the name of the namespace required, but a unique key so that the value + can be successfully retrieved or modified later. The key is decidable by the game developer. \end_layout @@ -5261,7 +5276,7 @@ key "webstorage:website" \end_inset . - Usage of the web storage standard in the GGS provides a well documented + Usage of the web storage standard in the GGS provides a well-documented interface to the database backend. \end_layout @@ -6098,8 +6113,8 @@ key "Savor:1997:HSA:851010.856089" There are several approaches to a supervisor design in general (when not just considering how they work in Erlang). One common approach is to have the supervisor look in to the state of the - process(es) it supervises, and let the supervisor makes decisions based - on this state. + process or processes it supervises, and let the supervisor makes decisions + based on this state. The supervisor has a specification of how the process it supervises should function, this is how it makes decisions. @@ -6425,16 +6440,16 @@ The entire GGS was not tested using QuickCheck, nor was the entire client \begin_layout Standard QuickCheck has features to generate very large and complex tests, the results of which can be hard to analyze. - The solution to reading these complex test is to extract a + The solution to reading these complex tests is to extract a \emph on minimal failing test case \emph default which contains the smallest failing test sequence. By applying a very large test and gradually simplifying the test to find - the smallest failing sequence, many bugs which would other wise have been + the smallest failing sequence, many bugs which would otherwise have been hard to catch can be caught \begin_inset CommandInset citation -LatexCommand citet +LatexCommand citep key "Arts:2006:TTS:1159789.1159792" \end_inset @@ -6444,7 +6459,7 @@ key "Arts:2006:TTS:1159789.1159792" \begin_layout Standard QuickCheck was originally made for the programming language Haskell. - There is a lot of reimplementations of QuickCheck in various programming + There are a lot of implementations of QuickCheck in various programming languages. Erlang QuickCheck (EQC) and Triq are two variants of QuickCheck for Erlang. EQC was chosen for testing the GGS. @@ -6480,7 +6495,7 @@ Pong \end_layout \begin_layout Standard -Pong is a classic video game released by atari. +Pong is a classic video game released by Atari. Being a real-time based game, the game state will be constantly broadcasted to all the players of a started Pong game in the GGS. Each time a Pong game has been started and two bots has joined to play, @@ -6591,12 +6606,11 @@ ed Erlang tuple. \end_layout \begin_layout Enumerate -The protocol parser sends this Erlang touple back to the player process. +The protocol parser sends this Erlang tuple back to the player process. \end_layout \begin_layout Enumerate -The player process checks if the command is is a Server-Command or a Game-Comman -d. +The player process checks if the command is a Server-Command or a Game-Command. In our example it is a Game-Command and it sends the message to the table process. \end_layout @@ -6806,8 +6820,8 @@ The generic nature of the GGS leaves it up to the client to define which \end_layout \begin_layout Standard -The first client which connects to a table is responsible to provide the - JavaScript server source code. +The first client who connects to a table is responsible to provide the JavaScrip +t server source code. To do so there is a \noun on define @@ -7550,7 +7564,7 @@ erlv8 \begin_layout Standard erlv8 is powered by the V8 engine developed by Google. The ability to communicate from JavaScript to Erlang using NIF callbacks - is is present in the erlv8 bindings and can be used within the GGS. + is present in the erlv8 bindings and can be used within the GGS. \end_layout \begin_layout Standard @@ -7593,7 +7607,7 @@ Protocol design \end_layout \begin_layout Standard -Initially the GGS protocol was planed to use the UDP protocol as a transport +Initially the GGS protocol was planned to use the UDP protocol as a transport layer. Due to the lack of error checking in the UDP protocol, the UDP protocol is faster than the TCP protocol, this was a main reason in the desire to @@ -7743,7 +7757,7 @@ Testing of the GGS took place in two separate sessions. \end_layout \begin_layout Standard -Each of the two simulations use JavaScript as the GDL. +Each of the two simulations uses JavaScript as the GDL. The JavaScript is run through Google V8. The database module uses Mnesia. \end_layout @@ -7837,7 +7851,7 @@ In the first test, in which Mnesia has been heavily used, the server had load. In the next testing session, the test has been conducted with another client that did not use Mnesia. - Without mnesia the server peaked at 60,000 messages per second, however + Without Mnesia the server peaked at 60,000 messages per second, however this was only for a very short time. The average throughput was around 25,000 messages per second, five times more than what the server was able to process with Mnesia in place. @@ -8248,7 +8262,7 @@ This thesis describes a method to create a reliable and generic game server To make the GGS as generic as possible separation of game and server logic is necessary. Designing a good API is vital in order to allow game developers to interact - with the server in a easy manner and with minimal overhead. + with the server in a simple manner and with minimal overhead. Furthermore every game should be isolated so that games can not interfere with each other. Isolation can be achieved by introducing a context for each game which