Hello! Ny anarako dia Sergey Kachan, ary izaho dia mpanjifa mpamorona amin'ny tetikasa War Robots. War Robots efa teo nandritra ny taona maro, ary nandritra izany fotoana izany ny lalao dia nanangona maro isan-karazany ny votoaty: robots, fitaovam-piadiana, drones, titans, mpamily, ary toy izany koa. Androany dia hiresaka momba ny fomba fiasa ao amin'ny tetikasa isika, izay nitranga tamin'izy ireo nandritra ny 11 taona farany, ary ny fomba nanaovana izany. Balances ao amin'ny tetikasa Toy ny tetikasa hafa rehetra, War Robots dia azo ampahany amin'ny ampahany roa: meta sy ny fototry ny lalao. Izany dia hetsika rehetra izay mihoatra noho ny lalao fototra, fa mbola misy fiantraikany amin'ny lalao. Ity dia ahitana ny fividianana sy ny fanatsarana ny votoatin'ny lalao, handray anjara amin'ny hetsika ara-tsosialy na hetsika. Meta gameplay (metagaming) dia ny andian-tsarimihetsika lehibe amin'ny hetsika izay ataon'ny mpilalao ao amin'ny lalao mba hahatratrarana ny tanjona. Core gameplay (core gameplay loop) Ny ampahany tsirairay amin'ny tetikasa dia mila ny fitovian-tena manokana, noho izany dia mizara ny fitovian-tena amin'ny sokajy roa ihany koa isika - meta sy fototra. Robots miady ihany koa ny antsoina hoe izay mitaky ny fahasamihafana manokana. Skirmish modes Ny dia fanitsiana ny fomba misy na ny sarintany amin'ny endri-javatra samihafa na fitsipika. Ny fomba Skirmish matetika dia mifototra amin'ny zava-nitranga, azo jerena ho an'ny mpilalao nandritra ny fialan-tsasatra samihafa, indrindra ho an'ny fahafinaretana. Skirmish mode Noho izany, amin'ny ankapobeny, manana 4 salan-tsakafo isika: 2 ho an'ny fomba default sy 2 ho an'ny fomba Skirmish. Nandritra ny 11 taona, ny War Robots dia nanangona votoaty mahatalanjona: 95 ny mpanamboatra 21 Ny tetiandro 175 karazana fitaovam-piadiana samihafa Ny drôna 40 16 Ny reny maro be ny hoditra, remodels, modules, pilots, torrets, farany dikan'ny votoaty, ary ny sarintany Ary araka izay azonao eritreretina, mba hanao izany asa izany rehetra izany dia mila mitahiry vaovao momba ny fitondran-tena, antontan-taratasy, fidirana, vidiny, ary bebe kokoa. Noho izany, dia niakatra ho amin'ny habetsaky ny habetsaky ny vola: Default mode Skirmish mode Meta balance 9.2 MB 9.2 MB Core balance 13.1 MB 13.1 MB Meta balance 2 MB amin'ny 2 MB amin'ny Core balance Ny 1 MB Ny 1 MB Taorian'ny fanombanana haingana vitsivitsy, dia hitantsika fa ny mpilalao dia tsy maintsy misintona Izany dia be dia be! 44.6 MB Tsy tiantsika ny mamporisika ny mpilalao hamoaka angon-drakitra lehibe toy izany isaky ny fiovana ny tahirin-kevitra. ary ny famoahana angon-drakitra maro amin'ny alàlan'ny CDN dia tsy tena mora. Mba hampahatsiaro anareo fotsiny: Ny Robot Ady dia tonga Tamin'ny taona 2024, ny mpijery mandritra ny herinandro dia Ary Mifototra amin'ny andro tsirairay. 300 million registered users 4.7 million people 690 thousand players Ankehitriny, mieritreritra ny habetsahan'ny angon-drakitra. be dia be, sa tsy izany? Nieritreritra toy izany koa izahay. Noho izany dia nanapa-kevitra ny hanao ny zavatra rehetra azontsika mba hampihenana ny habetsahan'ny tahiry! Ny fanafihana ny olana Ny dingana voalohany dia ny fanadihadiana ny salan-tsakafo ary miezaka hahatakatra: "Inona no mitaky toerana be dia be?" Noho izany, nanoratra fitaovana maro izahay izay nanangona sy nanangona ny fampahalalana rehetra ilaintsika momba ny tahiry. Ny fitaovana dia handray rakitra fitantanana ho toy ny fidirana ary, amin'ny fampiasana fisainana, hiverina amin'ny alalan'ny rafitra rehetra, manangona angon-drakitra momba ny karazana fampahalalana izay voatahiry sy ny habetsahan'ny tsirairay. Ny vokatra dia mampiahiahy: Ny fitoviana % in balance Usage count String 28.478 % 164 553 Int32 27.917 % 161 312 Boolean 6.329 % 36 568 Double 5.845 % 33 772 Int64 4.682 % 27 054 Custom structures 26.749 % — String Ny isan'ny mpampiasa dia 28.478% Ny ankamaroan'ny Int32 Ny isan'ny 917% Ny taona 161 312 Boolean 6 29 isan-jato Ny 6 568 Double 5 84% ny isan'ny Ny faha 372 Int64 4 82% ny isan'ny olona Ny faha 2554 Custom structures Ny fitomboan'ny vidim-potoana dia 26.749%. — Ny fitoviana fototra % in balance Usage count String 34.259 % 232 229 Double 23.370 % 158 418 Int32 20.955 % 142 050 Boolean 5.306 % 34 323 Custom structures 16.11 % — String Ny 4259 isan-jaton'ny Ny 229 Double Ny 2370 isan-jato Ny faha 488 Int32 Amin'ny 20,955 isan-jato Ny 250 000 Boolean Ny 5306 isan-jato Ny 323 Custom structures Ny vokatra dia 16.11% — Taorian'ny fanadihadiana ny toe-javatra, dia fantatsika fa Ary tsy maintsy atao ny zavatra momba izany. strings were taking up far too much space Noho izany dia namorona fitaovana iray hafa izahay. Ity iray ity dia nanindry ny rakitra fitantanana ary niteraka tahirin-kevitra momba ny fehezan-dalàna rehetra miaraka amin'ny isan'ny fotoana nanadihady ny tsirairay. Ny vokatra dia tsy mampahery ihany koa. Ny sasany amin'ireo taratasy dia niverina an'arivony arivo indray! Efa nahita ny olana izahay. Ankehitriny ny fanontaniana dia: ahoana no ahafahantsika mamaha izany? Manatsara ny balances Noho ny antony mazava, tsy afaka ny hanala ny fehezan-dalana tanteraka isika. Ny fehezan-dalana dia ampiasaina ho an'ny zavatra toy ny lokalization keys sy ny ID samihafa. Fa izay azontsika atao dia ny manakana ny famerenana ny fehezan-dalana. Ny hevitra dia tsotra araka izay azo atao: Mamorona lisitry ny singa tsy manam-paharoa ho an'ny tsirairay (amin'ny ankapobeny, ny fitehirizana manokana). Ampidiro ity lisitra ity miaraka amin'ny angon-drakitra. public class BalanceMessage { public BalanceMessageData Data; public StringStorage Storage; public string Version; } StringStorage dia fototra manodidina ny lisitry ny fehezan-teny. Rehefa mamorona ny fametrahana fehezan-teny isika, ny rafitra tsirairay dia mahatsiaro ny indices amin'ny fehezan-teny ilainy. Taorian'izay, rehefa mahita angon-drakitra, dia alefa fotsiny ny indices ary mahazo haingana ny isa. public class StringStorage { public List<string> Values; public string GetValue(StringIdx id) => Values[id]; } Ankoatra ny fandefasana ny fehezan-dalana ao anatin'ny rafitra fitoviana, dia nanomboka nankany amin'ny indices ny toerana voatahiry ny fehezan-dalana ao amin'ny fametrahana ny fehezan-dalana. Alohan'ny public class SomeBalanceMessage { public string Id; public string Name; public int Amount; } Taorian'ny public class SomeBalanceMessageV2 { public StringIdx Id; public StringIdx Name; public int Amount; } StringIdx dia fototra fotsiny manodidina ny int. Amin'izany fomba izany, dia manafoana tanteraka ny famindrana taratasy mivantana ao anatin'ny rafitra fitantanana. public readonly struct StringIdx : IEquatable<StringIdx> { private readonly int _id; internal StringIdx(int value) {_id = value; } public static implicit operator int(StringIdx value) => value._id; public bool Equals(StringIdx other) => _id == other._id; } Ity fomba ity dia mampihena ny isan'ny tsipika am-polony. String usage count String usage count Before After Meta balance 164 553 10 082 Core balance 232 229 14 228 Before After Meta balance Ny ankamaroan'ny Ny 10 082 Core balance Ny 229 Ny faha 228 Tsy ratsy izany, sa tsy izany? Saingy izany ihany no nanombohan'izany - tsy nitsahatra tamin'izany isika. Ny famerenana ny Data Protocol Ho an'ny fandefasana sy fanodinana ny rafitra fitoviana, dia nampiasa . MessagePack MessagePack dia endrika famaritana angon-drakitra binary natao ho toy ny hafainganam-pandeha sy haingana kokoa amin'ny JSON. Izy io dia natao ho an'ny fifanakalozana angon-drakitra mahomby eo amin'ny fampiharana na ny serivisy, mamela fihenjanana lehibe amin'ny habetsahan'ny angon-drakitra - indrindra fa mahasoa raha manan-danja ny fahombiazana sy ny bandwidth. Tamin'ny voalohany, ny MessagePack dia tonga tao amin'ny format JSON, izay mampiasa ny angon-drakitra Izany dia azo antoka fa mahasoa, fa koa mahasoa ny toerana. Noho izany dia nanapa-kevitra ny hanolotra ny fahaiza-manao ary hifindra amin'ny . string keys binary byte array Alohan'ny public class SomeBalanceMessage { [Key("id")] public string Id; [Key("name")] public string Name; [Key("amount")] public int Amount; } Taorian'ny public class SomeBalanceMessageV2 { [Key(0)] public StringIdx Id; [Key(1)] public StringIdx Name; [Key(2)] public int Amount; } Nalaina ihany koa ny vondrom-piarahamonina rehetra - fa tsy handefa azy ireo isika, dia mandefa valiny null. Izany dia mampihena ny habetsahan'ny angon-drakitra amin'ny ankapobeny ary ny fotoana ilaina amin'ny serialization sy deserialization. Ny fanandramana ny fiovana Ny fitsipika volamena amin'ny fampandrosoana tsara (ary iray izay hamonjy anao ny fahasalamana be dia be) dia ny mampihatra endri-javatra vaovao amin'ny fomba izay ahafahanao miverina haingana raha toa ka mitranga ny zava-drehetra. Nandritra ny fampandrosoana dia tsy maintsy antoka fa ny angon-drakitra rehetra dia nandefa araka ny tokony ho izy. Ny tahiry taloha sy vaovao - na inona na inona format na rafitra - dia tsy maintsy mamokatra ny lanjany mitovy. Ary tsarovy, ny tahiry optimized dia niova mafy ny rafitra, fa tsy tokony hisy fiantraikany amin'ny zavatra hafa afa-tsy ny habeny. Mba hahatratra izany, dia nanoratra fanadinana isan-karazany ho an'ny tsirairay izahay. Tamin'ny voalohany, dia nifanaraka ny sehatra rehetra izahay – nanamarika ny tsirairay tsirairay mazava tsara. Izany dia nahomby, saingy mitaky fotoana izany, ary na dia ny fiovana kely indrindra amin'ny salan-tsakafo aza dia handrava ny fitsapana, dia nangataka antsika hamerina azy ireo tsy tapaka. Amin'ny farany, dia ampy izany ary tonga amin'ny fomba fitsapana mahomby kokoa ho an'ny fampitandremana ny fitoviana. Nivoaka indray ny fiheverana. Nanao dikan-teny roa ny rafitra fitantanana, ohatra ny SomeBalanceMessage sy ny SomeBalanceMessageV2, ary niverina tamin'izy ireo — nifanaraka ny habetsaky ny sehatra, ny anarana ary ny lanjany. Raha tsy nifanaraka ny zavatra, dia nahita ny olana izahay. Fanatsarana ny vokatra Noho ireo fanatsarana ireo, dia afaka mampihena ny habetsaky ny rakitra alefa amin'ny tambajotra isika ary ny fotoana ilaina mba hanesorana azy ireo amin'ny mpanjifa. Ny habetsaky ny Old balances Optimized balances Profit Meta balance 9.2 MB 1.28 MB - 86 % Core balance 13.1 MB 2.22 MB - 83 % Meta balance 2 MB amin'ny Ny mpamatsy 1.28 MB 86 isan-jato ny Core balance Ny 1 MB Ny 2 MB Ny 83 isan-jato Ny vanim-potoana famonoana Old balances Optimized balances Profit Meta balance 967 ms 199 ms - 79 % Core balance 1165 ms 265 ms - 77 % Meta balance 967 taona izy. 199 taona Ny 79 isan-jato Core balance Ny taona 1165 265 taona Ny 77 isan-jato Ny tahirin-kevitra ao amin'ny fahatsiarovana Old balances Optimized balances Profit Meta + Core ~ 45.3 MB ~ 33.5 MB - 26 % Meta + Core Ny haino aman-jery dia 45.3 MB. Ny rakitra dia 33,5 MB. 26 isan-jato Ny famaranana Ny vokatra amin'ny fanatsarana dia nankasitraka antsika tanteraka. Ny antontan-taratasin'ny tahiry dia niakatra mihoatra ny 80%. Ny fifamoivoizana dia niakatra, ary faly ny mpilalao. Amin'ny ankapobeny: Aza misalasala amin'ny angon-drakitra alefanao, ary aza mandefa zavatra tsy ilaina. Ny string dia tsara indrindra ho voatahiry ao amin'ny fitehirizana tokana mba hisorohana ny famoronana duplicates. Ary raha ny angon-drakitra manokana (vola, antontan-taratasy, sns) ihany koa dia ahitana fanamarihana be dia be, miezaka ny manangona azy ireo amin'ny fitehirizana tokana ihany koa. Izany dia hamonjy anao maro megabytes - ary vola be amin'ny fitehirizana ny CDN servers.