суббота, 20 января 2007 г.

В чём была ошибка «БобрДобр»?

В чём была ошибка «БобрДобр»?

    Мало кто не знает о нашумевшей истории с «БобрДобр». Проработав всего день, сервис «не выдержал огромного наплыва посетителей» и закрылся. Не вдаваясь в «политические» споры вокруг сего знаменательного события, я попытаюсь рассмотреть чисто техническую сторону вопроса. Будем считать, что добрый бобёр — всего лишь повод для заметки о том, как вообще нужно запускать подобные проекты с точки зрения здравого смысла.

 

 

    Прежде всего, хочу сказать, что я не склонен так уж винить мифических немецко-белорусско-украинских программистов. Почему? Потому что чисто формальный метод нагрузочного тестирования, когда система генерирует кучу запросов, а программист сидит и смотрит, не поломалось ли чего, в принципе не может гарантированно уберечь от подобных ситуаций. Интерпретаторы и СУБД сейчас довольно умны и, как правило, хорошо оптимизируют процесс многократной выдачи повторяющихся данных. Ваш сервис в тестовых условиях может легко справиться с 10000 «пользователей», а в реальных — «упасть» при 1000.

    Кроме того, разработчик — человек с «замыленным» взглядом на систему. Думаю, у всех были ситуации, когда продукт, казалось бы, протестирован со всех сторон, а заказчик умудряется его сломать, практически, за несколько минут просто потому, что делает то, о чём вы вообще подумать не могли. И если для функционального тестирования здесь всё достаточно просто (достаточно пригласить пару людей со стороны и попросить попользоваться системой), то для нагрузочного тестирования всё несколько сложнее.

    Где вы возьмёте 10000 человек, которые будут в реальных условиях пользоваться вашей системой?

    Ответ, оказывается, достаточно простой. Достаточно посмотреть на англоязычный Интернет, в котором «2.0-проекты» запускаются по несколько десятков в день. И вспомнить про популярную приписку «beta», которая появилась отнюдь не просто так.

    Вопрос на засыпку. Как вы думаете, что бы случилось с «Gmail», если бы 1 апреля 2004 года он открылся бы для всех желающих со своим гигабайтом места?

    В лучшем случае, «Гугл» закрыл бы регистрацию через пару дней. И это при том, что «Гугл»-то может себе позволить добавить 10, 20, 30 серверов, а вот наш «Бобр» — нет. В любом случае, ни 10, ни 20, ни 30 дополнительных серверов не помогли бы.

    В «Гугле» ввели закрытое тестирование потому, что они имеют опыт работы под нагрузкой. И это действительно единственный способ протестировать приложение под реальной нагрузкой, чётко контролируя при этом поток посетителей.

    Самое интересное здесь в том, что, запуская подобный проект сразу же для всех желающих, как бы хорошо вы его не тестировали до этого, вам, скорее всего, через несколько дней придётся закрыть регистрацию. Потому что пользователей прибежит больше, чем планировалось, сервис они будут использовать иначе, а конфигурация окажется не подходящей для такой нагрузки. Будь вы хоть самим «Гуглом». Предусмотреть всё вы всё равно не сможете.

    Разошлите, для начала, приглашения какой-нибудь сотне пользователей. Скажем, представителям многочисленных сайтов, которые пишут обзоры новых проектов. Сервис вряд ли «упадёт» при такой нагрузке. Если его разрабатывали хоть сколько-нибудь квалифицированные программисты и уже проводился первый этап нагрузочного тестирования. Так что вы не получите кучу негатива со стороны прессы ещё до запуска. Оставьте включённым профайлинг. Возможно, уже при такой загрузке можно будет выявить потенциально проблемные куски и исправить их. Через некоторое время стабильной работы, пригласите ещё пользователей (скажем тех, кто уже подписался на анонс проекта). Затем включите систему приглашений.

    Преимущества такого подхода очевидны. Вы контролируете поток посетителей и можете исправить любую проблему ещё до того, как она ударила по вам со всей силой.

    И помните, что лучше учиться на чужих ошибках, чем не учиться на своих.

    Автор: Сумасшедший веб-программист.

 

Интересное...



Другие посты по этой теме:



Комментариев нет: