Gutun hilen ilarak vs. memoria barruko bersaiakerak
Gutun hilen ilarak eta memorian barruko bersaiakerak funtsean bi ikuspegi desberdin dira sistema banatuetan mezuak prozesatzeko akatsak kudeatzeko; DLQ-ek mezu problematikoen isolamendu iraunkorra eskaintzen dute, eta memorian barruko bersaiakerek, berriz, iraunkortasun-gainkargarik gabeko berreskurapen arina eta latentzia txikikoa.
Nabarmendunak
Gutun hilen ilarak huts egindako mezuak mugagabe mantentzen ditu, eta horrek ezinbestekoak bihurtzen ditu auditoria eta betetze egoeretarako.
Memoria barruko bersaiakerak mikrosegundo mailako gainkargarekin exekutatzen dira, ilara-eragiketetarako milisegundo baino gehiagoko latentzien aldean.
DLQ-ek eragiketa-talde bereiziei akatsak kudeatzeko aukera ematen diete aplikazio-kodearen aldaketak zabaldu gabe.
Memoria barruko hurbilketetatik bersailkatzeko ekaitzak hutsegite sekuentzialak eragin ditzakete zirkuitu-hausleek mugatzen ez badituzte.
Zer da Gutun Hilen Ilarak?
Mezu-ilara iraunkorrak, geroago ikuskatu eta berriro prozesatzeko huts egindako mezuak jasotzen dituztenak.
Mezuak DLQ-ra eraman dira gehienezko berriro saiatzeko atalaseak gainditu ondoren, mezuaren edukia eta metadatuak osorik mantenduz.
Jatorriz IBM MQ eta JMS bezalako enpresa-mezularitza sistemetan ezagun egin zen, orain AWS SQS, Azure Service Bus eta RabbitMQ-n estandarra da.
Gaitu akatsen analisi deskonektatua prozesatzeko bide nagusiak blokeatu gabe, taldeei arazoak konpondu eta mezuak berriro erreproduzitzeko aukera emanez.
Normalean monitorizazio eta alerta sistemekin integratzen dira mezuak hildako gutun egoeran sartzen direnean operadoreei jakinarazteko.
Onartu denboran oinarritutako iraungitze-politikak, AWS SQS DLQ-ek mezuak 14 egunez gordetzen baitituzte lehenespenez.
Zer da Memorian dauden berriro saiakerak?
Berehalako berriro saiatzeko logika prozesu berean exekutatzen da, kanpoko mezuen iraunkortasunik gabe.
Berriro saiatzeko politikek normalean atzerapen esponentziala ezartzen dute, saiakeren artean atzerapenak bikoiztuz (adibidez, 1s, 2s, 4s, 8s)
Polly (.NET), Resilience4j (Java) eta Retry (Python) bezalako framework-ek zirkuitu-hausleen ereduekin konfigura daitezkeen berriro saiatzeko estrategiak eskaintzen dituzte.
Ez kontsumitu azpiegitura-baliabide gehigarririk prozesatzeko aplikazioaren memoria eta CPUaz gain.
Aplikazioa berriro saiatzean erabat huts egiten badu, berriro saiatzeko egoera eta, agian, jatorrizko eragiketa-testuingurua galduz.
Egokiena sareko akatsak, datu-baseko konexio-denborak eta zerbitzuaren aldi baterako erabilgarritasun eza bezalako aldi baterako hutsegiteetarako
Konparazio Taula
Ezaugarria
Gutun Hilen Ilarak
Memorian dauden berriro saiakerak
Iraunkortasuna
Mezu iraunkorrak ilara bereizi batean gordetzea
Iraungikorra, aplikazioaren memorian bakarrik bizi da
Akatsen Berreskuratzea
Aplikazioen kraskadurak eta berrabiarazteak gainditzen ditu
Prozesua berriro saiatzean amaitzen bada galduta
Azpiegitura Kostua
Ilara gehigarriko biltegiratze eta transferentzia kostuak
Aplikazioaz gain, ez dago azpiegitura gehigarririk
Ikusgarritasun operatiboa
Neurketa, alarma eta errepikapen gaitasunak barneratuta
Erregistro eta monitorizazio pertsonalizatua behar du
Latentziaren eragina
Ilara-eragiketengatik latentzia handiagoa
Latentzia minimoa, berehalako berriro exekuzioa
Erabilera Kasuaren Egokitzapena
Prozesamendu bermatua behar duten lan-fluxu kritikoak
Akats iragankorrak dituzten eragiketa ez-kritikoak
Mezuen ordena
Jatorrizko ordena gorde edo eten dezake
Prozesu barruko sekuentzia naturalki mantentzen du
Talde Lankidetza
Konponketa eta errepikapenerako talde-jabetza bereizia ahalbidetzen du
Aplikazioen hedapenarekin oso lotuta
Xehetasunak alderatzea
Fidagarritasun eta Iraunkortasun Bermeak
Mezu hilen ilarak nabarmentzen dira mezuak ezin dituzunean galdu. Mezu bat DLQ batean iristen denean, bertan geratzen da norbaitek berariaz konpontzen duen arte, nahiz eta zerbitzu osoa berrabiarazi. Memoria barruko saiakerak, aldiz, airean lurruntzen dira zure pod-a huts egiten badu edo prozesua inplementazio batean hiltzen bada. Horrek DLQak aukera nabaria bihurtzen ditu finantza-transakzioetarako, inbentarioaren eguneratzeetarako edo betetzearekin lotutako edozer gauzatarako.
Errendimendu eta latentzia ezaugarriak
Memoria barruko bersaiakerek abiadurari dagokionez irabazten dute zalantzarik gabe. Ez dago sareko jauzirik, ez ilara API deirik, ez serializazio-gasturik, lo azkar bat egin eta berriro saiatu besterik ez. Segundoko milaka mezu prozesatzen dituzten errendimendu handiko sistemetan, aldea metatu egiten da. DLQek latentzia neurgarria sortzen dute, batez ere mezuek sarearen mugak zeharkatu behar dituztenean ilara-zerbitzu bereizi batera iristeko. Talde batzuek hibridazioa egiten dute, memoria barruko bersaiakerak erabiliz konponketa azkar iragankorrak egiteko eta DLQak azken segurtasun-sare gisa.
Eragiketa-konplexutasuna eta arazketa
DLQek eragiketa-muga argi bat sortzen dute. Zure txandako ingeniariari mezuak bidaltzen zaizkio, gutun hilen ilara aztertzen du, azpiko akatsa konpontzen du eta mezuak erreproduzitzen ditu. Lan-fluxu ondo ulertzen da. Memoria barruko berregiteek akatsak aplikazioen erregistroetan ezkutatzen dituzte, eta askotan erregistroen agregazioa eta kontrol-panel pertsonalizatuak behar dira berregite-saiakerak gertatzen ari direla jakiteko ere. Berregite-saiakerak agortzen direnean, hutsegiteen ebazlearen amesgaiztoa da, batez ere mikrozerbitzuetan, non hutsegitea inork ohartu aurretik behera hedatu daitekeen.
Eskala handiko kostuen inguruko gogoetak
Hodeiko ilara zerbitzuek eskaera bakoitzeko eta gordetako mezu bakoitzeko kobratzen dute. Milioi bat mezu dituen DLQ lanpetu batek eragin txikia izan dezake zure fakturan, batez ere atxikipen politikak eskuzabalak badira. Memoria barruko bersailkapenak funtsean doakoak dira azpiegituraren ikuspegitik, nahiz eta memoria kontsumitzen duten eta beste hari batzuk gosez hil ditzaketen bersailkapen ekaitzak mugatzen ez badira. Kostuarekiko sentikorrak diren startupentzat, honek askotan memoria barruko ikuspegietara jotzen du diru-sarrerak fidagarritasun prima justifikatu arte.
Arkitektura Modernoekin Integrazioa
Gertaeretan oinarritutako arkitekturek eta zerbitzaririk gabeko funtzioek inoiz baino garrantzitsuagoak bihurtu dituzte DLQak. AWS Lambda, Azure Functions eta Google Cloud Functions-ek guztiek onartzen dituzte letra hilen konfigurazioak modu natiboan. Memoria barruko saiakerak naturalago egokitzen dira aplikazio zerbitzari tradizionaletan eta prozesu luzeetan. Kubernetes eta konputazio iragankorraren gorakadak memoria barruko estrategiak konplikatu ditu, edukiontziak abisu gutxirekin amaitu daitezke, eta horrek DLQak gero eta erakargarriagoak bihurtzen ditu, lehen saihesten zituzten taldeentzat ere.
Abantailak eta Erabiltzailearen interfazea
Gutun Hilen Ilarak
Abantailak
+Mezuaren iraunkortasuna bermatuta
+Eragiketa-eskualdaketa garbia
+Hodeiko integrazio natiboa
+Erreprodukzioa eta auditoria onartzen ditu
+Isolatuen porrotaren eragina
Erabiltzailearen interfazea
−Azpiegitura-kostu gehigarria
−Muturretik muturrerako latentzia handiagoa
−Erreprodukzio mekanismoa behar du
−Mezu zaharkituak pilatu ditzake
−Arkitektura konplexuagoa.
Memorian dauden berriro saiakerak
Abantailak
+Latentzia oso baxua
+Azpiegitura gehigarririk ez
+Hasieran inplementatzeko erraza.
+Gutxieneko funtzionamendu-gastuak
+Akatsen feedback azkarra
Erabiltzailearen interfazea
−Prozesuaren kraskaduran galduta
−Operazioetatik ezkutatuta.
−Berriro saiatzeko ekaitzak eragin ditzake
−Aplikazioaren bizi-zikloarekiko lotura estua
−Atzera begirako akatsak egitea zailagoa
Ohiko uste okerrak
Mitologia
Gutun hilen ilarak aplikazioetan berriro saiatzeko logikarik behar ez izatea eragiten du.
Errealitatea
DLQak saiakerak agortu ondoren helmuga dira, ez dira saiakeren logikaren ordezkoak. Inplementazio gehienek berehalako edo atzeratutako saiakerak egiten dituzte mezua hilda kontsideratu aurretik. Tarteko saiakerarik gabe, behin-behineko akats bakoitzak berehala gainezka egingo lioke zure DLQari.
Mitologia
Memoria barruko bersaiakerak beti dira azkarragoak eta, beraz, errendimendu hobea lortzeko.
Errealitatea
Banakako bersaiakera azkarragoak diren arren, memoria barruko mugarik gabeko bersaiek hari-multzoak saturatu eta sistemaren errendimendu orokorra hondatu dezakete. Errendimenduaren abantaila azkar desagertzen da bersaiakera-ekaitzek zirkuitu-hausleak eragiten dituztenean edo beheranzko zerbitzuak gainkargatzen dituztenean.
Mitologia
Gutun hilen ilaretan dauden mezuak automatikoki prozesatzen dira geroago.
Errealitatea
DLQak biltegiratze pasiboa dira, ez da ezer gertatzen mezu horiei gizakiaren edo ekintza automatizatu esplizitua gertatu arte. Talde askok hilabeteak daramatzaten mezuak DLQetan aurkitu dituzte, inork ez duelako erreprodukzio-hodirik eraiki.
Mitologia
DLQ-en eta memorian dauden bersaieren artean esklusiboki aukeratu behar duzu.
Errealitatea
Patroi hauek ederki osatzen dute elkar. Sistema erresilienteenek memoria barruko bersaiakera erabiltzen dute atzerapen esponentzialarekin berreskuratze azkarra lortzeko, eta gero DLQetara igotzen dira atalase arrazoizko baten ondoren. Geruzatan banatutako ikuspegi honek hutsegite modu iragankorrak eta iraunkorrak hartzen ditu barne.
Mitologia
Memoria barruko bersaiakerak ez dira egokiak sistema banatuetarako.
Errealitatea
DLQ-ak baino sendoagoak ez diren arren, memoria barruko bersaiakera ohikoak eta egokiak dira sistema banatuetan eragiketa idempotente eta ez-kritikoetarako. Gakoa bersaiatzeko estrategia porrotaren benetako negozio-ondorioekin bat etortzea da, ez eredu bakarra guztientzat balio duela suposatzea.
Mitologia
Gutun hilen ilarak sistemaren etenaldietan mezuak galtzea saihesten du.
Errealitatea
DLQ-ek ilara-sistemak onartutako mezuetarako bakarrik laguntzen dute. Mezua ez bada inoiz ilara nagusira iristen sare-partizio baten edo ekoizlearen akats baten ondorioz, DLQ-ak ezin du modu magikoan berreskuratu. Muturretik muturrerako fidagarritasunak ekoizlearen aldeko iraunkortasuna ere eskatzen du.
Sarritan Egindako Galderak
Zerk eragiten du, zehazki, mezu bat gutun hilen ilarara mugitzea?
Mezuak normalean DLQ batean sartzen dira konfiguratutako berriro saiakerak agortu ondoren, eta horrek esan nahi du SQS-n jasotze kopuru maximoa gainditzea, hainbat kontsumitzailetan entrega huts egitea edo aplikazioaren kodeak esplizituki ukatzea. Abiarazle zehatza plataformaren arabera aldatzen da, AWS SQS-k jasotze kopuru maximoa zehazten duen birgidatze politika bat erabiltzen du, eta Azure Service Bus-ek entrega kopurua jarraitzen du. Atalase hori gainditzen duenean, mezularitza azpiegiturak automatikoki mugitzen edo kopiatzen du mezua dagokion gutun hilen ilarara.
Nola kudeatzen dituzte memoria barruko berrabiarazteek prozesuen berrabiarazteak edo kraskadurak?
Ez dute egiten, eta hori da haien oinarrizko muga. Edozein bersaialdi egoera martxan dagoen prozesuaren heap-ean soilik existitzen da. Aplikazioa huts egiten badu, hedapen batean hiltzen bada edo edukiontzia berriro programatzen bada, zain dauden bersaialdi guztiak eta haien testuingurua desagertzen dira. Gertaera horiei aurre egin behar dieten eragiketetarako, bersaialdi mekanismo iraunkorrak behar dituzu, DLQ bat, datu-basean oinarritutako lan-ilara bat edo Celery edo Hangfire bezalako banatutako zeregin-sistemak izan.
Sistema berean konbina al ditzakezu gutun hilen ilarak memoria barruko bersaiakerekin?
Noski, eta hau da, hain zuzen ere, talde askorentzat jardunbide egokia. Ohiko ereduak memorian bertan egiten diren saiakerak dakartza, atzerapen esponentzialarekin, berehalako berreskuratze iragankorra lortzeko, esaterako, hiru saiakera segundo gutxitan. Horiek huts egiten badute, mezua edo eragiketa DLQ euskarria duen ilara batean argitaratzen da, kudeaketa iraunkorra lortzeko. Horrek memorian bertan egiten diren saiakeren abiadura ematen dizu akatsetarako eta DLQen segurtasuna arazo iraunkorretarako.
Zer monitorizazio konfiguratu beharko zenuke gutun hilen ilaretarako?
Gutxienez, konfiguratu alarmak ilararen sakoneran, mezu zaharrenaren adinaren eta sarrerako mezuen tasaren arabera. DLQ iristeen bat-bateko igoera batek normalean akats bat adierazi ohi du. Mezuen adinaren alertek errepikapena gertatzen ez den kasuak detektatzen dituzte. Talde askok DLQ mezuen eta behar bezala prozesatutako mezuen arteko erlazioa ere jarraitzen dute osasun-adierazle gisa. CloudWatch, Azure Monitor edo Datadog-ek guztiek neurketa horiek azaleratu ditzakete orrialde-integrazioarekin.
Ba al dago DLQ-en eta memoria barruko bersaiakeren alternatibak?
Hainbat ereduk antzeko beharrei erantzuten diete. Irteerako ontziaren ereduak gertaerak negozio-datuekin transakzionalki mantentzen ditu, atomizitatea bermatuz. Saga ereduak banatutako transakzio luzeak kudeatzen ditu konpentsazio-ekintzekin. Sidekiq edo pg-boss bezalako datu-baseetan oinarritutako lan-ilarek iraunkortasuna eskaintzen dute mezu-bitartekari dedikaturik gabe. Gertaeren jatorriak egoera berreraikitzen du eranskin-bakarrik dagoen erregistro batetik, berriro saiatzearen semantika desberdinduz. Aukera egokia zure koherentzia-eskakizunen eta dagoen azpiegituraren araberakoa da.
Nola erreproduzitu mezu hilen ilara bateko mezuak modu seguruan?
Ez erreproduzitu inoiz zuzenean jatorrizko ilarara ikuskatu gabe, hori begizta infinituen errezeta baita erroko kausa jarraitzen badu. Horren ordez, hustu DLQ mezuak analisi-ingurune bereizi batera, aztertu lagin adierazgarriak hutsegite-eredua identifikatzeko, konpondu azpiko arazoa eta, ondoren, erreproduzitu berriro multzoka monitorizazioarekin. AWS-k DLQ birbideratze-funtzioak eskaintzen ditu, eta Amazon EventBridge Pipes bezalako tresnek baldintzapeko erreprodukzio-fluxuak automatiza ditzakete.
Zerk egiten du memoria barruko bersaiakera bat berriro saiatzeko politika ona?
Jitter-arekin batera atzerapen esponentziala da urrezko estandarra. Jitterrik gabe, hainbat bezeroen bersailkapen sinkronizatuek arazo larriak sor ditzakete berreskuratzen diren zerbitzuen aurka. Mugatu gehienezko atzerapena itxaronaldi mugagabeak saihesteko, eta ezarri beti gehienezko bersailkapen kopuru bat. Kontuan hartu hutsegite-tasak atalaseak gainditzen dituztenean bersailkapenak erabat gelditzen dituzten etengailuak, beheranzko zerbitzuei berreskuratzeko denbora emanez, erori direnean gogortu beharrean.
Zerbitzaririk gabeko funtzioek ondo funtzionatzen al dute memoria barruko bersaiakerekin?
Ez bereziki. Lambda eta antzeko funtzioak egoerarik gabekoak eta iraupen laburrekoak izateko diseinatuta daude. Hamabost minutuko exekuzio-denbora maximoak esan nahi du memorian berriro saiatzeko leihoa mugatuta dagoela. Garrantzitsuagoa dena, Lambdak huts egiten badu, exekuzio-testuinguru osoa desagertzen da. Zerbitzaririk gabeko arkitekturek kanpoko egoeraren alde egiten dute, eta horrek DLQak edo berriro saiatzeko logika integratua duten urrats-funtzioak memorian dauden ikuspegiak baino askoz ere egokitasun naturalagoak bihurtzen ditu.
Nola desberdintzen dira mezuen ordenazioari buruzko kezkak ikuspegi hauen artean?
DLQ-ek ordenazio-bermeak zaildu ditzakete. Zure ilara nagusia FIFO bada, mezuak DLQ batera eta DLQ batetik mugitzeak sekuentzia eten dezake, plataformak ordena berariaz mantentzen ez badu behintzat. Kontsumitzaile bakar baten memorian dauden berriro saiakerek kontsumitzaile horren mezuen ordena mantentzen dute modu naturalean, nahiz eta kontsumitzaile anitzek paraleloan prozesatzen jarraitzen duten. Sistema batzuek sekuentzia-zenbakiak edo aplikazio-mailako ordena erabiltzen dituzte sekuentzia egokia berreraikitzeko edozein berriro saiatzeko mekanismoren ondoren.
Zer segurtasun-kontu hartzen dira kontuan gutun hilen ilaretan?
DLQek zure ilara nagusiek bezalako datu sentikor berdinak dituzte, batzuetan gehiago, hutsegiteen testuingurua barne hartzen baitute. Aplikatu enkriptazio, sarbide-kontrol eta auditoria-erregistro berdinak. Kontuz ibili erreproduzitzeko mekanismoekin, mezu zaharrak berriro prozesatzeak albo-ondorio ustekabekoak sor ditzake beheranzko sistemak idempotenteak ez badira. Araututako industria batzuek onarpen-fluxu esplizituak behar dituzte DLQ mezuak atzitu edo erreproduzitu aurretik.
Noiz saihestu behar dituzu memoria barruko bersaiakera guztiz?
Saihestu itzazu prozesatzeak idempotenteak ez diren albo-ondorioak dituenean, kreditu-txartel bat bi aldiz kobratzea berriro saiatzeko katastrofikoa da. Saihestu itzazu behin-behineko semantikak garrantzia duenean eta deduplikaziorik ez duzunean. Ez fidatu itzazu exekuzio luzeko eragiketetarako, non prozesuak ez duen nahikoa iraungo berriro saiakerak osatzeko. Eta ez erabili itzazu eragiketa-taldeek kode-aldaketak zabaldu gabe huts-ereduen ikusgarritasuna behar dutenean.
Nola alderatzen dira kostuak enpresa eskalan?
SQS ilara estandarrak eta DLQak dituen AWS konfigurazio tipiko batek milioi bat mezuko dolar batzuk exekutatu ditzake, gehi gordetako mezuen biltegiratzea. Hilero milaka milioi prozesatzen dituen sistema batentzat, hau material bihurtzen da. Memoria barruko bersaiakerek kostua konputaziora aldatzen dute, eta dagoeneko ordaintzen ari zara hori. Hala ere, bersaiakeren ekaitzek CPUa eta memoria igo ditzakete, eta instantzia tamaina handiagoak behar izan ditzakete. Jabetza kostu osoaren analisi gehienek memoria barruko sistema lehenesten dute kritikotasun txikiko bolumen handiko lanetarako eta DLQak bolumen txikiko funtsezko lan-fluxuetarako.
Epaia
Aukeratu gutun hilen ilarak mezu-galera onartezina denean eta eragiketa-taldeek akatsen muga argiak kudeatu behar dituztenean. Aukeratu memoria barruko saiakerak abiadura garrantzitsuena denean, azpiegituraren sinpletasuna baloratzen denean eta akatsak benetan iragankorrak direnean, sistemikoak baino. Sistema heldu askok biak konbinatzen dituzte, memoria barruko saiakerak erabiliz berehalako berreskurapenerako eta DLQak babes-neurri gisa.