Ставка Золота - аукцион ювелирных изделий

Ставка Золота - это аукцион, где лоты с частотой раз в 5-30 минут выставляются на продажу из большой базы товаров. Все автоматизировано. Аукционист лишь выгружает данные о товарах их базы данных организации, указывает приоритеты по отдельным группам товаров, и они начинают торговаться. Ручные операции сведены к минимуму, так как динамика сайта очень большая. Ставки сыпятся каждую секунду, товары прибывают, ежеминутно рассылаются десятки писем и уведомлений.

Идея оказалась очень востребованной, и благодаря рекламе и сарафанному радио аукцион на данный момент имеет солидную посещаемость для сайтов этой тематики. При чем это самый динамичный из созданных нами сайтов в плане частоты заказов.

Технически самая интересная часть аукциона - это сам движок ставок и уведомлений. Рассмотрев готовые решения в данной сфере, мы обнаружили, что нормального ничего по сути нет. Все предлагают обновлять ход торгов через IFRAME или AJAX транспорты. Это недопустимо, медленно и зарубает экшн, который возникает на последних секундах торгов. Обычный алгоритм работы аукциона:

- Загружаем страницу, получаем актуальную информацию о ставках.

- Каждые 5-10 секунд посылаем запрос на сервер и обновляем ставки

В результате то, что происходило в последние 5-10 секунд нам неизвестно, это не считая сбоев передачи или долгой загрузки очередной порции обновлений. Но это не самое страшное. Проблемы возникают при  пиковой посещаемости: все каждый 5 секунд опрашивают сервер. Это приводит к тому, что приходится даже для небольшого проекта покупать дорогой сервер или выносить часть, отвечающую за быстрый поллинг на отдельный сервер.

Для преодоления этих проблем был написан отдельный сервер оповещения о ставках на NodeJS. Этот сервер работает отдельно от сайта, не тормозит и способен на огромные нагрузки. Его задача простая - хранить информацию о всех подключенных участниках торгов, слушать сайт и ждать от него обновлений по любому из лотов, а при поступлении новой информации - мгновенно уведомлять участников. Со стороны браузера используется куча вариантов связи с сервером: WebSockets, Flash транспорт, JSONP. Если эти технологии не поддерживаются браузером, то используются те же AJAX и IFRAME транспорты. Вот только связываются они не с Nginx+PHP махиной, а с маленьким быстрым NodeJS, время отклика которого измеряется миллисекундами.

Кроме этого для сайта была разработана уникальная система фильтрации и меню. По сути, администратор может создать любую выборку товаров и прикрепить ее к пункту меню с красивым URL. Вот пример: http://stavkazolota.ru/auction/cherno_belyie. Читаемый адрес, в фильтре найдены изделия по двум параметрам.

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

Опять же, приятно, когда сайт реально нужен бизнесу. Заказчик его тщательно наполняет. Вот, например, страница товара: http://stavkazolota.ru/auction/articul/969685. Все заполнено, картинки залиты, даже есть 3D просмотр. Кстати, 3D просмотр товара был создан специально для этого сайта. Заказчик фотографирует все изделия с использованием специального столика, фотоаппарата и техники вращения. Каждые 10 градусов поворота делается снимок. На каждый товар 36 снимков. Все это в автоматическом режиме грузится на сайт и далее вращается с помощью JS с возможностью зума. Это смотрится замечательно.

Сайт продолжает развиваться, и мы надеемся станет интернет-аукционом ювелирных изделий №1 в России. Этот проект, наряду с такими как palerom.ru, topflo.ru дает нам возможность в течение длительного времени оттачивать навыки поддержки больших проектов. Это не всегда идет успешно, так как поддержка - это отдельный мир, который требует ответственности и четкой схемы работы. Ответственность важна при создании сайта. Так как при длительной разработке могут меняться программисты, менеджеры, представители заказчика, но проект должен продолжаться. Четкая схема работы необходима потому что на поддержке и внедрении новых идей как правило сложно составлять подробные ТЗ. Приходится пробовать, рисковать, учиться до часа просчитывать бесценное время сотрудников. Потребность в поддержке проектов приводит к экспериментам в области повременной оплаты труда студии, выделению отдельных сотрудников или команд на проект. Пробуем, работаем.



Самое интересное