Asosiy qismga o‘tish
← Barcha ishlar

AuraFlix

Striming backendi. Bu yerda ikkita qiziq masala bor: ijroni tez boshlash va har ko‘rishda Postgres’ga yozmasdan ko‘rishlarni sanash.

Fayl yetib kelishidan oldin ijroni boshlash

Videoni bitta javob sifatida berish — tomoshabinni butun fayl kelguncha kutishga majbur qilish demak. Yechim HTTP range requests: pleyer bayt oralig‘ini so‘raydi, server o‘sha bo‘lakni 206 bilan qaytaradi, va ijro birinchi bo‘lakdayoq boshlanadi — qolgani orqadan oqib keladi. Oldinga o‘tkazish ham shu sababdan ishlaydi: pleyer kerakli oraliqqa to‘g‘ridan-to‘g‘ri sakraydi.

Ijro bir-ikki soniyada boshlanadi. Odam qolishi yoki ketishini aynan shu raqam hal qiladi.

Bazani urmasdan ko‘rishlarni sanash

Ko‘rishlar hisoblagichi — aldamchi qimmat funksiya. Sodda yozilganda har ijro Postgres’ga yozuvga aylanadi, va eng ko‘p ko‘riladigan video bitta qator uchun eng katta raqobatni aynan tizim eng band paytida yaratadi.

Shuning uchun hisob so‘rov yo‘lida Redis’ga tushadi, fon vazifasi esa uni Postgres’ga to‘p-to‘p yozadi. Postgres har ijroga bitta yozuv o‘rniga davriy to‘plangan yangilanishni ko‘radi. Hisob eventually consistent bo‘lib qoladi — ko‘rishlar hisoblagichi uchun bu murosa emas, to‘g‘ri tanlov.

Sxema

SQLAlchemy 2 modellari va Alembic migratsiyalari. ORM men to‘g‘ridan-to‘g‘ri yozadiganidan yomonroq so‘rov chiqargan joylarda SQL qo‘lda yozilgan.

AuraFlix — Salohiddin Yo'ldoshev