6 populiariausios eilių sistemos, skirtos programinės įrangos kūrėjams

Ar jūs ieškote eilių sistemos? O gal jūs ieškote geresnio? Čia yra visa jums reikalinga informacija!


Eilių eilės sistemos yra geriausiai saugoma užpakalinių programų kūrimo paslaptis.

Nebandydamas parašyti eilėraščio, girdamas eilės sistemas, sakyčiau, kad jaunesnysis užpakalinių programų kūrėjas tampa vidutinio lygio užpakalinių programų kūrėju, kai jis išmoksta integruoti eiles į sistemą. Eilės pagerina klientų patirtį (pamatysime kaip), sumažina sistemos sudėtingumą ir padidina sistemos patikimumą.

Žinoma, labai paprastoms žiniatinklio programoms, kurių srautas beveik nulis, ir internetinėms brošiūroms skirtose svetainėse eilės gali būti bendros (arba net neįmanomos įdiegti, jei esate tipiškoje bendrojo prieglobos aplinkoje), tačiau visos ne trivialios programos gaus naudos iš eilių sudarymo sistemos ir didelės programos yra neįmanomos be eilės.

Prieš mums pradedant, atsisakymas: jei jums jau patinka eilių sistemos ir norite palyginti įvairias parinktis, kiti keli įvadiniai skyriai sukels daug miego. �� Taigi drąsiai šokk į priekį. Įvadiniai skyriai skirti tiems, kurie turi tik miglotą idėją apie eilių sudarymo sistemas ar tiesiog išgirdo pavadinimą pravažiuojant.

Kas yra eilių sistema?

Pradėkime nuo to, kas yra eilė.

Eilė yra kompiuterių mokslo duomenų struktūra, kuri gerai imituoja realias eilutes, kurias matome aplink mus. Pavyzdžiui, jei einate į bilietų kasą, pastebėsite, kad turėsite stovėti eilės pabaigoje, o eilės pradžioje esantis asmuo bilietą gaus pirmiausia. Tai mes taip pat vadiname „pirmas atėjai, pirmas gavai“ reiškiniu. Kompiuterijos moksle galima parašyti programas, kurios savo užduotis saugo eilėje, apdorodamos jas po vieną tuo pačiu principu, kad atėjai, pirmas gavai..

Atminkite, kad eilėje nėra atliekamas tikrasis apdorojimas. Tai tiesiog laikinas rūšių saugojimas, kai užduotys laukia, kol jas kažkas paims. Jei visa tai skamba per daug abstrakčiai, nesijaudinkite. Tai yra abstrakti sąvoka, tačiau kitame skyriuje pamatysime aiškius pavyzdžius. ��

Kodėl jums reikia eilių sistemos?

Nesigilindamas į labai ilgą aprašymą, sakyčiau, pagrindinis eilių sistemų poreikis yra dėl foninio apdorojimo, lygiagretaus vykdymo ir atkūrimo po nesėkmės. Pažvelkime į šiuos pavyzdžius:

Fono apdorojimas

Tarkime, kad vykdote el. Prekybos rinkodaros kampaniją, kur laikas yra svarbiausias ir jūsų programa yra sukurta taip, kad ji išsiųs patvirtinimo el. Laišką prieš klientui užbaigiant mokėjimą ir bus rodomas puslapis „ačiū“. Jei pašto serveris, prie kurio jungiatės, neveikia, internetinis puslapis tiesiog žūsta, o tai sugadins vartotojo patirtį.

Įsivaizduokite, kiek gausite palaikymo užklausų! Tokiu atveju šią el. Pašto siuntimo užduotį geriau perkelti į darbo eilę ir parodyti klientui sėkmės puslapį.

Lygiagretus vykdymas

Daugelis kūrėjų, ypač tie, kurie dažniausiai koduoja paprastesnes, mažai srauto turinčias programas, įprasti naudoti „cron“ užduotis foniniam apdorojimui. Puiku, kol įvesties dydis išauga toks didelis, kad jo neįmanoma išvalyti. Pvz., Tarkime, kad turite „cron“ užduotį, kuri kaupia analizės ataskaitas ir siunčia jas vartotojams el. Paštu, ir kad jūsų sistema gali apdoroti 100 ataskaitų per minutę.

Kai tik jūsų programa išaugs ir pradės gauti vidutiniškai daugiau nei 100 užklausų per minutę, ji pradės vis labiau atsilikti ir niekada negalės atlikti visų darbų..

Eilių sudarymo sistemoje šios situacijos galima išvengti sukūrus kelis darbuotojus, kurie kiekvienas gali pasirinkti darbą (kiekviename yra 100 ataskaitų, kuriuos reikia atlikti) ir dirbti lygiagrečiai, kad žymiai greičiau atliktų užduotį..

Atsigavimas po nesėkmės

Paprastai negalvojame apie nesėkmes kaip interneto kūrėjai. Mes savaime suprantame, kad mūsų serveriai ir mūsų naudojamos API visada bus prisijungę. Tačiau realybė yra kitokia – tinklo pertrūkiai yra per daug įprasti, o puikios API, kuriomis pasitikite, gali sumažėti dėl infrastruktūros problemų (prieš sakydami „ne aš!“, Nepamirškite masinis „Amazon S3“ prastova). Taigi, grįždami prie ataskaitų teikimo pavyzdžio, jei tam tikroje ataskaitų generavimo dalyje jums reikia prisijungti prie mokėjimų API ir tas ryšys nutrūksta 2 minutes, kas atsitiks su 200 ataskaitų, kurios nepavyko?

Vis dėlto eilių sudarymo sistemos apima nemažai pridėtinių išlaidų. Mokymosi kreivė yra gana staigi, nes žengiate į visiškai naują domeną, todėl jūsų programos ir diegimo sudėtingumas padidėja, o eilėje esančių darbų ne visada galima valdyti 100% tikslumu. Beje, yra situacijų, kai sukurti programą be eilių tiesiog neįmanoma.

Neatsižvelgdami į tai, pažvelkime į kai kurias įprastas parinktis, kurias šiandien sudaro eilės užpakalinės programos / sistemos.

Redis

Redis yra žinomas kaip pagrindinės vertės parduotuvė, kuri tiesiog saugo, atnaujina ir nuskaito duomenų eilutes, nežinodama apie duomenų struktūrą. Nors tai galėjo būti tiesa anksčiau, šiandien „Redis“ turi veiksmingas ir labai naudingas duomenų struktūras, tokias kaip sąrašai, surūšiuoti rinkiniai ir net „Pub-Sub“ sistema, todėl labai pageidautina įgyvendinti eilę..

„Redis“ pranašumai yra šie:

  • Visiškai atminties duomenų bazėje, todėl greitesnis skaitymas / rašymas.
  • Labai efektyvus: gali lengvai palaikyti daugiau nei 100 000 skaitymo / rašymo operacijų per sekundę.
  • Labai lanksti patvarumo schema. Galite arba pasiekti maksimalų našumą, nes prarandami duomenys, prarandantys duomenis, arba nustatyti visiškai konservatyvų režimą, kad paaukotumėte našumą dėl nuoseklumo..
  • Klasteriai, palaikomi lauke

Atkreipkite dėmesį, kad „Redis“ neturi jokių pranešimų / eilių sudarymo / atkūrimo abstrakcijų, todėl jums arba reikia naudoti paketą, arba patys susikurti lengvą sistemą. Pavyzdys yra tai, kad „Redis“ yra numatytasis eilės pagrindas „Laravel“ PHP sistemai, kur rėmelio autoriai įdiegė planuoklę..

Mokosi Redžio yra lengva.

„RabbitMQ“

Yra keli subtilūs skirtumai tarp “Redis” ir ” „RabbitMQ“, todėl pirmiausia pašalinkime juos iš kelio.

Visų pirma, „RabbitMQ“ vaidmuo yra labiau specializuotas, aiškiai apibrėžtas, todėl jis sukurtas atspindėti tai – žinučių siuntimas. Kitaip tariant, jos mėgstamiausia vieta yra tarpininkauti tarp dviejų sistemų, o tai netaikoma „Redis“, veikiančiai kaip duomenų bazė. Todėl „RabbitMQ“ teikia dar keletą priemonių, kurių trūksta „Redis“: pranešimų nukreipimas, pakartojimai, apkrovos paskirstymas ir kt..

Jei pagalvojate, užduočių eilės taip pat gali būti laikomos pranešimų sistema, kai planuotojas, darbuotojai ir darbo „pateikėjai“ gali būti laikomi subjektais, dalyvaujančiais pranešimų perdavime..

„RabbitMQ“ turi šiuos privalumus:

  • Geresnės abstrakcijos pranešant žinutes, sumažinant darbą programos lygiu, jei jums reikalingas žinučių perdavimas.
  • Atsparesni elektros energijos tiekimo sutrikimams ir nutrūkstančioms medžiagoms (bent jau „Redis“).
  • Klasterių ir federacijos palaikymas paskirstomiems diegimams.
  • Naudingi įrankiai jūsų dislokacijų valdymui ir stebėjimui.
  • Palaikymas praktiškai visoms ne trivialioms programavimo kalboms.
  • Diegimas pasirinktu įrankiu („Docker“, „Chef“, „Lėlė“ ir kt.).

Kada naudoti „RabbitMQ“? Aš sakyčiau, kad tai puikus pasirinkimas, kai žinai, kad reikia naudoti asinchroninį pranešimų perdavimą, bet nesi pasirengęs spręsti kai kurių kitų šio sąrašo eilių sudarymo parinkčių sudėtingumo problemą (žr. Žemiau).

„ActiveMQ“

Jei esate verslo erdvėje (ar kuriate plačiai paskirstytą ir didelio masto programą) ir nenorite visą laiką išradinėti rato (ir daryti klaidų), „ActiveMQ“ verta pažiūrėti.

Štai kur „ActiveMQ“ pranašesni:

  • Ji įdiegta „Java“, todėl joje yra tikrai tvarkingas „Java“ integravimas (atitinka JMS standartą).
  • Palaikomi keli protokolai: AMQP, MQTT, STOMP, OpenWire ir kt.
  • Tvarko saugumą, maršruto nustatymą, pranešimų galiojimo pabaigą, analizę ir kt.
  • Parengtas populiarių paskirstytų pranešimų modelių palaikymas, taupantis laiką ir brangiai kainuojančias klaidas.

Tai nereiškia, kad „ActiveMQ“ galima tik „Java“. Jis turi „Python“, „C / C ++“, „Node“, „.Net“ ir kitų ekosistemų klientus, todėl ateityje neturėtų kilti susirūpinimo dėl galimo žlugimo. Be to, „ActiveMQ“ sukurta remiantis visiškai atvirais standartais ir sukurti savo lengviems klientams turėtų būti lengva.

Visa tai, kas pasakyta ir padaryta, atminkite, kad „ActiveMQ“ yra tik tarpininkas ir neapima pagrindinės programos. Pranešimams saugoti vis tiek reikės naudoti vieną iš palaikomų užpakalinių elementų. Aš jį įtraukiau čia, nes jis nėra susietas su tam tikra programavimo kalba (kaip ir kiti populiarūs sprendimai, tokie kaip salierai, „Sidekiq“ ir kt.)

„Amazon MQ“

„Amazon MQ“ nusipelno greito, bet svarbaus paminėjimo. Jei manote, kad „ActiveMQ“ yra idealus sprendimas jūsų poreikiams, tačiau nenorite patys kurti ir prižiūrėti infrastruktūros, „Amazon MQ“ siūlo valdytą paslaugą. Jis palaiko visus „ActiveMQ“ veikiančius protokolus – savybės niekuo nesiskiria – nes jis pats naudoja „ActiveMQ“ po paviršiumi.

Privalumas yra tai, kad tai yra valdoma paslauga, todėl jums nereikia jaudintis dėl nieko, išskyrus naudojimąsi ja. Tai dar svarbiau tiems diegimams, kurie yra AWS, nes jūs galite panaudoti kitas paslaugas ir pasiūlymus tiesiogiai iš savo dislokavimo (pvz., Spartesnis duomenų perdavimas).

„Amazon“ SQS

Negalime tikėtis, kad „Amazon“ ramiai sės, kai bus kritinės infrastruktūros elementai, ar ne? ��

Ir taip mes turime „Amazon“ SQS, kuri yra visiškai priglobta, paprasta eilės paslauga (gana pažodžiui), kurią teikia gerai žinoma milžinė AWS. Vėlgi, subtilūs skirtumai yra svarbūs, todėl atminkite, kad SQS neturi pranešimo perdavimo koncepcijos. Kaip ir „Redis“, tai yra paprastas pagrindas priimti ir paskirstyti darbus eilėse.

Taigi, kada norėtumėte naudoti „Amazon SQS“? Štai keletas priežasčių:

  • Jūs esate AWS gerbėjas ir daugiau nieko neliesite (sąžiningai, ten yra daugybė žmonių, ir aš manau, kad čia nėra nieko blogo).
  • Jums reikia priglobto sprendimo, todėl įsitikinkite, kad nesėkmių lygis yra lygus nuliui ir neprarandama nė viena užduotis.
  • Nenorite kurti klasterio ir turite patys jį stebėti. Arba, dar blogiau, turite sukurti stebėjimo priemones, kai galėtumėte panaudoti tą laiką produktyviam tobulėjimui.
  • Jūs jau turite didelių investicijų į AWS platformą, o verslas yra prasmingas.
  • Norite tikslingos, paprastos eilių sistemos be jokių pūkų, susijusių su pranešimų perdavimu, protokolais ir niekuo..

Apskritai, „Amazon SQS“ yra tvirtas pasirinkimas tiems, kurie nori į savo sistemą įtraukti darbo eiles ir nereikia nerimauti dėl to, kad patys įdiegia / stebi dalykus..

„Beanstalkd“

„Beanstalkd“ yra jau ilgą laiką ir yra mūšio išbandytas, greitas, lengvas darbo eilės pagrindas. Yra keletas „Beanstalkd“ savybių, dėl kurių jis labai skiriasi nuo „Redis“:

  • Griežtai tai yra darbo eilių sistema ir nieko daugiau. Jūs stumiate prie jo darbus, kuriuos vėliau traukia darbo darbuotojai. Taigi, jei jūsų programai reikia net nedidelio pranešimų perdavimo poreikio, norėtumėte išvengti „Beanstalkd“.
  • Nėra išplėstinių duomenų struktūrų, tokių kaip rinkiniai, prioritetinės eilės ir kt.
  • „Beanstalkd“ yra vadinama „FIFO“ eilute „pirmą kartą įeinant, pirmą kartą išeinant“. Nėra galimybės suskirstyti darbų pagal prioritetus.
  • Nėra galimybių klasteruoti.

Visa tai sakė, kad „Beanstalkd“ sukuria slidžią ir greitą eilių sistemą paprastiems projektams, kurie gyvena viename serveryje. Daugeliui jis yra greitesnis ir stabilesnis nei „Redis“. Taigi, jei turite Problemos su „Redis“, kad jums atrodo, kad nieko nesprendžiate, o jūsų poreikiai yra paprasti, todėl „Beanstalkd“ verta išbandyti.

Išvada

Jei jūs taip gerai perskaitėte (arba pasiekėte čia kaip neskaitytą skaitymą ��), yra nemaža tikimybė, kad jus domina eilių sistemos ar jums jos reikia. Jei taip, šiame puslapyje pateiktas sąrašas bus jums naudingas, nebent jūs ieškote kalbos / rėmų specifinės eilių sistemos..

Norėčiau, kad galėčiau pasakyti, kad eilių sudarymas yra paprastas ir 100% patikimas, tačiau taip nėra. Nepatogu, nes viskas vyksta fone ir vyksta labai greitai (klaidos gali likti nepastebėtos ir pasidaryti labai brangios). Vis dėlto eilės labai reikalingos už taško, ir jūs pastebėsite, kad jie yra galingas ginklas (gal net galingiausias) jūsų arsenale. Sėkmės! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map