Каковы некоторые рекомендации по обеспечению того, что ваш код .NET будет хорошо масштабироваться?

На прошлой неделе я дал интервью для позиции в игровой компании TripleA MMORPG здесь, в NE. Я не получил работу, но одна из областей, которые возникли во время интервью, была связана с масштабируемостью кода, который вы пишете, и как его следует рассматривать на ранних этапах в дизайне вашей архитектуры и классов.

К сожалению, я никогда не думал о масштабируемости кода .NET, который я написал (я работаю с однопользовательскими настольными и мобильными приложениями, и наши основные проблемы обычно связаны с памятью устройства и скоростью передачи данных). Мне интересно узнать больше о написании кода, который хорошо масштабируется, поэтому он может обрабатывать широкий диапазон удаленных пользователей в среде клиентского сервера, в частности, MMORPG.

Есть ли какие-нибудь книги, веб-сайты, лучшие практики и т.д., которые могли бы заставить меня начать изучать эту тему?

Ответы

Ответ 1

Только один момент, который я хотел бы выделить здесь. Просто кешируйте свои чтения. Выполните правильную политику кэширования, в которой вы определяете, какие объекты могут быть кэшированы и какие периоды. Наличие распределенной фермы кэширования приведет к загрузке с серверов БД, что в значительной степени приносит пользу производительности.

Даже просто кэширование некоторых фрагментов данных в течение нескольких секунд - в очень многостраничном сценарии с очень высокой нагрузкой - предоставит вам существенную выгоду.

Ответ 2

Вот несколько мест для запуска:

http://highscalability.com/blog/2010/2/8/how-farmville-scales-to-harvest-75-million-players-a-month.html

http://www.cs.cornell.edu/people/~wmwhite/papers/2009-ICDE-Virtual-Worlds.pdf

В частности, http://highscalability.com заполнен или статьи об огромных веб-сайтах, которые масштабируются и как они это делают (Digg, flickr, facebook, YouTube,...)

Ответ 3

Если вы ищете физическую валидацию, то, что я обычно нахожу, помогает сделать prototyping. Это дает вам неплохую идею, как правило, о любых непредвиденных проблемах, которые могут быть в вашем дизайне, и о том, насколько легко это добавить. Я бы попытался применить любые шаблоны проектирования, чтобы обеспечить будущую масштабируемость. Элементы многоразового объектно-ориентированного программного обеспечения - отличная ссылка для этого. Вот несколько примеров, которые показывают до и после кода с использованием шаблонов проектирования. Это поможет вам понять, как шаблоны проектирования могут сделать ваш код более масштабируемым. Here - это сообщение SO о конкретных шаблонах проектирования для масштабируемости программного обеспечения.