Сделать предзаказ Задать вопрос

Сетевые приложения

Сетевые приложения используют возможности объединённых в сеть компьютеров для решения различного рода задач.

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

Задача: создать масштабную и быструю поисковую систему, просканировать и сохранить в кэш все сайты зоны .com (более 70 миллионов доменов на момент разработки, 2007 г.), хранить в базе более 100 миллионов вопросов и более 30 миллионов ответов, выдавать отсортированные по релевантности результаты поиска менее, чем за одну секунду.

Решение: для того чтобы решить эту задачу, вместо распространённой практики поиска по базе с помощью средств самой базы (что было бы недостаточно быстро) для поиска мы задействовали sphinx-сервера (одни из наиболее быстрых среди известных на сегодняшний день поисковых серверов). Нами были разработаны сетевые приложения, отвечающие за взаимодействие поисковых серверов и серверов с данными, общую синхронизацию данных и обновления базы. Это позволило для системы с более чем сотней серверов с данными и десятью поисковыми серверами обеспечить скорость менее чем в 0,5 секунды на поиск и выдачу 20 наиболее релевантных вопросов. Сортировка вопросов по релевантности, для расчета которой нами были выработаны специальные лингвистические критерии, происходит в эти же 0,5 секунды.

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

Задача: создать редактор, не уступающий по функциональности оффлайн-приложениям, предназначенным для создания структурных схем (Visio, SmartDraw), и предоставляющий при этом пользователю преимущества работы онлайн, такие как совместное редактирование и распознавание нарисованных «вручную» элементов схемы.

Решение: для совместного редактирования документов было реализовано оперативное отслеживание изменений от каждого из участвующих в работе пользователей. Любые изменения сразу же отображаются в документе для всех остальных участников. Взаимодействие клиентской и серверной сторон в этом процессе осуществляется с помощью созданного нами сетевого приложения, а для передачи данных используется специально разработанный отказоустойчивый протокол: никакие изменения не «теряются» даже при обрыве соединения (как со стороны автора изменений, так и со стороны остальных участников).

Еще одно сетевое приложение, отвечающее за взаимодействие сервера и клиента, позволяет в режиме реального времени распознавать нарисованные «вручную» объекты. Пользователь мышкой рисует элементы структурной схемы (квадраты, овалы, стрелки), на сервер передаются координаты точек контура, после чего сервер с помощью специально написанного ПО распознает движения мышки и менее, чем за 1 секунду возвращает четкие красивые изображения соответствующих объектов.

Нами была создана система онлайн-аукционов, в рамках которой для осуществления взаимодействия между серверами клиентской и серверной сторон были разработаны сетевые приложения, реализованные в виде ботов, автономно выполняющих определенные задачи и производящих обмен информацией по протоколу Jabber/XMPP.

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

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

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

Для поддержки одновременной работы тысячи чатов мы разработали бот чатов. Бот позволяет пользователям обмениваться сообщениями в чатах каждого аукциона и в глобальном чате, в который могут отправлять сообщения все зарегистрированные в системе пользователи. Кроме того, бот блокирует использование ненормативной лексики, предотвращает спам и флуд. Один бот одновременно может поддерживать работу до 1000 чатов и десятков тысяч пользователей.

Технологии

Поисковая система:

  • PHP (клиентская сторона)
  • Sphinx (поисковые сервера)
  • NFS (файловая система на серверах данных)
  • web cache (кэширование веб-страниц)

Редактор структурных схем:

  • Java (клиентская сторона)
  • Python (серверная сторона; изменение линейных размеров блоков)
  • Django (серверная сторона)
  • C++ (система распознавания нарисованных «от руки» объектов)
  • AJAX (отображение изменений для всех участников редактирования)

Онлайн-аукцион:

  • PHP (клиентская сторона)
  • Java (клиентская сторона)
  • Python (бот ставок, информационный бот)
  • ejabberd (серверная часть)
  • Memcached (хранение данных по закрытым аукционам)
  • PostgreSQL (база аукционных данных)