Top 6 sustava čekanja za programere za Backup programere

Tražite li sustav čekanja? Ili možda tražite bolji? Evo svih informacija koje su vam potrebne!


Sustavi čekanja najbolje su čuvana tajna razvoja pozadine.

Bez pokušaja da napišem pjesmu u pohvale sustava čekanja, rekao bih da mlađi razvojni programer postaje srednji pozadinski programer nakon što nauči integrirati redove u sustav. Redovi poboljšavaju korisničko iskustvo (vidjet ćemo kako), smanjuju složenost i poboljšavaju pouzdanost u sustavu.

Svakako, za vrlo jednostavne web aplikacije s prometom i brošurama gotovo nula prometa redovi čekanja mogu biti ukupni (ili čak nemogući za instaliranje ako se nalazite u uobičajenom okruženju za zajedničko gostovanje), ali ne-trivijalne aplikacije dobit će se iz čekanja. sustavi i velike aplikacije nemogući su bez uključivanja čekanja.

Prije nego što započnemo, odricanje od odgovornosti: ako vam je već ugodno sa sustavima čekanja i želite usporediti različite mogućnosti, sljedećih nekoliko uvodnih odjeljaka potaknut će glavni san. �� Zato slobodno skočite naprijed. Uvodni dijelovi namijenjeni su onima koji imaju samo mutnu ideju o sustavima čekanja ili su samo čuli ime u prolazu.

Što je sustav čekanja?

Započnimo s razumijevanjem što je red.

Red čekanja je struktura podataka u računarskim znanostima koja oponaša stvarne redove svijeta koje vidimo oko nas. Ako, primjerice, krenete prema šalteru karata, primijetit ćete da ćete morati stajati na kraju reda, dok će osoba na početku reda prvo dobiti kartu. To je ono što nazivamo i pojavom “prvi dođe, prvi posluži”. U računarskoj znanosti, moguće je pisati programe koji svoje zadatke spremaju u red, obrađujući ih jedan po jedan na istoj osnovi prvi-prvi-posluženi.

Imajte na umu da red ne radi nijednu stvarnu obradu. To je samo privremeno skladištenje vrsta gdje zadaci čekaju dok ih nešto ne pokupi. Ako sve ovo zvuči previše apstraktno, ne brinite. To je apstraktni koncept, ali vidjet ćemo jasne primjere u sljedećem odjeljku. ��

Zašto vam trebaju sustavi čekanja?

Bez upuštanja u vrlo dugačak opis, rekla bih da je glavna potreba za sustavima čekanja zbog obrade u pozadini, paralelne izvedbe i oporavka od neuspjeha. Pogledajmo ih uz pomoć primjera:

Pozadinska obrada

Pretpostavimo da vodite marketinšku kampanju za e-trgovinu u kojoj je vrijeme najvažnije i da je vaša aplikacija izgrađena tako da aktivira potvrdnu e-poštu neposredno prije nego što kupac izvrši plaćanje i prikaže se stranica “hvala”. Ako poslužitelj e-pošte s kojim se povezujete padne, web stranica će umrijeti, narušavajući korisničko iskustvo.

Zamislite veliki broj zahtjeva za podršku koji biste dobili! U tom slučaju je bolje da ovaj zadatak slanja e-pošte gurnete u red posla i pokažete kupcu stranicu uspjeha.

Paralelno izvršenje

Mnogi programeri, posebno oni koji uglavnom kodiraju jednostavnije aplikacije sa malim prometom, navikavaju koristiti cron poslove za pozadinsku obradu. To je u redu dok veličina ulaza ne naraste toliko velika da ga nije moguće izbrisati. Na primjer, pretpostavimo da imate posao cron koji sastavlja analitička izvješća i šalje ih e-poštom korisnicima te da vaš sustav može obraditi 100 izvještaja u minuti.

Čim vaša aplikacija poraste i počne dobivati ​​više od 100 zahtjeva u minuti u prosjeku, započet će sve više i više zaostajati i nikad neće moći dovršiti sve poslove.

U sustavu čekanja ovu situaciju možete izbjeći postavljanjem više radnika koji svaki mogu odabrati posao (koji sadrži 100 izvještaja o svakom) i paralelno raditi na završetku zadatka mnogo, puno prije.

Oporavak od neuspjeha

Mi općenito ne razmišljamo o neuspjehu kao web programeri. Uzimamo zdravo za gotovo da će naši poslužitelji i API-ji koje koristimo uvijek biti na mreži. Ali stvarnost je drugačija – prekidi mreže sve su previše česti, a odlični API-ji na koje se oslanjate mogu biti smanjeni zbog problema s infrastrukturom (prije nego što kažete “ne ja!”, Ne zaboravite masivni ispad Amazon S3). Dakle, vratimo se primjeru izvješćivanja, ako dio generacije izvješća zahtijeva povezivanje s API-jem za plaćanje, a ta veza je u prekidu dvije minute, što se događa s 200 izvještaja koja nisu uspjela?

Sustavi čekanja ipak uključuju znatne troškove, međutim. Krivulja učenja prilično je strma kada koračate na potpuno novu domenu, a složenost aplikacije i implementacije se povećava, a poslovi u čekanju ne mogu se uvijek kontrolirati sa 100% preciznošću. Međutim, postoje situacije kada izgradnja aplikacije bez reda nije jednostavno moguća.

S tim izlaskom, pogledajmo neke od uobičajenih opcija danas među čekinjama / sustavima čekanja.

Redis

Redis je poznata kao trgovina ključeva i vrijednosti koja samo pohranjuje, ažurira i dohvaća nizove podataka bez znanja o strukturi podataka. Iako je to moglo biti istina ranije, danas Redis ima učinkovite i vrlo korisne strukture podataka poput popisa, razvrstanih skupova, pa čak i sustava Pub-Sub, što ga čini vrlo poželjnim za implementaciju reda.

Prednosti Redisa su:

  • Potpuno u memoriji, što rezultira bržim čitanjem / pisanjem.
  • Visoko učinkovit: Može lako podržati više od 100.000 operacija čitanja / pisanja u sekundi.
  • Izuzetno fleksibilan program postojanosti Možete ili postići maksimalan učinak po cijenu mogućeg gubitka podataka u slučaju kvarova ili postaviti u potpunosti konzervativan način da žrtvujete performanse za dosljednost.
  • Klasteri podržani izvan okvira

Imajte na umu da Redis nema nikakve apstrakcije za slanje poruka / reda u redove / oporavak, tako da morate koristiti paket ili sami izraditi lagani sustav. Primjer je da je Redis zadani rezervni red za red za PH u okviru Laravel PHP, gdje su autori okvira implementirali planer.

Učenje Redisa je lako.

RabbitMQ

Postoji nekoliko suptilnih razlika između Redisa i RabbitMQ, pa da ih prvo maknemo s puta.

Prije svega, RabbitMQ ima specijaliziraniju, dobro definiranu ulogu, i tako je izgrađen da odražava to – slanje poruka. Drugim riječima, njegova slatka točka je da djeluje kao posrednik između dva sustava, što nije slučaj za Redis, koji djeluje kao baza podataka. Kao rezultat toga, RabbitMQ pruža još nekoliko objekata koji nedostaju u Redisu: usmjeravanje poruka, ponovni pokušaji, raspodjela opterećenja itd..

Ako razmislite o tome, redovi zadataka mogu se smatrati i sustavom za razmjenu poruka, gdje planer, radnici i „podnositelji posla“ mogu misliti o subjektima koji sudjeluju u prenošenju poruka..

RabbitMQ ima sljedeće prednosti:

  • Bolje apstrakcije za prosljeđivanje poruka, smanjenje rada na razini aplikacije ako je slanje poruka ono što vam treba.
  • Izdržljiviji na nestanke i nestanke struje (nego Redis, barem prema zadanim postavkama).
  • Podrška klastera i federacije za distribuirane implementacije.
  • Korisni alati za upravljanje i nadgledanje vaših implementacija.
  • Podrška za praktički sve netrivijalne programske jezike vani.
  • Uvođenje u vaš alat pomoću alata (Docker, Kuhar, Lutka itd.).

Kada koristiti RabbitMQ? Rekao bih da je to sjajan izbor kada znate da trebate koristiti asinkrono slanje poruka, ali niste spremni riješiti se složenosti nekih drugih opcija čekanja na ovom popisu (vidi dolje).

ActiveMQ

Ako ste u poslovnom prostoru (ili gradite visoko distribuiranu i široku aplikaciju), i ne želite stalno izmišljati kotač (i praviti pogreške na putu), ActiveMQ vrijedi pogledati.

Evo u čemu se ActiveMQ ističe:

  • To je implementirano u Javi i tako ima stvarno urednu Java integraciju (slijedi JMS standard).
  • Podržani više protokola: AMQP, MQTT, STOMP, OpenWire itd.
  • Iz kutije upravlja sigurnosti, usmjeravanjem, istekom poruke, analitikom itd.
  • Podrška za popularne uzorke distribuiranih poruka, štedeći vam vrijeme i skupe pogreške.

To ne znači da je ActiveMQ dostupan samo za Javu. Ima klijente za Python, C / C ++, Node, .Net i druge ekosustave, tako da ne bi trebalo biti bojazni za mogući kolaps u budućnosti. Osim toga, ActiveMQ je izgrađen na potpuno otvorenim standardima i izgradnja vlastitih laganih klijenata trebalo bi biti jednostavno.

Imajte na umu da je ActiveMQ samo broker i da ne uključuje pomoćni vikend. I dalje ćete trebati koristiti jedan od podržanih pozadina za pohranu poruka. Ovdje sam je uključio jer nije vezan za određeni programski jezik (poput ostalih popularnih rješenja poput Celery, Sidekiq, itd.)

Amazon MQ

Amazon MQ ovdje zaslužuje brzo, ali važno spominjanje. Ako smatrate da je ActiveMQ idealno rješenje za vaše potrebe, ali ne želite se baviti izgradnjom i održavanjem infrastrukture sami, Amazon MQ nudi upravljanu uslugu kako to učiniti. Podržava sve protokole koje ActiveMQ radi – nema razlike u značajkama – budući da sam ActiveMQ koristi ispod površine.

Prednost je to što je usluga upravljana, tako da se ne trebate brinuti ni o čemu drugom nego o njezinoj upotrebi. To ima još više smisla za one implementacije koje su na AWS-u, jer druge usluge i ponude možete utjecati izravno iz vaše implementacije (na primjer brži prijenos podataka).

Amazon SQS

Ne možemo očekivati ​​da će Amazon mirno sjediti kad su u pitanju kritični dijelovi infrastrukture, zar ne? ��

I tako imamo Amazon SQS, koji je u potpunosti domaćin, jednostavna usluga čekanja (prilično doslovno) od strane poznatog giganta AWS. Još jednom, suptilne razlike su važne, stoga imajte na umu da SQS nema koncept slanja poruka. Poput Redisa, to je jednostavan dodatak za prihvaćanje i distribuciju poslova u redovima.

Pa, kada biste htjeli koristiti Amazon SQS? Evo nekoliko razloga:

  • Vi ste obožavatelj AWS-a i nećete ništa dirati (iskreno, ima mnogo ljudi vani takvih i mislim da u tome nema ništa loše).
  • Potrebno vam je host rješenje pa osigurajte da je stopa neuspjeha nula i da nijedan posao ne bude izgubljen.
  • Ne želite izgraditi klaster i to sami morate pratiti. Ili još gore, morate sastaviti nadzorne alate kada biste to vrijeme mogli koristiti da biste učinili produktivni razvoj.
  • Već imate značajna ulaganja u AWS platformu i ostati zaključan u poslovnom smislu.
  • Želite fokusiran, jednostavan sustav čekanja, bez ikakvih pahuljica povezanih s prosljeđivanjem poruka, protokolima i slično.

Sve u svemu, Amazon SQS je dobar izbor za one koji žele u svoj sustav ugraditi redove poslova i ne trebaju se brinuti sami instalirati / nadzirati stvari.

Beanstalkd

Beanstalkd postoji već duže vrijeme i testiran je u bitkama, brzi i laki podupirač za čekanje u poslu. Nekoliko je karakteristika Beanstalkda zbog čega se on znatno razlikuje od Redisa:

  • To je strogo sustav čekanja posla i ništa drugo. Vi gurate poslove na njega, a kasnije vas radnici za posao povlače. Ako vaša aplikacija ima čak i malu potrebu za prosljeđivanjem poruka, trebali biste izbjeći Beanstalkd.
  • Ne postoje napredne strukture podataka poput skupova, reda prioriteta itd.
  • Beanstalkd se naziva “Red In”, First Out (FIFO). Nema načina da se poslovi postepeno odrede.
  • Ne postoje mogućnosti za grupiranje.

Sve to rečeno Beanstalkd stvara gladak i brz sustav čekanja za jednostavne projekte koji žive na jednom poslužitelju. Mnogima je brži i stabilniji od Redisa. Dakle, ako imate pitanja s Redisom koji jednostavno ne možete riješiti bez obzira na sve, a vaše su potrebe jednostavne, Beanstalkd vrijedi pokušati.

Zaključak

Ako ste ovo čitali do sada (ili ste stigli do skim čitanja ��), postoji velika prilika da ste zainteresirani za sustave čekanja ili vam je potreban. Ako je to slučaj, popis na ovoj stranici dobro će vam poslužiti, osim ako ne tražite sustav čekanja koji se odnosi na jezik / okvir.

Volio bih da vam mogu reći da je red čekanja jednostavan i 100% pouzdan, ali nije. U neredu je i budući da je sve u pozadini i događa se vrlo brzo (pogreške mogu proći neopaženo i postati jako skupe). Ipak, redovi čekanja vrlo su potrebni izvan točke, a vidjet ćete da su moćno oružje (možda čak i najmoćnije) u vašem arsenalu. Sretno! ��

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