Kūrybos sluoksniuose yra bendras posakis, kad „Full Stack Developers“ yra tarsi Šveicarijos armijos peilis. Jie gali būti ne patys aštriausi kiekvienoje plėtros užduotyje, tačiau jie yra pakankamai pajėgūs, kad būtų galima tvarkyti beveik viską, kas kuriant programinę įrangą.

Nesvarbu, ar tai Kryžminės platformos mobiliųjų telefonų plėtra Arba tikimasi, kad „Custom Web Development“, tikimasi, kad „Full Stack Developers“ naujoves ir suras išradingus sprendimus kiekvienai vystymosi kliūčiai.

Į Visas kamino kūrimasMes galime visiškai patvirtinti šį teiginį. Programinės įrangos kūrimas yra nuolatinis mokymosi procesas. Mūsų komanda dažnai susiduria su naujais iššūkiais ir darbo metu mokosi naujų dalykų. Pvz., Mes dažnai smogėme į sieną su našumo kliūtimis, ypač kai masteliau skaitymo sunkios funkcijos. Vienas neseniai iššūkis paskatino mus integruoti „Redis“ kelią, ir tai baigėsi žaidimo keitikliu ir greičiui, ir stabilumui.

Šiame tinklaraštyje apžvelgsime problemas, su kuriomis susiduriame, kaip „Redis“ padėjo, su kokiomis problemomis, su kuriomis susidūrėme įgyvendindami „Redis“, ir pateiksime keletą praktinių patarimų, kad galėtumėte pritaikyti Redis savo projektuose.

Problema: atsilikimas ir brangūs DB skambučiai

Mes statėme prietaisų skydelį naudodami „React“, Node.jsir SQL serveris. Duomenų bazėje naudojome „React“, „Frontend“, „Node.js“ ir SQL serveryje.

Kurdami prietaisų skydelį naudodamiesi šiomis trimis technologijomis, pastebėjome keletą pasikartojančių problemų:

  • Lėto API reakcijos laikas, kai srautas padidėjo, o tai reiškė
  • Nereikalingos DB užklausos dažnai prieinamiems duomenims
  • Aukštas duomenų bazės procesoriaus naudojimas, nors duomenys retai pasikeitė
  • Jausmas, kad „viskas veikė … kol pasirodys daugiau vartotojų“

Apskritai atrodė, kad mūsų projektas veikė, tačiau tik keliems vartotojams ir taip pat jis nebus mastas. Šios problemos sukėlė async užduotis, tokias kaip „Cron Jobs“, filtrai ir puslapiai skausmingai lėtai ir nenuspėjamos. Ir mes žinojome, kad dabartinė sąranka nebus mastelio didėjant vartotojo skaičiui.

Kodėl pirmiausia kyla mastelio keitimo problemos

Mastelio keitimas yra dažna kliūtis kuriant šiuolaikinę programinę įrangą. Programų plėtros paslaugų teikėjai įdėjo daug pastangų ir galvojo apie tai išspręsti. Čia yra pagrindinių priežasčių, kodėl tai atsitinka, suskirstymas:

1. Per daug pakartotinių duomenų bazės skambučių

Kiekvieną kartą, kai vartotojas atidaro prietaisų skydelį arba ką nors spustelėja, programa vėl ir vėl prašo duomenų bazės, kad gautų tuos pačius duomenis, net jei niekas nepasikeitė.

Įsivaizduokite, ar tūkstančiai žmonių iškart užduoda tą patį klausimą. Duomenų bazė turi atlikti tą patį darbą tūkstantį kartų, o tai perkrauna.

2. Daugiau apdorojimo dėl talpyklos sluoksnio

Be jokio talpyklos sluoksnio, nėra kur sulaikyti neseniai naudotus duomenis. Tai reiškia, kad kiekviena užklausa eina tiesiai į pagrindinę duomenų bazę, kiekvieną kartą atliekant visus skaičiavimus.

Tai panašu į matematikos problemos perskaičiavimą nuo nulio kiekvieną kartą, užuot tiesiog užrašę atsakymą ir pakartotinai ją naudoti.

3. Async užduotys padidino slėgį

„Async“ užduotys yra foninės užduotys, tokios kaip duomenų rinkimas, atnaujinimo suvestinės ir panašūs dalykai. Šios užduotys veikia tuo pačiu metu kaip ir vartotojo srautas ir pasiekia tą pačią duomenų bazę, todėl piko metu naudojami viskas dar lėčiau.

4. Legūs modeliai šiuolaikiniuose darbo krūviuose

Originalus dizainas puikiai veikia su nedideliu skaičiumi vartotojų. Bet jis sukurtas atsižvelgiant į mintį, kad duomenų bazė visada bus prieinama ir greita. Tačiau augant naudojimui, programa pradeda plaukti pagal visų tų tiesioginių užklausų svorį, ypač todėl, kad joje nėra tokių sistemų kaip talpyklos kaupimas ar apkrovos balansavimas.

Sprendimas: „Redis“ pristatymas kaip perskaityto talpyklos sluoksnis

Užuot tiesiogiai pateikę SQL duomenų bazę kiekvienai užklausai, nusprendėme pristatyti „Redis“ kaip pirmąjį skaitymo sluoksnį.

„Redis“ yra atvirojo kodo duomenų saugykla, dažnai naudojama kaip talpyklos, duomenų bazės ir pranešimų tarpininkas. Jis žinomas kaip ypač greitas, nes saugo duomenis atmintyje (RAM), o ne skaito iš diske panašių tradicinių duomenų bazių.

Kūrėjai naudoja „Redis“ keliais būdais, įskaitant:

  • Greitai saugoti ir gauti dažnai naudojamus duomenis
  • Sumažinus jūsų pagrindinės duomenų bazės apkrovą
  • Gerinimo reagavimo laikas vartotojams
  • Foninių darbų koordinavimas ar užduotys tarp paslaugų

Štai kaip mes pakeitėme savo programos architektūrą naudodami „Redis“:

Atnaujintas srautas

  1. „Cron“ užduotis kas kelias minutes važiavo, kad sinchronizuotų naujų „SQL Server“ duomenis į „Redis“.
  2. Visi API maršrutai, skaitomi iš „Redis“, o ne pati duomenų bazė.
  3. REDIS duomenys buvo saugomi struktūrizuotuose raktuose (pvz.

Įrankiai ir krūva

Šiam projektui mes panaudojome šiuos įrankius:

  • „Node.js“ („Express“) „Backend API“
  • „TypeOrm“, kad ištrauktumėte duomenis iš SQL
  • „IOREDIS“, skirtas pakeisti operacijas
  • Reaguokite į frontendą
  • „BullMQ“ už fono užduotis
  • „Datadog“, kad stebėtų latentinį ir talpyklos hit/Miss Cantry

Iššūkiai su Redis ir kaip mes juos išsprendėme

„Redis“ yra puikus įrankis, tačiau jis taip pat turi savo sudėtingumą. Tai sudaro jūsų duomenų kopijas, ir jūs turite įsitikinti, kad tos kopijos visada yra atnaujintos. Be to, „Redis“ atmintis gali pritrūkti vietos, o kai kurie raktai gali neveikti.

Štai kas mums pasirodė sudėtinga dirbti su „Redis“ ir tai, kaip išsprendėme šias problemas.

1. Talpyklos negaliojimo logika

Problema: Kaip išlaikyti „Redis“ sinchronizavimą su SQL duomenimis?

Sprendimas: Mes sukūrėme „Cron“ darbą, kuris važiavo kas 5 minutes, patraukėme atnaujintus įrašus ir perrašėme „Redis“ raktus partijomis (5000 įrašų už gabalą, naudojant „Async“ pažadus). Tai užtikrino šviežumą, išlaikant atminties naudojimą.

2. Atminties naudojimas sprogo

Problema: „Redis“ nekontroliuojamai augo milijonams įrašų.

Sprendimas: Mes įdiegėme nekritinių klavišų TTL („Time-to-Live“), naudotas suslėgtas vertes (pvz., JSON styginius masyvus) ir prieš talpykloje filtruojami nereikalingų stulpelių.

3. Derinimo talpyklos praleidimas praleidžia

Problema: Kartais „Redis“ grįžo tuščias, nors DB turėjo duomenis.

Sprendimas: Mes pridėjome „Datadog APM Logs + Winston“, kad būtų galima registruoti kiekvieną talpyklos praleidimą. Tai padėjo mums rasti svarbiausių pavadinimų ir neteisingo JSON analizės problemas.

Realus poveikis: atvejo analizė

Mes turėjome pagrindinį galutinį tašką /API/vartotojai/: ID/operacijos Tai palaikė filtravimą, rūšiavimą ir puslapius. Anksčiau šios situacijos išliko:

  • Šaltas atsakymas Laikas buvo 2,5–3,2 sekundės
  • Dažni 504 vartų skirtumai Paprasčiausio vartojimo metu buvo įprasta
  • Filtro užklausų metu susidūrėme

Po per redis:

  • Atsakymas į šaltį buvo sumažintas iki ~ 200ms
  • Mes daugiau nestokavome SQL hitų skaitydami
  • Apkrovos bandymo metu (1000 lygiagrečių vartotojų) buvo nulis DB perkrovos (1000)

Išmoktos pamokos ir patarimai

  • Redis yra greitas, bet tai nėra magija
    Mums vis dar reikėjo tinkamos struktūros. Naudokite nuspėjamus raktus, suspaustas vertes ir venkite talpyklos kaupimo dalykų, kurie keičiasi per dažnai.
  • „Async“ užduočių paketas yra supervalstybė
    Naudojant Pažadas.All Su partijų dydžiais (pvz., 20 pažadų už po 5000 įrašų) padėjo sinchronizuoti didžiulius duomenų rinkinius, neuždegus sistemos.
  • Stebėjimas yra neginčijamas
    Be „Datadog“ (ar panašaus), mes nebūtume pastebėję „Silent Redis“ klaidų. Visada žurnalo talpyklos paspaudimai/praleidžia stebimumą.
  • Laikykitės atsarginių atlošų vietoje
    Jei „Redis“ nepasiekiama, jūsų programa vis tiek turėtų aptarnauti vartotojus. Naudokite DB kaip atsarginę kopiją tik tada, kai talpyklos nepavyksta.

Galutinės mintys

Visų krūvos kūrėjų paklausa kiekvienais metais išaugo 35%. Ateityje tai liks vienas iš labiausiai paklausūs technologijų vaidmenų. Tačiau tai yra nuolat besivystantis vaidmuo, kai jūsų mokymasis darbe niekada nesibaigia.

Jei 2025 m. Jūs esate kūrėjas, keičiantis pilną „Stack“ programą, „Redis“ nebėra pasirenkama. Tai būtina greitai, keičiamoms sistemoms. Nesvarbu, ar kuriate su mazgu, „Python“ ar „React“, talpyklos kaupimo strategijos, tokios kaip „Redis-First“ skaitymo modeliai, išsaugos jūsų programos našumą ir jūsų sveiką protą).

Mums ši integracija ne tik pagerino rezultatus; Tai padėjo mums išmokti realaus pasaulio „Async“ paketą, stebimumą ir sistemos dizainą, kurie visi yra paklausūs kiekvienoje rimtoje įmonėje šiandien. Tegul Redis daro sunkų kėlimą. Jūs sutelkiate dėmesį į geresnių funkcijų kūrimą.

„Xavor“ siūlo aukščiausio lygio programų mobiliesiems kūrimo paslaugas, kurios gali sukurti aukštos kokybės, keičiamas programas, kurios gali tvarkyti bet kokį darbo krūvį bet kokiomis sąlygomis. Mūsų kūrėjai moka plazdėti, reaguoti, „node.js“, „Xamarin“ ir kitas pagrindines sistemas ir įrankius, kad būtų sukurtos geriausios įmanomos mobiliosios programos.

Gaukite nemokamą konsultacijų sesiją su mūsų kūrėjais susisiekdami su mumis adresu (El. Paštas apsaugotas).

Nuoroda į informacijos šaltinį

Draugai: - Marketingo paslaugos - Teisinės konsultacijos - Skaidrių skenavimas - Fotofilmų kūrimas - Karščiausios naujienos - Ultragarsinis tyrimas - Saulius Narbutas - Įvaizdžio kūrimas - Veidoskaita - Nuotekų valymo įrenginiai -  Padelio treniruotės - Pranešimai spaudai -