RU

NIC.UA

http://nic.ua

NIC.UA — один из самых больших регистраторов доменных имен в Украине. Раньше сервис работал на монолитном сервере. Вместе с командой NIC.UA мы разделили его на бекенд и фронтенд. Теперь сервис стал гибким, масштабируемым и предоставляет пользователям функции интеллектуального поиска доменов.

Основные задачи, которые мы решили со своей стороны:

  1. Перевели сайт на PHP-фреймворк Symfony.
  2. Изменили принцип поиска доменов.
  3. Написали настраиваемую админ-панель для управления контентом на сайте.
  4. Внедрили горизонтальное масштабирование и непрерывную интеграцию.
  5. Реализовали веб-сокеты для быстрого поиска.

Сайт регистратора доменных имен NIC.UA

Преимущества Symfony

Чтобы сервис было легче масштабировать и поддерживать, мы перевели сайт NIC.UA на Symfony. На этом PHP-фреймворке работает ряд масштабных проектов (BlaBlaCar, Spotify, MeinFernbus), обрабатывающих огромные массивы данных ежедневно.

С нашей точки зрения, PHP-фреймворк Symfony подходит для проектов вроде NIC.UA по следующим причинам:

  • Он является актуальным фреймворком для веб-решений.
  • Функционал организован в виде бандлов, с которыми легко работать.
  • Можно выполнять команды из консоли для автоматизации некоторых действий.
  • Есть панель веб-отладки с полезными данными для профилирования работы сайта и запросов к базе данных.

Гибкая панель для управления контентом

Возможности стандартных админ-панелей сайтов крайне ограничены, поэтому для NIC.UA мы разработали настраиваемую админ-панель, из которой можно:

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

Улучшенный поиск доменов

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

  • Пользователи получали первые результаты сразу же после инициации поиска.
  • Сервис не совершал лишних запросов к реестрам и не замедлял работу системы.
  • Пользователям не нужно было повторять поиск, чтобы получить все наилучшие варианты.
  • Для этого мы внедрили «умное» кеширование запросов и добавили функции транслитерации, поиска синонимов, перевода, благодаря чему результаты поиска сразу содержат все лучшие варианты. Например, если клиент ищет домен для магазина одежды («odezhda»), то увидит:

    • несколько вариантов доменов сразу с указанием требований к регистрации (например, наличие торговой марки для домена .ua);
    • варианты названия с переводом и в кириллическом написании (outfit.in.ua, одежда.co.ua);
    • варианты названия с синонимами (шкаф.co.ua, платье.co.ua).

Поиск на сайте регистратора доменных имен NIC.UA

Горизонтальное масштабирование и непрерывная интеграция

Взаимодействие с серверной частью NIC.UA осуществляется посредством API. Мы реализовали логику его работы и настроили беспрерывную интеграцию (Continuous Integration) с помощью GitLab. Такой тип интеграции предполагает постоянное формирование основной ветки разработки с кодом от нескольких программистов, создание автоматических сборок и их тестирование. Благодаря беспрерывной интеграции нужные изменения вносятся проще и быстрее.

Continuous Integration

Существует два вида масштабирования:

  1. Вертикальное — ресурсы добавляются к одному серверу.
  2. Горизонтальное — расширение происходит за счет увеличения числа серверов.

Поскольку сайт NIC.UA должен выдерживать большие перепады нагрузок, мы отдали предпочтение горизонтальному масштабированию. Была создана система из 3 серверов, один из которых является балансировщиком и распределяет нагрузку для двух других (при необходимости количество серверов можно увеличить). Если случится сбой, сервис продолжит работу, поскольку все задачи будут выполняться на другом исправном сервере. Так обеспечивается отказоустойчивость системы.

Горизонтальное масштабирование

Реализация веб-сокетов

Веб-сокеты обеспечивают двустороннюю передачу данных с контролем доставки. Связь между клиентом и сервером осуществляется в режиме реального времени поверх TCP-соединения. В практическом смысле это значит, что:

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

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

Наша миссия — упрощать жизнь людей, создавая полезное и удобное программное обеспечение
Свяжитесь с нами, и мы поможем решить ваши задачи.

Над проектом работали:

  • Владимир Сутовский Владимир Сутовский

    Менеджер проектов

  • Миша Гасюк Миша Гасюк

    Менеджер проектов

  • Миша Вильшанский Миша Вильшанский

    Back-end разработчик

  • Саша Ленский Саша Ленский

    Back-end разработчик

  • Андрей Бойчук Андрей Бойчук

    Back-end разработчик