Разработка веб-приложения

Заказчик

Широко известная немецкая компания, изготовитель программного обеспечения.

Основная задача

Наша команда смогла произвести хорошее впечатление на заказчика на стадии переговоров и консалтинга, что послужило причиной выбора нашей компании в качестве партнера для разработки игровой системы.

Вышеупомянутая система включала в себя две основные части:

1. Приложение для управления турнирами. На основе специально разработанных алгоритмов необходимо было реализовать такие функции, как

  1. еженедельный, ежемесячный и ежегодный турниры,
  2. возможность просмотра игр, просмотр обзоров прошлых игр,
  3. рейтинговая система,
  4. интерактивный чат,
  5. интернет уведомления,
  6. уведомления по электронной почте и так далее.

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

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

Задачи, требующие максимум усилий:

- реализация возможности игры для пользователей различных брандмауэров (firewalls);

- распределение нагрузки на сервер, учитывая возможность расширения системы;

- настройка связи между заказчиком и сервером

Решение

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

Поскольку брандмауэры обычно контролируют места подсоединения к интернету с целью защиты локальных сетей от внешних атак путем сканирования входящего трафика и, отвергая попытки подключения к хосту, который находится под защитой брандмауэра от внешних машин, мы были обязаны предоставить возможность пользователям, использующим системы сетевой защиты тоже играть в игру, что должно было повлиять на расширение потенциальной аудитории. Учитывая, что настройки большинства брандмауэров разрешают трафик по протоколу НТТР через порт 80, чтобы дать пользователям возможность открывать интернет страницы внутри системы сетевой защиты, нашей командой было принято решение использовать HTTP-Tunnel для прохождения защиты брандмауэра.

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

Для того, чтобы решить проблему связи для обработки запросов клиента, мы рассматривали вариант добавления к серверу нити пулов. Однако объединение пулов в нить не очень хорошо масштабировалось за счет времени, необходимого для переключения контекста, которое значительно возрастало с числом активных потоков.  Наконец, мы решили использовать I/O мультиплексирование. При таком подходе, один поток использовался для обработки произвольного количества сокетов. Это позволяло серверам сохранять малое количество потоков, даже при работе с тысячами сокетов, тем самым значительно улучшая масштабируемость и производительность.

Используемые технологии

ОС: UNIX, Linux

Языки программирования: Java, HTML, JavaScript

База данных: MySQL4.1.x