Flexipy
Індустрії · Послуги · Продукти

Проєкти · професійна мережа та платформа вакансій

Профілі, навички й месенджер у реальному часі на одному індексі

01 Проєкт

Проблема

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

Підхід

Профілі людей і компаній моделюються окремо, але поділяють структури, за якими варто шукати, — експертиза, навички, сертифікати, мови, локація. Пошук працює проти Elasticsearch через шар документів, а не проти реляційних таблиць, тож нове поле в профілі не робить пошук повільнішим. Месенджер працює через власний канал реального часу на Redis замість опитування, а графи сповіщень і підписок пишуться асинхронно через Celery.

02 Інженерія

Що було технічно складним

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

Одне рішення, і чому

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

Інші проєкти

start-project.sh

$ розкажіть, що ви будуєте і де застрягли

Забронювати 30-хв дзвінок

Відповідаємо протягом одного робочого дня.

Поговоримо про ваш проєкт

Виберіть час або напишіть — відповідаємо протягом одного робочого дня.

Станіслав Рибонька · Засновник і провідний інженер

Вибрати час →
або напишіть нам