#programowanie #java #systemdesign
Mirki, czytam sobie różne pytania z system design i natrafiłem na coś takiego:

System do wydawania kuponów gdzie miałem się skupić na funkcjonalności do zapewnienie, że jeden kupon może być użyty tylko określoną liczbę razy. Z takich wymagań konkretnych to wysokie availability 99,999, response poniżej 100ms, założenie że będzie 2000tps


Jakbyście do tego podeszli? ChatGPT sugeruje

@Transactional
@lock(LockModeType.PESSIMISTIC_WRITE)
@query("SELECT k FROM Kupon k WHERE k.kod = :kod")
  • 6
@Patres nie lepiej to ogarnąć pojedynczym update'em SQL? Coś jak "UPDATE coupon SET usagesLeft = usagesLeft - 1 WHERE Id = ? AND usagesLeft > 0"
I tylko sprawdzić czy się udało z odpowiedzi bazy.
Całą robotę zapewnienia spójności zrzucamy na bazę. A jak to za wolno działa to rozrzucić kupony przez sharding na wiele baz danych.
  • Odpowiedz
@ElTalento: jedną vmke wyklucza wymaganie HA.
@Patres: Co do zadania to przypadek wręcz książkowy dla Cassandra / Datastax Astra. Rozproszona architektura, shared nothing, dostępność 99,9999 a 2000 TPS to pikuś (ta baza robi 350 tys zapytań na sekundę na... laptopie). Tickety oczywiście aktualizujesz jednym transakcyjnym UPDATE I baza ogarnie za Ciebie spójność automatycznie. Ty po stronie aplikacji tylko musisz sprawdzić wynik zapytania czy update się udał.
  • Odpowiedz
Czy #aws #cognito to dobry provider do rejestracji i logowania użytkowników?

Jak zabezpieczyć api? Chciałbym że do api mogły uderzyć urządzenia oraz użytkownicy. Nie wiem jak to najlepiej zrobić i nie wiem jak dobrze ugryźć temat.
Najbardziej sensownym pomysłem jest "Bearer " który dostajemy po zalogowaniu i dodajemy go do każdego requesta. Czy urządzenia mają mieć taki sam mechanizm autoryzowania swoich requestów?

#programowanie #solutiondesign #systemdesign