Великі набори оголошень і важкі запити потребували моделі читання, що відповідає способам доступу до даних.
02 / Як я це реалізував
Як я це реалізував
Я розділив швидкий шар обслуговування на Rust, резервний Python-шлях, кеш і пошук/читання з транзакційним сховищем. Балансування й обмеження частоти стримували повторний трафік, а пакетна обробка та оптимізація запитів працювали з важкими операціями над даними.
Потік системи
Керування трафіком
Швидкий шлях читання
Кеш і пошук
Транзакційні дані
Що це означає на практиці
Архітектура та рішення
01
Окремий сервіс і визначені шляхи даних
Каталог маркетплейсу став окремим сервісом із власною архітектурою обслуговування. Rust відповідав за основний швидкий шлях, поруч працював резервний Python-підхід. Я відповідав і за архітектуру, і за реалізацію, відокремлюючи навантаження каталогу від ширшого commerce-застосунку.
02
Кеш, пошук і транзакції мають різні завдання
Redis кешував дані для повторних читань, Elasticsearch забезпечував модель пошуку/читання, а PostgreSQL зберігав транзакційні обов’язки. Це розділяло отримання даних каталогу й зберігання бізнес-стану. Пакетні операції та оптимізація важких запитів доповнювали цей розподіл.
03
Контроль повторного трафіку на вході
Балансування й обмеження частоти були частиною дизайну сервісу. Клієнтів із надмірними повторними запитами можна було сповільнити до переважання їхнього трафіку. Керування запитами, кеш і швидкий шар обслуговування проєктувалися разом, враховуючи і надходження запитів, і спосіб читання даних.
03 / Результат
Результат
Пошук і часті читання отримали власний шлях, а транзакційне зберігання та бізнес-логіка зберегли окремі обов’язки.