Microsoft Case Study: Stack Overflow

Источник: msug

От переводчика: ни для кого не является секретом тот факт, что StackOverflow - один из самых интересных и посещаемых сайтов на техническую тематику. Редко можно встретить разработчика, который не слышал о StackOverflow. Данная статья является переводом Stack Overflow Case Study и описывает задумку, процесс реализации и другие детали известного ресурса.

Разработчики наблюдают увеличение скорости разработки, лучшую производительность вместе с Model-View-Controller.

Когда несколько известных разработчиков решили создать веб-сайт, который призван помогать миру разработчиков обмениваться технической информацией между собой, им было необходимо создать эффективный, масштабируемый и простой в использовании сайт. Это была задача, стоящая перед Джеффом Этвудом (Jeff Atwood), автором блога "Coding Horror" и Джоэлом Спольски (Joel Spolsky), автором блога "Джоэл о программировании" ("Joel on Software"). Так как они планировали создать StackOverflow - сайт с вопросами и ответами для разработчиков, то им необходимо было найти инструмент, который позволял бы использовать подход Model-View-Controller (MVC), который упрощает процесс разработки и разделяет логику приложения от ее представления. Они использовали часть веб-платформы компании Microsoft по названием ASP.NET MVC Framework. Сайт выдерживает 1 миллион просмотров страниц в день и содержит более чем, 500 тыс. вопросов, ответов и соответствующих дискуссий.

Начало

Двое известных блоггеров в мире разработки программного обеспечения захотели создать сайт с вопросами и ответами, который мог бы стать неким центром для разработчиков и их вопросов с ответами.

Джефф Этвуд (Jeff Atwood), разработчик и автор популярного блога "Coding Horror" и Джоэл Спольски (Joel Spolsky), автор блога для разработчиков "Joel on Software" и основатель Fog Creek Software видели свой веб-сайт в виде сообщества, похожего на Википедию. Также они рассматривали сайт в аспекте блога с возможностью голосования за вопросы и ответы для получения наиболее релевантной и актуальной информации в стиле Digg или Reddit.

Цель сайта была озвучена в заметке Этвуда:

"Никто из нас не так глуп, как все мы" ("None of Us is as Dumb as All of Us.").

Этвуд и Спольски хотел создать сайт, чтобы разработка сайта была простой и быстрой, а код - масштабируемым. Они были недовольны традиционными подходами к веб-разработки, которые использовали абстрактный слой и потом вставляли код непосредственно в веб-страницы для уменьшения проблем с view states.

В дополнение к потенциально возможным серверным задержкам, они также были обеспокоены тем, что хранение кода на страницах может иметь негативные последствия на поисковую оптимизацию, поскольку информация о состоянии (view state) находиться выше основного контента, что могло привести к понижению значения главного контента для поисковых машин.

Разработчики хотели создать свое новое решение, используя поход Model-View-Controller (MVC), который упрощает процесс разработки приложений. Архитектура MVC, впервые описанная Trygve Reekskaug в 1979 году, использует шаблон проектирования, основанный на модели (model), которая содержит данные, необходимые для приложения; вид (view) или интерфейс для отображения модели; контроллер (controller), который является связующим звеном между моделью и ее представлением. Вместе они создают триплет и MVC-приложение может использовать несколько серий независимых друг от друга триплетов.

Авторы хотели создать свое решение с использованием Microsoft Application Platform, но нуждались в MVC подходе. Джефф Этвуд: "Нам очень нравится Microsoft, мы большие фанаты языка C#. Исторически C# развивался быстро и так, как мы этого хотели. И для того, чтобы оставаться в стеке технологий Microsoft, мы решили создать собственный MVC Framework, но потом узнали о бета-версии Microsoft ASP.NET MVC Framework".

Решение

Этвуд и Спольски создали свой сайт - Stack Overflow - с использованием ASP.NET MVC Framework, Visual Studio 2008 и Microsoft .NET Framework 3.5. Сайт, который был создан в течении двух месяцев, очень скоро стал популярным и был достаточно масштабируемым, чтобы поддерживать увеличивающуюся аудиторию.

Джоэл Спольски: "Рост Stack Overflow был очень быстрым. После года работа он достиг отметки в более чем миллион просмотров в день и на сегодня является 817-м в списке самых больших сайтов в интернете (со ссылкой на Quantcast). Он достиг отметки 5.2 миллионов людей в месяц." Сейчас сайт насчитывает более чем 500,000 вопросов, соответствующих ответов и дискуссий.

Авторы использовали тот же код для создания похожих сайтов, включая Server Fault для системных администраторов и Super User для продвинутых пользователей ("power users").

Кроме того, Fog Creek Software выпустил движок под названием StackExchange, позволяющий всем желающим создавать свои сайты аля "Stack-Overflow" на другие тематики.

Джефф Этвуд: "Вы можете использовать родно и то же программное обеспечение для создания Q&A сайтов обо всем. Кто-то может создать Stack Overflow Q&A сообщество для самолетов, или коллекций марок, геологов или в других областях".

Stack Overflow был создан с использованием Microsoft Web Platform, который кроме традиционных инструментов включал Windows Server 2008, Internet Information Services (IIS) 7 и Microsoft SQL Server 2008.

Основные компоненты Stack Overflow:

  • Балансировка нагрузки (Load Balancing). Пользователи, которые впервые попадают на сайт stackoverflow.com изначально обрабатываются с помощью балансировки нагрузки, который относит пользователя к одному из веб-серверов на основании его IP адреса. Пользователи будут присоединены к тому же серверу до тех пор, пока будут иметь тот же IP адрес. Stack Overflow использует open-source HAProxy для этих целей.
  • Отображение (Presentation). Пользователи просматривают страницы, которые обслуживаются Windows Server 2008 Standard и IIS 7.5. Веб-сервера - это компьютеры с Xeon quad core CPUs и 8 ГБ RAM. Когда пользователь посылает вопросы или ответы, то они записываются в базу с помощью легковесного слоя на базе LINQ to SQL.
  • База данных (Database). База данных хостится на выделенном сервере с 2 Intel Xeon quad core CPUs и 48 ГБ RAM и использует Microsoft SQL Server 2008 Enterprise. Stack Overflow использует Online Indexing, представленным в SQL Server 2008 Enterprise, которое позволяет ре-индексирование таблиц даже во время работы.

Джефф Этвуд: "Мы разработали это, чтобы стать Q&A сайтом нового поколения. Мы постарались объединить идеи Вики, чтобы каждый мог редактировать контент (если система вам доверяет). Кстати, голосование по принципу DIGG и REDDIT является важным компонентом сайта. Stack Overflow имеет репутацию системы, где каждый может проголосовать за контент и увеличить ваш рейтинг, что, в свою очередь, откроет вам различные возможности сайта, как только вы наберете необходимый рейтинг. Сайт также имеет элементы блога, которые подчеркивают авторство, поэтому вы как автор вопроса имеете некие дополнительные привелегии. Также, как и в любом блоге, пользователи могут оставлять комментарии. Мы хотели синтезировать все лучшее, что есть в различных типах онлайн-сообществ и предоставить все это на одном сайте".

Преимущества

Разрабатывая Stack Overflow с использованием ASP.NET MVC Framework, .NET Framework 3.5, Visual Studio 2008 и других продуктов платформы Microsoft Web, мы получили сайт с большой производительностью и небольшим временем разработки. Разработчики отметили. Что тестирование и поддержка кода была простой благодаря ASP.NET MVC Framework.

s

Высокая производительность

Команда разработчиков Stack Overflow была потрясена производительностью сайта, который они создали. Джефф Этвуд: "Наш сайт работает определенно быстрее, чем если бы мы создавали его с классической abstraction-based архитектурой..NET Framework берет на себя "ответственность" за большую скорость, которую мы видим, но и ASP.NET MVC сіграло не последнюю роль из-за своей легкости, что увеличило производительность."

Быстрая разработка

Разработчики Stack Overflow разработали четкое разделение кода, бизнес-логики и моделей данных с использованием ASP.NET MVC Framework. Разработчики также отметили гибкость в управлении HTTP на низком уровне, которую предоставлял ASP.NET MVC.

Джефф Этвуд: "Мы сэкономили время, так как Microsoft разработал MVC framework и нам не пришлось разрабатывать свой аналог. ASP.NET MVC - это простой фреймворк, который позволяет разработчикам работать очень эффективно. Он очень хорошо сочетается с нашими представлениями, как должна выглядеть веб-разработка.
Разработчики любят архитектуру ASP.NET MVC. Реализация MVC компанией Microsoft хорошо спроектирована в том смысле, что она инкапсулирует многие вещи, которые должен выполнять разработчик - замечательная начальная база и "чистый" фреймворк, позволяющий писать далеко не базовые вещи. Мы ни разу не столкнулись с чем-либо, что не могли бы сделать с MVC framework."

Открытость фреймворка была хорошо отмечена со  стороны разработчиков.

Джефф Этвуд: "ASP.NET MVC очень расширяемая. К примеру, Microsoft разрешила использовать свои собственные представления. Один из наших разработчиков очень любит библиотеку jQuery, поэтому мы использовали ее, так как она поддерживается реализацией MVC от Microsoft. Также мы благодарны за то, что исходный код ASP.NET MVC был выложен на сайте Codeplex."

Упрощенный процесс тестирования и поддержки кода

Команде Stack Overflow понравился поход к разделению кода и представления и они убедились, что  код, написанный с MVC подходом, легко тестируется и поддерживается.

Джефф Этвуд: "Вместе с MVC вы имеете более логичную логическую структуру приложения. Храня логику приложения в контроллере или модели, вам проще становится создавать, тестировать и поддерживать код. MVC позволяет более гибко контролировать HTML, чем в случае использования абстрактного слоя, что также может затруднить тестирование и поддержку кода."

Развитое сообщество

Этвуд отметил развитое сообщество вокруг ASP.NET MVC Framework. Разработчикам нравится иметь реализацию MVC и использовать ее вместе с Visual Studio, .NET Framework и другими компонентами платформы Microsoft Web.

Джефф Этвуд: "На протяжении бета-периода множество ошибок идентифицированы членами технического сообщества. Отличие было в том, что нам некогда было ждать, пока Microsoft исправит все ошибки. Кто-то из сообщества отправил свои исправления, потому как у него не было доступа к коду. Сообщество реагирует более быстро, чем может компания. Мы просто загрузили fix и были счастливы."

Этвуд позитивно отметил тот факт, что Microsoft будет продолжать развивать Framework.

Джефф Этвуд: "Главное правило программирования - никогда не писать то, что можно купить или получить бесплатно. Реализация MVC была необходимой. Microsoft создала продукт, полностью поддерживаемый сообществом разработчиков. Очень приятно знать, что Microsoft будет развивать и поддерживать MVC framework по той причине. Что есть большое количество тех, кому нравятся.NET Framework, C# и Visual Studio. Нам нравятся эти продукты. Одной из причин разработки Stack Overflow было показать людям, что можно создавать поразительные вещи, используя стэк технологий Microsoft."

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=24041