Jeśli masz pytania o ten projekt, napisz do nas!
Platforma, która rozwiązuje problemy wydajności i skalowalności giełd reklam
Rozwiązaliśmy największe wyzwania technicznych przy pracy z platformami SSP/giełdami reklam.
Clearcode opracowało rozwiązanie, które ułatwia zarządzanie wydajnością giełd reklam i umożliwia ich skalowanie, aby pomóc firmom skrócić czas programowania podczas procesu tworzenia SSP lub giełdy reklam.
KLIENT
Firma technologiczna
BRANŻA
Reklama programmatic
USŁUGA
AdTech
KRAJ
Polska
O projekcie
Zespół naszych deweloperów AdTech przeanalizował główne wyzwania techniczne związane z prowadzeniem giełdy reklamowej w modelu real-time bidding.
Celem projektu było:
- Rozwiązanie tych wyzwań.
- Wykorzystanie rozwiązania jako podstawy do przyszłych projektów rozwoju SSP/giełdy reklamowej.
Główne wyzwania, które postanowiliśmy rozwiązać, koncentrowały się wokół wydajności i skalowalności.
Konkretnie chcieliśmy zbudować giełdę reklamową, która może reagować na dużą liczbę żądań reklamowych i biddowania bez opóźnień.
Najważniejsze informacje
Cel
Naszym celem było sprostanie wyzwaniom związanym z wydajnością i skalowalnością, czyli powszechnym problemom w przypadku SSP/giełd reklamowych.
Rozwiązanie #1
Ze skalowalnością poradziliśmy sobie wdrażając architekturę mikroserwisów, łącząc je ze wzorcem skalowania horyzontalnego.
Rozwiązanie #2
Z wydajnością poradziliśmy sobie, wprowadzając komunikację między usługami za pomocą warstwy publikuj-prenumeruj (pub/sub) oraz opracowując populator service.
Rezultat
Stworzyliśmy rozwiązania, które zapewniają giełdzie reklam stabilną wydajność i skalowalność, dzięki czemu można sprzedawać więcej reklam DSP oraz dysponuje najnowszym asortymentem.
“Główne wyzwania, które postanowiliśmy rozwiązać, koncentrowały się wokół skalowalności i wydajności.”
Filip Dominas
PROJECT MANAGER, CLEARCODE
CEL PROJEKTU
Zespół naszych deweloperów AdTech przeanalizował główne wyzwania techniczne związane z prowadzeniem giełdy reklamowej w modelu real-time bidding.
Główne wyzwania
Główne wyzwania, które postanowiliśmy rozwiązać, koncentrowały się wokół skalowalności i wydajności.
Konkretnie chcieliśmy zbudować giełdę reklamową, która może reagować na dużą liczbę żądań reklamowych i biddingowych bez opóźnień.
Na początku zidentyfikowaliśmy następujące wyzwania techniczne:
- Aby utrzymać szybki czas odpowiedzi, giełda musi się szybko skalować.
- Zapytanie o asortyment może zajmować dużo czasu, a w odpowiedzi może pojawić się duży pakiet danych.
- Zmiany w asortymencie dokonywane przez użytkownika (np. wydawcę lub AdOps obsługującego SSP) muszą być przekazywane do wszystkich instancji giełdy.
- Proces ten nie może być wykonywany po każdej aktualizacji w SSP, ponieważ spowodowałoby to nieprzewidywalną liczbę operacji “propagacji”, co mogłoby wpłynąć na wydajność giełdy.
Bez właściwego rozwiązania tych wyzwań dostawcy SSP/giełd reklamowych napotykają następujące problemy biznesowe:
- Wydawca nie jest w stanie sprzedać całego dostępnego asortymentu, co skutkuje niskimi wskaźnikami wypełnienia (fill rate) i mniejszymi dochodami z reklam.
- Wydawca traci możliwość wyświetlenia reklamy odwiedzającemu i potencjalnym dochodom z reklam, ponieważ giełda reklamowa nie odpowiada na czas – zazwyczaj licytacja RTB kończy się w ciągu 250 ms, co oznacza, że giełda reklamowa musi otrzymać i odpowiedzieć na żądania reklamowe/licytacyjne w tych ramach czasowym.
Nasze rozwiązania
Na podstawie naszej wiedzy na temat SSP/giełd reklamowych i RTB, a także obszernej analizy tematu, rozwiązaliśmy wszystkie wyzwania.
Rozwiązaliśmy problem ze skalowalnością
Aby zapewnić skalowalność giełdy reklamowej – tj. otrzymywać, obsługiwać i przetwarzać więcej żądań reklamowych i biddongowych, wdrożyliśmy architekturę mikroserwisów w połączeniu z wzorcem skalowania horyzontalnego.
Taka architektura jest stosowana w projektach, gdzie działanie aplikacji dzieli się na indywidualne i powiązane ze sobą usługi.
Każda z takich usług może być rozwijana, wdrażana i utrzymywana niezależnie od reszty aplikacji i komunikuje się z resztą mikroserwisów za pomocą API.
Oto korzyści płynące z tego rozwiązania:
- Każdy mikroserwis może skalować się niezależnie, dzięki czemu jesteśmy w stanie wyskalować giełdę reklam do pożądanego poziomu.
- Możemy wdrażać te usługi indywidualnie, a nie jako całość, co skraca czas wdrożenia.
- Jeśli jeden mikroserwis będzie wadliwy, możemy odizolować go od reszty aplikacji. Taka wada nie wpłynie na działanie giełdy reklamowej, która wciąż pozostaje wydajna.
Rozwiązaliśmy problem z wydajnością
Główne wyzwania wydajności w SSP/giełdzie reklamowej dotyczą jej zdolności do:
- Obsługi dużych ilości zmian asortymentu dokonywanych w SSP.
- Przekazywania tych zmian do wszystkich instancji giełdy.
- Zapewnienia, aby instancje giełdy reklamowej mogły obsługiwać to zadanie wymagające dużych zasobów bez powodowania nieoczekiwanych problemów wydajnościowych w SSP.
Aby rozwiązać te wyzwania, wprowadziliśmy komunikację międzyserwisową za pomocą warstwy publikuj-prenumeruj (pub/sub) i opracowaliśmy usługę populatora.
Komunikacja międzyusługowa za pomocą warstwy publikuj-prenumeruj (pub/sub)
Pub/sub to wzorzec przesyłania wiadomości zaprojektowany do publikowania i odbierania wiadomości, subskrybując określony kanał lub temat.
Aby zrealizować wzorzec pub/sub, wybraliśmy NATS, usługę przesyłania wiadomości open-source.
Jego rolą w środowisku SSP jest informowanie instancji giełdy o wszelkich zmianach w asortymencie.
Jakie zmiany zachodzą w asortymencie?
Gdy mówimy o zmianach w asortymencie, odnosimy się do zmian dokonanych w następujących obszarach:
Suma kontrolna jednostki reklamowej – np. czy została dodana lub usunięta.
Rozmiar miejsca na reklamę – np. kwadratowy box (250×250) został zastąpiony pionowym prostokątem (240×400).
Kategorie reklamowe – np. sponsorowane, gwarantowane premium, ukierunkowane na audytorium i resztki.
Oraz wiele innych zmian.
Z uwagi na charakter usług NATS, pub/sub dostarcza prostego, bezpiecznego i szybkiego rozwiązania problemu dystrybucji wiadomości.
Ponieważ pub/sub jest rozwiązaniem bez kolejek, eliminuje wiele problemów związanych z kolejkami i ich ograniczeniami.
Populator service
Zazwyczaj, gdy zmiana jest dokonywana w SSP, każda instancja giełdy musi pobrać zmiany w asortymencie przy starcie aplikacji.
Jeśli każda instancja giełdy odpytywałaby SSP i pobierała asortyment bezpośrednio, obsługa tych żądań wymagałaby dużych zasobów i prawdopodobnie spowodowałaby awarię SSP.
Aby poradzić sobie z tym wyzwaniem, wprowadziliśmy populator service (populator), która funkcjonuje jako proxy i punkt komunikacyjny między instancjami giełdy a SSP, zapewniając wysoką wydajność giełdy.
Populator service informuje instancje giełdy o nowych zmianach, aktualizuje asortyment w instancjach giełdy w określonym interwale i przygotowuje asortyment do łatwego ładowania.
To oznacza, że zadanie wymagające dużych zasobów, jakim jest dostarczenie nowego asortymentu, jest wykonywane w przewidywalny sposób. Wyeliminowaliśmy w ten sposób problem wydajności SSP.
Jak działa populator service
Usługa:
- Pyta SSP o asortyment przy starcie aplikacji.
- Tworzy unikalny skrót dla odpowiedzi.
- Przechowuje odpowiedź jako plik w usłudze takiej jak Google Cloud Storage.
- Publikuje lokalizację pliku na temat pub/sub.
- Pyta SSP o asortyment według harmonogramu.
- Porównuje skrót odpowiedzi z poprzednim.
- Jeśli się różni, przechowuje odpowiedź i publikuje lokalizację pliku na temat pub/sub.
Aby zapewnić sobie najnowszy asortyment, giełda:
- Pyta populatora o lokalizację pliku asortymentu przy uruchamianiu.
- Subskrybuje temat pub/sub, aby otrzymywać powiadomienia o nowych plikach asortymentu.
- Pobiera nowe pliki i zastępuje nimi swój asortyment.
Po pobraniu informacje są przechowywane lokalnie przez instancje giełdy.
Dzięki temu ustawieniu giełda zawsze ma informacje o stanie inwentarza w swojej pamięci. Aby zweryfikować ich ważność, nie musi pobierać plików z przechowywania, co zajęłoby dużo czasu i zasobów; zamiast tego słucha populatora (pub/sub) w celu uzyskania informacji o ewentualnych zmianach w inwentarzu.
To przekłada się na szybszą wydajność, ponieważ nie trzeba każdorazowo prosić SSP o identyfikatory ad-slotów przy każdej aukcji RTB. Dlatego, że giełda już ma je przechowywane w bazie danych w pamięci.
Szybsza wydajność przekłada się na ogólną poprawę czasu odpowiedzi reklamy/oferty potrzebnego do przeprowadzenia aukcji RTB.
Zalety naszego rozwiązania
- Stabilność: Ponieważ zmiany w inwentarzu dokonywane w SSP są pytane tylko przez populatora, są one przewidywalne i niezależne od liczby aktualizacji w systemie.
- Skalowalność: Architektura mikroserwisowa pozwala SSP na wdrożenie dużej liczby instancji giełdy, co ostatecznie przekłada się na większe przychody z reklam dla wydawców.
- Aktualny stan inwentarza: Wszystkie instancje giełdy są informowane o zmianach w inwentarzu jednocześnie.
- Poprawiona wydajność: Wszystkie instancje giełdy pobierają nowy inwentarz jednocześnie, bez obciążania SSP ani populatora.
Technologie, które wykorzystaliśmy
TypeScript
JavaScript
React
Formik
Redux
Fastify
TypeORM
Jest
ESLint
Rezultat
Nasze rozwiązanie SSP/giełdy reklamowej zostało zaprojektowane, aby:
- Przyspieszyć fazę rozwoju SSP.
- Poprawić wydajność i skalowalność istniejących SSP.