Cloudflare vraj „nečelil útoku“ — len ich sieť položila vlastná neschopnosť spracovať trochu väčší súbor. Jedna zmena oprávnení, databáza vypľuje obézny config, polovica clustru vyrobí blud, druhá polovica sa snaží tváriť normálne, všetko sa prepíše, rozsype, ožije, znova umrie… a admini medzitým naháňajú neexistujúci DDoS. Na konci to opravili ručným nahratím starej verzie a reštartom proxy — globálny gigant zachránený metódou „vypnúť a zapnúť“. World-class service!
Vis jakej je rozdil mezi tebou a profikem? Profik rozhone nikdy nic takhle epicky nepodela. Profik totiz predevsim nikdy nic nikde nemeni za behu bez jakyhokoli testu.
Takze nejzbytecnejsi komet tisicileti je ten tvuj.
To je tak maximalne podstatou jirsakova jcloudu. Ve slusny spolecnosti se jakakoli zmena nejdriv otestuje (coz muze trvat klidne i par mesicu), pak se stanovi termin kdy se nasadi, a pokud se to tyka zakazniku, tak se jim to s dostatecnym predstihem oznami.
Mimochodem jirsaku, mnou navrzeny infrastruktury fungujou tak, ze muzu jakoukou komponentu kdykoli vypnout, a nicemu to nevadi ... pak si ji muzu prenastavit/patchnout/... tomu se totiz dika distribuovana infrastruktura, kterou bych v cmoudech povazoval za zcela samozrejmou. A ne ze zmenim nekde jeden textak, a lehne to cely.
Navic se zmeny typicky delaji tak, ze se aplikuji na cast infra, a ne na celou najednou. Takze ja bych prisel mozna o par serveru, mozna by se trosku zhorsily latence, ale rozhodne by to nelehlo komplet.
Jednomu se vkrádá otázka, proč teda Cloudflare má spoustu zákazníků po celém světě a je špičkou ve svém oboru, zatímco vy ne. Že byste byl nedoceněný génius?
A skutecne o to stoji? :-) Ono to realne jde aplikovat na cokoliv, klidne na zdrojaky kernelu nebo pouzivaneho webserveru... kolik lidi do nich kouka? ;-) Realita je takova, ze lidi o ruznych "low-level" vecech proste nemaji potrebu vedet.
No ne, tady jde o to, že robustnost se projeví teprve, až je problém. To že tam je kýbl SPoF na normální provoz nemá vliv a služba může fungovat skvěle a nulová redundance aspoň nežere dolary, až se to jednou sesype.
Což neříkám, že je přímo případ Cloudflare, ale jen reaguji na nesmyslný argument.
A kolik z tech co ted hejti Cloudflare maji svou vlastni infrastrukturu skutecne robustni? :-) At se pochlubi. Hadam, ze u hromady diskutujicich skoncime uz u toho, ze ani svou domaci wifi nemaj redundantni a s failoverem k jinemu ISP... coz se projevi v momente, kdy se sit tomu jejich primarnimu ISP sesype, ze? ;-) Kolik lidi provozuje sve komercni aplikace na single-serveru, co kdyz umre, tak nastoupi argumenty, jak chudaci trati miliony za hodinu? :D Ano, vzdycky je to o penezich. Problem byva, ze lidi typicky ani nechteji moc platit za sluzby a za infrastrukturu, co jim jen zachrani prdel, kdyz neco shori.... protoze je to "zbytecny".
Tohle není domácí wifi ani soukromý webový server. Produkční infra je trochu jiný level. Tohle ale nebudu vysvětlovat. Kdo dělá, ten ví, kdo nedělá, nepochopí. Jde o to, že ono to pár let opravdu může fungovat i když je to ojebané.
Produkcni (korporatni) infra v podobe single-serveru je pomerne casty jev. Dost casto i za single linkou. Zadne HA... jen hromada zchainovanych SPOFu :) A kdo to dela, tak vi ze udelat to poradne neni zrovna levny.
To není pravda. Na úrovni HW je redundantní vše, protože za to dodavatelé nesou odpovědnost a musí se aktualizovat FW. SPoF vzniká tam, kde nastupuje nekompetentnost. Ale vážně, jestli tady napíši pojmy, jako např. fabric, trunk, PITR nebo třeba quorum a Vy si musíte otevřít google/AI, tak o tom fakt NEDISKUTUJTE.
V každém případě to je OT, jde o to, že i ten jeden server, jedna DB, jeden drát může opravdu roky fungovat a nosit peníze, ale kdyby to klient věděl, tak prchá.
O tom, jaké služby poskytuje Cloudflare a jaké má výpadky klienti vědí, nebo mohou vědět. Přesto hromadně Cloudflare neopouštějí a neprchají k anonymním diskutérům, právě naopak.
Ja si na to google otevirat nemusim. Vy diskutujete o tom, jak to stavite vy sam, ale u toho popirate realitu toho, jak to funguje na mnoha jinych mistech. Kez by si kazdy byl ochotny platit treba jen ten PITR... ehm, nekdo nezaplati ani ten tri(+)nodovy cluster, kde pak lze resit nejake qorum. Na single serveru quorum nevyresite, tam to ma binarni stav... funguje/nefunguje. Na nektere veci by stacil i tupy active/backup. Ale ani ten nekde nenajdete. A nekdy je to podporeno i pocitem, ze kdyz to neni vyuzito na maximum, tak je to "spatne" - samozrejme, ze v prostedi kde se resi redundance musi byt i nejake bezne nepouzite... rezervy. Protoze je sice hezky, ze si vyresite nejake quorum, ale kdyz trinodovy cluster po sebevrazde jednoho padne na hubu cely, protoze holt ten zbytek to neutahne tak je proste postaveny spatne, zeano.
To je furt dokola, je to o penezich. Jasne, ze neni problem postavit reseni vami popsane. Ale kdyz se "vycenite", zakaznik vam obratem rekne, ze na tohle proste nema budget... protoze holt nepostavite trinodovy cluster za cenu jednoho serveru, zeano :D Samozrejme je to o tom, ze si kazdy ve finale zvazi i ta rizika. Perfekcionismus holt neni za levno. Tak to je. A nevim proc to popirate :-)
Fajn, ale to je pořád hrozně malé měřítko. Tady problém moc nebude, server se vypíná a restartuje hodně často. Když už nic, tak co chvíli přijde vendor a chce nový FW. To je přinejmenším vidět.
Dneska bývá problém jinde a to, že se nakoupí kupa serverů a na ně se dá jeden cluster, jeden systém, jedno něco, do čeho se blbě drbne a ono se to celé sesype (nebo třeba spadne 8. update po 7, které byly v pohodě a který by byl taky v pohodě, kdyby těch 7 před ním tam nenechalo nějaký artefakt se kterým ten 8. už nepočítá... A to se prostě stává). A tady jde právě o to, jestli se sesype všechno a nebo jenom postradatelná část. To je přesně, co jsem psal, to že má nějaký cloud provider hodně zákazníků neznamená, že tam takovou časovanou bombu nemá.
Nechci se vkrádat do rozjetého flamu ani nějak moc zbytečně kopat do CF, ale co mě překvapuje i na některých předchozích chybách je to, že tam nemají nějaký postupný deploy (tady na to musel zareagovat hned první router) a nezastaví jej automaticky po první (nebo definovaném) počtu chyb. Tady se zřejmě jednalo o systém, který generuje konfiguraci pro celou síť, tak tam bych opravdu čekal u každého jednotlivého deploye (automatického) nějakou ochranu, když to na první skupině selže.
Tohle se ostatně běžně řeší i ve firmách, které sice nemají tisíce HW serverů, ale i když se někde updatuje třeba ten FW, tak se to dělá pomalu, opatrně a postupně a rozhodně ne tak, že se půlka strojů odstaví z virtualizačního clusteru a potom se to vše updatuje současně.
This feature file is refreshed every few minutes and published to our entire network and allows us to react to variations in traffic flows across the Internet. It allows us to react to new types of bots and new bot attacks. So it’s critical that it is rolled out frequently and rapidly as bad actors change their tactics quickly.
Potřebují ty změny promítnout rychle, ne čekat, jak se to bude chovat.
Jasně, ale tady ani není třeba postupný deploy. Crash -> config rollback -> start není komplikovaný postup.
Tak ono to nevybouchlo instantne vsude a vsechno - bylo to ve stavu, kdy neco bezelo a neco ne. Aneb v ten samy moment, z tehoz pocitace... jeden web bezel v pohode, jiny koncil na chybe.
Dalsi ze spekulaci na tema, ze postupny deploy neni. Ale on je, a i prubeh incidentu u CF to prokazal - realne to nebylo tak, ze by popadalo 100% veci zaraz. Ve finale to byla jen loterie, kdy zalezelo na jakem worker-node dany traffic koncil. To se samozrejme muze stat i u postupneho deploye, kdy novou verzi aplikace s chybou deploynete klidne jen na jeden produkcni node a loadbalancer vam tam zacne sypat traffic - proste to zacne nahodne pod rukama vybuchovat. A ten deploy se dnes obvykle rucne nedela - jako ze by nekdo rucne instaloval balik a u toho cumel do logu, zeano. Jsou chyby, co se na testovacim prostredi ani nemusi projevit - to se vam snad nikdy nestalo? Ja nevim, tohle je spis debata "generalu po bitve", co se schovavaji za svou anonymitu - a realne nevime, kdeze co provozuji - abysme si treba z historie vystourali jejich prusvihy, zeano :D
" ze ani svou domaci wifi nemaj redundantni a s failoverem k jinemu ISP"
Jakou skodu zpusobi, ze hodinu nebo den nebo klidne mesic ... nepojede nejaka domaci wifi? Navic tu domaci wifi umim za minutu nahradit ... staci klipnout do telefonu, aktivovat data a udelat z nej APcko ze?
"že tam nemají nějaký postupný deploy"
Presne ...ale jirsak s danym ti urcite vysvetli, ze takhle je to prece normalka, protoze oni to takhle delaj ... I kdyz delam jen "nevinou" aktualizaci cehokoli, tak to probiha postupne. Rozhodne nepatchnu tisicovku serveru, abych pak resil, ze jich tisicovka lehne.
Kdyz to nekdo resit nechce, tak neni nic jednodussiho, necham si podepsat pekne pisemne, ze byl dotycny seznamen s riziky (aby mi pak nevykladal, ze za to muzu ja) a je vymalovano. Ja mam jistotu, ze az to lehne, coz je vzdy jen otazka casu, tak se budu valet smichy.
BTW: Nazbyva nez opet odkazat na henten 100% garantovanej geograficky zalohovanej cmoud casablanky.
BTW2: Letos vlete mi kamos delajici pro jeden korporatek rikal, ze nejaka jejich divize zavedla usporu na lidech, a nastavili na serverech automaticky aktualizace i restarty ... lol. Prej to netrvalo ani mesic, a cely to lehlo.
Co jakou skodu zpusobi zalezi vzdy na okolnostech. A samozrejme umerne tomu se aplikuji opatreni. I ta domaci wifina muze - treba pro pracujici z domova pomerne dulezita vec, zeano. Ale chapu, ze ve "vasem" boomerskem svete chodi vsichni od sesti do dvou na sichtu do fabriky :D
To, ze tam nemaji postupny deploy je vas nicim nepodlozeny blabol.
Realne kdyby se nejaky incident stal u vas, tak hadam ze budete tydny mlzit a vymyslet pohadky o tom, jak to vlastne nebyl problem u vas. Tak jak maji vam podobni cechackove ve zvyku :D Lhat, zatloukat, mlzit.
Ad wifi - tohle se snad řeší mobilními daty, ne tím, že si domů potáhnu 2 kabely.
Ad deploy - no, evidentně to selhalo, takže to mají špatně
Ad incident - Ale tohle se děje a musí se na to myslet už při návrhu (všiml jste si někdy, že např. produkční switche mají neperzistetní konfiguraci? Když se změna nepovede, tak to nějaký psík restartuje a automaticky se nabootuje funkční konfigurace). A když se i tak něco stane, tak se týdny nemlží, ale okamžitě se valí do DTC to opravit.
My co pamatujeme CatOS bychom s tou neperzistentnosti konfigurace za vsech okolnosti nesouhlasili :-) A rozhodne neslo o nejaka "SoHo" zarizeni, zeano - ale sestitisicove modularni Catalysty. Jinak lepsi sitova zarizeni dnes maji konfiguracni rezim s transakcemi a ev. i automatickym rollbackem, co to problem napravi rychleji nez reboot... takze ten vas "psik" je spis z dnesniho pohledu taky amaterismus, kdyz uz jste se tu dal na poucovani stran "spravnych profi reseni".
Samozejme ze se o pricinach bezne mlzi - svede se to na DDoS, chybu na strane vyrobce/dodavatele nebo klidne i provozovatele datacentra (uz jsem videl borce, kterym vypadla jedna vetev - ale soucet prikonu na A+B byl vetsi nez jedna vetev utahla - ale byla to "chyba datacentra")... no proste cokoliv, jen aby za blbce nebyl "dotycny". Holt country for the future :D
Nepochopil, takže ještě jednou. Jde o to, aby se ten systém sám vrátil zpět, způsob závisí na tom, co je k dispozici, jestli to umí sám, nebo potřebuje pošťouchnout je jedno. Na CF nic takového zřejmě myšleno nebylo.
V kazdem reseni se muze vyskytnout chyba a pokud vy tvrdite, ze jste nikdy chybu navzdory "idealnimu designu" neudelal, tak proste jen lzete :-) Chyby se dely, deji... a dit budou.
"Profik totiz predevsim nikdy nic nikde nemeni za behu bez jakyhokoli testu."
Jestli jsem spravne pochopil vsechno to odstartovalo spatne opravneni u DB. Jak tohle chces otestovat jako profik?
Tak u kritických věcí bejvá celkem dobrým nápadem mít testovku shodnou s produkcí, přes kterou musej projít všechny změny, že ano.
Nic jako "testovka" shodna s produkci neexistuje. V idealni pripade jsou prakticky totozne, ale vzdycky existuje nejaky rozdil.
Jistě. Nebejvá tam georedundance, místo clusteru se tam houfně strká jeden node, zátěž tam zdaleka není produkční, "občas se to rozjede protože Pepa je tu novej a Franta potřeboval opravit P1 outage" apod.
Což ale nemění nic na tom, že včerejší výpadek (a dost dalších velkých před tím) by to v pohodě zachytilo.
Jestli je pravda co psali v postmortem pak to mohlo klidne byt i takhle. Otestovali to na testovaci strukture a slo to. Pak to nasadili a zacalo to padat. Tak rychle dali rollback. Jenze to nepomohlo protoze ten veliky soubor se siril napric strukturou. Takze co. Panika. Vedeli ze kod maji stejny jako pred padem, strukturu taky a stejne to slo na hubu. Pro marketaky rychle vygenerovali "mame DDOS" a horecne hledali.
Naopak velmi dobře zlvádnutý fuckup, lidské chyby se stávají.
Ale protože je to world-class service, tak to poměrně rychle identifikovali, vyřešili a transparentně zveřejinili hned druhý den. Chybí mi ještě nějaká opatření, aby se něco podobného nestalo, ale myslím, že i toto již mají dnes navrženo.
Kdyby to byla jakákoliv jiná společnost, mlžila by o tom ještě následující týdny nebo měsíce.
Jasne, kazda firma pak dela meeting, kde se navrhuje jak tomu predejit - btw ja jsme to predpokladal, nebot zverejnioli, ze delaji velke updaty vsech serveroven, viz seznam zmen a rikal jsme si, ze to bude spise souviset s tohle change.
Ale prijde mi to, ze neco nechali vygenerovat AI a ta to podelala, nebo nekym, naprosto nekompetentnim, kdo to nezkontroloval a neotestoval - nebo neco prehledl.
Za me je divne, ze neco selze jen proto, ze je soubor vetsi - co je to vetsi ? aby bylo jasno, nekolik MB velky textovy soubor nebo DB ma opravdu hodne zaznamu, takze ty soubory mohly mit max par desitek MB a rozhodne se nejednalo o GB - ale mohly tam byt duplicitni zaznamy a ty 1. mohly byt spatne - jak znamo, script muze najit, nastavit a skoncit ..
No to vi jen oni, realitu co presne se stalo samozrejme firma nikdy nepusti ven, proc by to delal, pusti neco co vypada profesionalne - vice mene managerum staci, hele nastala chyba na nasi strane kdyz jsme delali update - chybu jsme nasliu, opravili, pracujeme na tom, jak ji predchazet, opravujme nase automaticke scripty .... zbytek je tam jen pro rypavejsi managery - kdyby je nekdo hackl, tak to nepriznaji ;-)
To ze sem nekde neco zmenil a ono to potom chciplo, nezjistuju celej den, ale tak 2 minuty. Obnovit snap bude trvat maximalne dalsi 2. Takze si nejspis nikdo ani nevsimne, ze neco 5 minut (dojdu si pro kafe) nebezelo.
A ted si vezmi, ze to zamlzili a rekli jen co chteli rict, jsou na to odbornici, aby rekli neco, co vypada OK, zatajit to nelze, tak neco reknou v ramci krizoveho managementu - je to neco, co se tak jako tak obcas stava vsude.
Cloudflare je známo tím, že vždycky zveřejňují post mortem analýzy, včetně toho, jaké chyby oni sami udělali. Mám-li si vybrat mezi tvrzením Cloudflare a ničím nepodloženým tvrzením anonyma v diskusi, věřím Cloudflare.
Chyby se stávají, ale v poslední době se až moc ukazuje, jak moc jsou mnohé služby závislé na podobných globálních subjektech jako Cloudflare (nebo Google, Amazon, Microsoft, Apple... vyberte své oblíbence) :-/
Další žába na prameni informací, o které se příliš neuvažuje a jejíž technický a provozní stav se (vzhledem k rozsahu její působnosti) ukazuje stejně tristní jako další podobné služby. Marketingově se to ale prodává dobře, tak proč investovat do robustní technologie a řádné správy, když správné PR vyjde levněji a technický dluh se před zákazníky schová. No smutný to je, no...
Máš to podobné ako v akejkoľvek inej infraštruktúre.
Všade sa rieši rovnaký problém, či službu rozvíjať ďalšími fičúrami alebo upratať technický dlh.
Použitím cloudflare túto otázku prenechávaš dodávateľovi, a teda strácaš nad tým kontrolu. Ale zároveň šetríš náklady, ktoré by si musel investovať, aby si obdobnú infraštruktúru mal vo svojej správe. A taktiež (o tom veľa manažérov neuvažuje) namiesto infraštruktúry, ktorú vieš ovplyvniť a centralizovať-decentralizovať sa stávaš závislým od úzkeho hrdla pár poskytovateľov "cloudu".
"Ale zároveň šetríš náklady"
To je naprosty scifi, zadny naklady nesetris. Tak maximalne ziskavas nekoho (coz je samozrejme pro managorment zasadni vyhoda) na koho muzes ukazat a rict "za to muzou oni", ale financne te to bude stat klidne i radove vic.
Protoze narozdil od vlastni infra kterou si dimenzujes pro svoje potreby, a provozujes si ji za naklady, tak tady musis zaplatit mnohem vic za bizuterii (protoze pole pro 10 disku stoji radove min nez pole pro 10 000 disku PER DISK atd atd atd), a predevsim musis zaplatit marzi provozovatele.
Jako bonus je vse zcela mimo tvoji kontrolu a kdyz se neco podela, jako ze se 100% podela, tak sem muzes maximalne modlit.
To ze tvoje data budou verejne na netu je uz jen takovej malej a zcela jistej bonus.
Môžeš šetriť náklady, pretože "úspory z rozsahu". Do určitej veľkosti je (alebo môže byť) vlastná infraštruktúra a predovšetkým odborníci kompetentní ju správne navrhnúť a udržiavať drahšia než to zaplatiť od dodávateľa, ktorý ten návrh platí len raz, a náklady na údržbu nerastú s veľkosťou lineárne...
Vyborne, budeme popirat uz i zaklady mikroekonomie :-) Holt z vas mluvi "hospodsky expert" z vysoke skoly zivota.
Design, kdy když složba má omezenou velikost konfiguračního souboru mi přijde ... zvláštní. Ale řekněme, že proto byly nějaké technickéí důvody. Nicméně pak bych si měl dát sakra majzla, abych nevygeneroval příliš velký soubor - je to vlastně stejný problém, jako kdyby ten soubor byl třeba syntakticky špatně.
Jasně, že po bitvě je každý generál a v praxi jsou věci složité a ne takhle jasné, ale stejně mi to přijde primárně jako problém SW architektury.
Technické dôvody sú dobré, pamäť je predalokovaná aby sa šetril výkon dokonca i na alokáciách.
Problém vznikol pri prepise kódu do Rustu, kde možnosť, že sa objekt nezmestí do pamäte bola síce ošetrená, ale len "korektným" pádom celého programu.
Design, kdy když složba má omezenou velikost konfiguračního souboru mi přijde ... zvláštní.
Já nechápu tohle divení se. Z podstaty věci je velikost souboru vždy omezená. Kdyby ničím jiným, tak dostupným místem. Rozdíl je jenom v tom, zda je to pevný limit, který je někde záměrně zadaný, validuje se a pokud možno je v dokumentaci. Nebo jestli je to limit, který plyne z okolností a může se v průběhu času měnit, třeba když ubyde místo na disku.
V tomhle případě to vypadá spíš na tu druhou variantu. Pokud je soubor vždy přibližně stejně velký, nebo třeba roste pomalu v čase s růstem sítě, dá se pochopit, že tam validace na vstupu není – protože správný soubor prostě bude vždy dostatečně malý na to, aby bylo možné jej zpracovat.
Ověřovat velikost souboru při generování samozřejmě může být jeden ze způsobů, jak validovat, že se generuje správně. Jenže když to budete navrhovat, nejspíš si řeknete „to by byla dost výjimečná chyba, že by se generování souboru pokazilo zrovna takovým způsobem, že by se soubor výrazně zvětšil“. Ostatně validace nějakého generátoru se budou zaměřovat spíš na to, že tam nějaká data nechybí nebo tam nejsou špatná data navíc. Validovat, že tam není něco duplicitně – co teď to asi Cloudflare do validací přidá, ale není to něco, s čím byste obvykle počítal hned od začátku. Zejména když by ty duplicitní záznamy nejspíš nevadily, kdyby jich nebylo moc.
Nejde o duplicitní záznamy, ty by samy o sobě ničemu nevadily. Šlo mi o to, že na straně konsumera byl nějaký constraint (velikost souboru), který nebyl kontrolovaný na straně producera.
Samozřejmě, když tam pošlu velký sobor (1 TB), tak to spadne tak jako tak, ale vygenerování tak velkého souboru je dost nepravděpodobné. Tady byl ale limit evidentně mnohem níž a jeho překročení časem pravděpodobné (a taky se to stalo).
Jenže na straně konzumenta nebyl záměrný limit. Na straně konzumenta to bylo řešené způsobem „do téhle paměti se to vždycky vejde“, protože se to tam vždy vešlo a velikost se neměnila. Překročení toho limitu nebylo pravděpodobné, a nestalo se to běžným růstem souboru (který snad běžně vůbec neroste). Ten soubor byl větší právě kvůli těm duplicitním záznamům.
Mimochodem, limit by měl v tomto případě stanovit producent, ten ví, jak mohou být data velká. Konzumenti se pak musí přizpůsobit.
Já souhlasím s tím, že nastavovat a kontrolovat limity je dobrá věc. Ale zrovna velikost souborů se omezuje málokdy, pokud to není z důvodu velikosti úložiště nebo to nejsou limity souborového systému. Zejména když jsou to interní soubory a ten soubor má nějakou svou přirozenou velikost, tj. nehrozí, že mi nějaký záškodník pošle obří soubor.
V článku dosť výrazne chýba informácia, že pád spôsobilo neošetrené pretečenie pamäte v Ruste, v kóde, ktorý predtým dlhé roky fungoval a potom bol prepísaný do Rustu.
Each module running on our proxy service has a number of limits in place to avoid unbounded memory consumption and to preallocate memory as a performance optimization (...) Again, the limit exists because for performance reasons we preallocate memory for the features.
When the bad file with more than 200 features was propagated to our servers, this limit was hit — resulting in the system panicking. The FL2 Rust code that makes the check and was the source of the unhandled error is shown below: (...)
This resulted in the following panic which in turn resulted in a 5xx error.
K žádnému přetečení paměti nedošlo. Daný kód vrátil validní Result type, který se Cloudflare rozhodl řešit přes explicitní panic při chybě. Což je věc která není u inicializace aplikace zas tak velké zlo, pokud ta chyba není recoverable. Správně by měli udělat rollback konfigurace a nahodit to znova.
19. 11. 2025, 14:58 editováno autorem komentáře
Souhlas, zjevně paměti bylo málo, kód detekoval chybu, se kterou kód vyšší úrovně nepočítal. Z hlediska Rust korektní chování.
Co mi tam chybí, je neschopnost identifikovat chybu poměrně dlouhou dobu. A tam nejspíš doplácí Rust na chybějící podporu vyjímek. U Java by se zpropagoval celý stacktrace a někde dole by bylo "file too big to fit into memory". U Rust a ostatních jazyků bez exception bude jenom Result-Err a hledej jehlu v kupce sena... Logování může samozřejmě pomoct, ale to se nedělá v low level funkcích, u kterých se ani neví, jestli chyba je běžná nebo neočekávaná.
Tohle nesouvisí s podporou nebo nepodporou výjimek. Pokud do svého programu dám log chyby "too many items in configuration", tak z jedné chybové hlášky je naprosto jasné, co je špatně.
"Pokud do svého programu dám log chyby"
Jenze to bys musel kontrolovat vstupy, a to dneska neni v mode.
- unwrap explicitně vrací stack trace.
- pokud by mohli něco zlepšit, bylo by to použití expect(), který by jim umožnil přidat důvod pro panic
- propagaci trace řeší snad každá knihovna pro zpracování chyb. Konkrétně třeba anyhow, eyre, miette, error_stack
Jinými slovy, je to sice memory safe, ale způsobilo to celosvětový výpadek? :)
Spekulace: Dalo by se tomu zabránit, kdyby to nepřepisovali?
Já jsem si ale celkem všiml, že v rustu toto lidi dělají - tak nějak předpokládají, že když se to zkompiluje, tak to nemá chyby - testů je většinou málo... ne všechny crates jsou kvalitní a často se mi stalo, že jsem něco jen zkoušel (nějaký rust program) a hitnul jsem panic prakticky hned. Možná se eliminovali memory-safety bugy, ale těch logických je mnohem víc? Stačí se podívat na uutils/coreutils, sudo-rs - všechno bylo způsobené ignorancí.
Asi opravdu záleží na kultuře - rust prostě není záruka bezchybnosti a je potřeba kultura testování, jinak sice přestaneme počítat memory bugy, ale začneme počítat logické bugy.
Jinými slovy, je to sice memory safe, ale způsobilo to celosvětový výpadek? :)
Memory safe neřeší všechny problémy světa a nikdo kromě odpůrců memory safe jazyků to netvrdí.
Dalo by se tomu zabránit, kdyby to nepřepisovali?
Přepis s tím nijak nesouvisí. Obě verze mají předalokaci (logicky) a obě verze selhávaly, akorát každá jiným způsobem.
To ví přece každý, že to neřeší všechny problémy světa - opět idiotská odpověď od vás.
Otázka jen je, jestli z těch memory safety bugů nebudou logické bugy. Ono jestli těch bugů bude ve výsledku stejně, jen budou jiná kategorie, tak v čem si polepšíme :) ?
Já dělám běžně v memory safe jazycích a těch logických chyb se udělá strašně moc. Takže nemám pocit bezpečí, jen díky tomu, že něco je memory safe.
To ví přece každý, že to neřeší všechny problémy světa
Pokud to ví každý, proč se tedy podivujete, že to nevyřešilo problém, který s memory-safe nesouvisí?
opět idiotská odpověď od vás.
Vždycky svou odpověď přizpůsobuju dotazu.
Otázka jen je, jestli z těch memory safety bugů nebudou logické bugy.
Nebudou.
Takže nemám pocit bezpečí, jen díky tomu, že něco je memory safe.
Prý všichni vědí, že memory-safe nevyřeší všechny problémy světa. Je tedy logické při použití memory safe jazyka mít pocit bezpečí, že v memory-safe kódu nebudou chyby v přístupu mimo platnou paměť. Ale bylo by nelogické mít pocit bezpečí v jiných oblastech, pokud nejsou chráněny jiným způsobem.
Podle toho co píšou měli ten limit nastavený uměle. Takže ano, v jiném jazyce by jim to spadlo stejně.
To je právě ta pravá otázka. Spadlo by to a nebo by to bylo ošetřené (jak to měli dřív nevím)? Ono v rustu je jednoduché to nechat tak nějak hitnout ten panic.
Stačí si přečíst post mortem od CF. Problém byl v obou verzích, jenom se to projevilo v každé verzi jinak.
Ve spoustě jiných jazyků je zas celkem triviální ignorovat tu chybu úplně, případně neošetřit výjimku a sestřelit celou službu na recoverable chybě.
Po praxi z C++, Pythonu a občasného příspěvku do software v Go u mě error handling Rustu jednoznačně vede.
A hitnout Panic je docela netriviální, běžná praxe je zakázat explicitní panic lintem a pro těch pár výjimek kde se jeho použití vyplatí vynutit explicitní vypnutí lintu s komentářem.
Načítání konfigurace je jedna z těch možných výjimek, protože software bez funkční konfigurace tak nějak nějak nenastartuje.
20. 11. 2025, 09:47 editováno autorem komentáře