Трудились:

Староста
Васисуалий Уткин
Старший инженер
Дмитрий Кельми
Инженер
Ефимов Данил

Трудились:

Староста
Васисуалий Уткин
Старший инженер
Дмитрий Кельми
Инженеры
Ефимов Данил
Евгений Захаревич
Марина Бондарева

Платформа «Автокомьюнити»

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

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

«Универсальные» решения в виде CMS, представленных на современном рынке, под эти задачи явно не подходили. Поэтому программно-аппаратную часть, как, впрочем, и оформление, решили делать сами.

autocomboss-referent

В качестве основного языка программирования был выбран PHP — как наиболее популярный и, следовательно, обеспечивающий наибольшее количество доступных разработчиков. Фрагменты кода, отвечающие за места наиболее критичных нагрузок, были выполнены на «Си» в виде отдельных «демонов» и дополняющих модулей для PHP-интерпретатора веб-сервера.

Разумеется, не обошлось без ООП. В связи с тем, что разработка длилась почти год, люди в команде менялись. Однако использование широко известных паттернов проектирования позволило упростить адаптацию новых разработчиков.

Еще на стадии проектирования в продукт были введены возможности реализации нескольких уровней кэширования данных. Нижний уровень работает с объектами данных, полученных из базы данных, храня их, при необходимости, в пуле memcached серверов. Верхний уровень кэширует уже готовые страницы или блоки страниц, что позволяет выдавать посетителю большинство запросов без использования тяжелой скриптовой части.

Большинство данных имеет версионный характер — редактирование объекта создает его новую версию, которая публикуется на сайте только после процесса «актуализации». Это позволяет готовить пакетные изменения на сайте, не допуская появления несвязанных данных.

autocomboss-referent

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

autocomboss-referent

Жизнеспособность всех серверов, равно как и миграция сервисов при отказе оборудования выполнена на проекте Linux-HA + Pacemaker CRM (cluster resource manager). Входящие запросы обслуживают сервера с nginx («фронт-енд»), нагрузка на которые распределяется через DNS (round-robin). Nginx занимается выдачей статического контента, которым могут являться, в том числе, и кэшированные страницы портала. Помимо этого он же осуществляет балансировку запросов на пулы PHP-интерпретаторов («бек-енд»).

autocomboss-referent

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

Сервер базы данных построен на базе СУБД PostgeSQL, а для резервирования и масштабирования реализует схему «синхронный мастер-мастер», что упрощает работу с данными из программного продукта.

Отдельной частью системы является почтовый сервер, используемый для доставки уведомлений пользователям, полностью готовый для работы в режиме обмена сообщениями (jabber) и предоставления пользователям портала доступа к персональным почтовым ящикам.

К сожалению, в 2010 году развитие проекта, в связи с плачевным состоянием автомобильного бизнеса, пришлось приостановить. На текущий момент, мы планируем возобновить работу над проектом в начале 2011 года. Планов много, но всему своё время.

Задача: сделать удобный форум, способный выдерживать большие нагрузки, и чтобы его можно было как угодно адаптировать под свои нужды. И еще сделать фотогалерею, чтобы люди заливали туда свои фотографии — и чтобы конкурсы можно было делать.

Отдельная часть платформы «Автокомьюнити» — форум. Потратив массу времени на разработку основного программного продукта, для ускорения открытия проекта мы выбрали готовое решение. Попытка сэкономить время и деньги позволила открыть сайт значительно быстрее, но сделала весьма затратной дальнейшую поддержку форума.

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

autocomboss-referent

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

autocomboss-referent

Быстрый и понятный поиск по форуму с множеством дополнительных фильтров реализован отдельно от программного продукта с помощью Sphinx — полнотекстовой поисковой системы.

autocomboss-referent

Sphinx, через специальный интерфейс, получает XML-поток с сообщениями форума, создает собственные поисковые индексы — поэтому быстро и эффективно, не нагружая непосредственно форум, выдает пользователям результаты поисковых запросов.

На самом деле, платформа «Автокомьюнити» в стартовой конфигурации (сервера, сетевые коммутаторы, дисковая корзина и собственный источник бесперебойного питания с батарейными блоками) занимает в стойке 17 юнитов. В момент переезда из одного дата-центра в другой всё это хозяйство свободно поместилось в RAV4 — правда, задние сиденья пришлось сложить.

autocomboss-referent