Високонавантажний бекенд на Elixir Phoenix: real-time, кейси

Уявіть: ваш API на Node.js при 50 000 одночасних WebSocket-підключень починає гальмувати, пам'ять зростає, а latency перевищує 200 мс. Ми стикалися з цим не раз і перейшли на Phoenix — фреймворк на Elixir, побудований поверх [BEAM](https://en.wikipedia.org/wiki/Erlang_(programming_language)#BEAM). Ц

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Високонавантажний бекенд на Elixir Phoenix: real-time, кейси
Складний
від 2 тижнів до 3 місяців

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1245
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Уявіть: ваш API на Node.js при 50 000 одночасних WebSocket-підключень починає гальмувати, пам'ять зростає, а latency перевищує 200 мс. Ми стикалися з цим не раз і перейшли на Phoenix — фреймворк на Elixir, побудований поверх BEAM. Ця платформа спочатку створювалася для телекомунікацій з вимогою дев'яти дев'яток uptime. За довгі роки роботи ми реалізували 30+ проектів на Phoenix, і жоден не впав у production. Наші інженери гарантують надійність навіть при пікових навантаженнях до 2 млн одночасних підключень на одному сервері.

У порівнянні з Node.js, Phoenix показує в 10 разів кращу продуктивність при однаковому навантаженні. Наприклад, для чат-сервісу на 50 000 користувачів ми зменшили витрати на сервери в 4 рази — споживання пам'яті знизилося з 200 MB до 50 MB, а latency впав з 200 ms до 20 ms. Phoenix обробляє в 10 разів більше запитів на одному сервері, ніж Python/Django, і потребує менше ресурсів. Ви економите на інфраструктурі: замість 10 серверів достатньо двох.

WhatsApp тримав 900 мільйонів користувачів на 50 інженерах, багато в чому завдяки Erlang. Phoenix додає до цього зручний веб-шар з каналами, LiveView та Ecto.

Чому Phoenix — найкращий вибір для real-time додатків?

Наша команда спеціалізується на розробці на Elixir з використанням Phoenix фреймворку, що дозволяє створювати високонавантажені бекенди. Phoenix ідеально підходить для чатів, систем сповіщень реального часу, IoT-бекендів та фінансових систем з вимогами до відмовостійкості. В одному з проектів ми порівняли Phoenix з Node.js при 10 000 одночасних WebSocket-з'єднань: Node.js досяг межі CPU на 70%, а Phoenix — на 25%. Ефективніше в 3 рази за використанням ресурсів.

Як ми забезпечуємо 99.999% аптайму?

Ключ до відмовостійкості — правильна Supervisor tree з використанням OTP. Кожен процес ізольований, і якщо він падає, Supervisor перезапускає його за заданою стратегією. Ми використовуємо :one_for_one для дочірніх процесів, коли збій одного не повинен впливати на інші. GenServer використовується для управління станом, наприклад, для rate limiter'а.

# lib/my_app/application.ex defmodule MyApp.Application do use Application def start(_type, _args) do children = [ MyApp.Repo, MyAppWeb.Telemetry, {Phoenix.PubSub, name: MyApp.PubSub}, MyApp.RateLimiter, {MyApp.Workers.EmailWorker, []}, MyAppWeb.Endpoint ] Supervisor.start_link(children, strategy: :one_for_one, name: MyApp.Supervisor) end end 

Якщо EmailWorker впав — Supervisor перезапускає його автоматично. Інші процеси не зачеплені. Додатково використовуємо libcluster для розподілу навантаження між вузлами. Така архітектура гарантує uptime 99.999% навіть при збоях.

Як налаштувати WebSocket канали в Phoenix?

Канали — ключова можливість Phoenix для real-time. Ось кроки:

  1. Створіть канал: mix phx.gen.channel Room.
  2. Визначте join/3 та handle_in/3.
  3. Налаштуйте сокет в endpoint.ex.
  4. Підключіться з боку клієнта через Phoenix.Socket.

Приклад найпростішого каналу:

defmodule MyAppWeb.RoomChannel do use Phoenix.Channel def join("room:lobby", _message, socket) do {:ok, socket} end def handle_in("new_msg", %{"body" => body}, socket) do broadcast!(socket, "new_msg", %{body: body}) {:noreply, socket} end end 

Канали автоматично масштабуються: 10 000 підключень на канал споживають ~2 MB пам'яті. Рекомендуємо використовувати PubSub для кросування повідомлень між вузлами.

Що входить в розробку бекенду на Phoenix?

Етап Результат Документація
Аналітика Архітектурна схема, вибір стеку, оцінка навантаження Технічне завдання, опис Use Cases
Проектування Моделі даних (Ecto), API-специфікація (OpenAPI), схеми каналів Swagger-документ, ERD
Реалізація Код з модульними тестами, rate limiter на GenServer, кластеризація README, інструкція з розгортання
CI/CD Docker-образ, GitHub Actions, деплой на сервер Pipeline-скрипти, змінні оточення
Документація Swagger, README, інструкція з розгортання Повний пакет документації
Підтримка 2 тижні безкоштовного супроводу після релізу Доступ до репозиторію, база знань

Всі матеріали передаються замовнику: доступи до сервера, логи, моніторинг та навчання команди (2 дні).

Порівняння Phoenix з альтернативами

Характеристика Phoenix Node.js (Express) Python (Django)
Конкурентність Актори (легкі процеси) Event loop (один потік) Threads (GIL)
Підключення на 1 сервер 2 млн ~100k ~50k
Відмовостійкість Supervisor tree Manual error handling Middleware
Живе перезавантаження Hot code reloading Немає Немає
Швидкість розробки Висока (метапрограмування) Середня Висока

Терміни та вартість

Терміни залежать від складності: базовий API — 3–4 тижні, високонавантажена система — 5–8 тижнів. Вартість розраховується індивідуально. Замовте розробку бекенду під ключ — оцініть ваш проект безкоштовно! Пишіть нам — ми підготуємо комерційну пропозицію за 2 дні. Отримайте надійний відмовостійкий бекенд, який витримає будь-яке навантаження.