Duże zbiory ofert i kosztowne zapytania wymagały modelu odczytu dopasowanego do sposobów korzystania z danych.
02 / Moje podejście
Moje podejście
Rozdzieliłem szybką warstwę obsługi w Rust, rezerwową ścieżkę Python, cache i odczyt/wyszukiwanie od przechowywania transakcyjnego. Równoważenie obciążenia i ograniczanie żądań kontrolowały powtarzalny ruch, a przetwarzanie wsadowe oraz optymalizacja zapytań obsługiwały kosztowne operacje danych.
Przepływ systemu
Kontrola ruchu
Szybka ścieżka odczytu
Cache i wyszukiwanie
Dane transakcyjne
Co to oznacza w praktyce
Architektura i decyzje
01
Osobna usługa i jawne ścieżki danych
Katalog marketplace’u stał się osobną usługą z własną architekturą obsługi. Rust odpowiadał za główną szybką ścieżkę, uzupełnianą przez rezerwową ścieżkę Python. Odpowiadałem za architekturę i implementację, oddzielając obciążenie katalogu od szerszej aplikacji commerce.
02
Cache, wyszukiwanie i transakcje mają różne zadania
Redis buforował dane do powtarzanych odczytów, Elasticsearch zapewniał model wyszukiwania i odczytu, a PostgreSQL zachowywał odpowiedzialność transakcyjną. Oddzielało to pobieranie danych katalogu od zapisu stanu biznesowego. Operacje wsadowe i optymalizacja ciężkich zapytań uzupełniały ten podział.
03
Kontrola powtarzanego ruchu na wejściu
Równoważenie obciążenia i ograniczanie częstotliwości były częścią projektu usługi. Klientów z nadmierną liczbą powtarzanych żądań można było spowolnić, zanim zdominowali ruch. Kontrolę żądań, cache i szybką warstwę obsługi projektowano razem, uwzględniając napływ zapytań oraz sposób odczytu danych.
03 / Rezultat
Rezultat
Wyszukiwanie i częste odczyty otrzymały własną ścieżkę, a zapis transakcyjny i logika biznesowa zachowały odrębne odpowiedzialności.