Slowlock

Slowlock


Zo nu en dan hoor je een verhaal als “er was een geval van een 1-Gbps NIC-kaart op een machine die plotseling slechts met 1 Kbps verzond, wat vervolgens een kettingreactie stroomopwaarts veroorzaakte, op zo’n manier dat de prestaties van de gehele werklast van een cluster met 100 knooppunten in een slakkengang kroop, waardoor het systeem in feite niet meer beschikbaar was voor alle praktische doeleinden”. De verhalen zijn interessant en de postmortems zijn leuk om te lezen, maar het is niet echt duidelijk hoe kwetsbaar systemen zijn voor dit soort mislukkingen of hoe vaak deze mislukkingen voorkomen.

De situatie doet me denken aan de mislukkingen van gedistribueerde systemen vóór Jepsen. Er zijn veel anekdotische horrorverhalen, maar een veelvoorkomend antwoord daarop is ‘werkt voor mij’, zelfs als het gaat om systemen waarvan nu bekend is dat ze fantastisch kapot zijn. Een handjevol bedrijven die correctheid echt serieus nemen, beschikt over goede tests en statistieken, maar ze praten er meestal niet publiekelijk over, en het grote publiek heeft geen gemakkelijke manier om erachter te komen of de systemen die ze gebruiken deugdelijk zijn.

Thanh Do et al. hebben geprobeerd hier systematisch naar te kijken – wat is het effect van hardware die kreupel maar niet gedood is, en hoe vaak gebeurt dit in de praktijk? Het blijkt dat veel veelgebruikte systemen niet bestand zijn tegen ‘hinkende’ hardware, maar dat dit soort fouten zelden voorkomen (tenminste totdat je een onredelijk grote schaal hebt).

Het effect van een enkel langzaam knooppunt kan behoorlijk dramatisch zijn:

Slowlock

Het voltooiingspercentage van taken daalde van 172 taken per uur naar 1 taak per uur, waardoor feitelijk het hele cluster omkwam. Facebook heeft mechanismen om met dode machines om te gaan, maar blijkbaar hadden ze destijds geen enkele manier om met trage machines om te gaan.

Wanneer Do et al. Ze keken naar veelgebruikte open source-software (HDFS, Hadoop, ZooKeeper, Cassandra en HBase) en ontdekten soortgelijke problemen.

Elke subgrafiek is een andere faalconditie. F is HDFS, H is Hadoop, Z is Zookeeper, C is Cassandra en B is HBase. De meest linkse (witte) balk is het geval van geen storing op de basislijn. Als u naar rechts gaat, is de volgende crash, en de daaropvolgende balken zijn resultaten voor een enkele defecte maar niet gecrashte hardware (verder naar rechts betekent langzamer). In de meeste (maar niet alle) gevallen beïnvloedde het hebben van slechte hardware de prestaties veel meer dan het hebben van defecte hardware. Merk op dat deze grafieken allemaal op logschaal zijn; Eén stap omhoog gaan is een prestatieverschil van 10x!

Vreemd genoeg kan een defecte schijf ervoor zorgen dat sommige bewerkingen sneller verlopen. Dat komt omdat er bewerkingen zijn die minder replicatieoverhead hebben als een replica mislukt. Het lijkt mij een beetje raar dat er niet meer overhead is, omdat het systeem zowel een vervangende replica moet vinden als gegevens moet repliceren, maar wat weet ik?

Hoe dan ook, waarom is een langzaam knooppunt zoveel erger dan een dood knooppunt? De auteurs definiëren drie faalwijzen en leggen uit wat de oorzaak is van elk daarvan. Er is operatie limplock, wanneer een bewerking traag is omdat een subdeel van de bewerking langzaam is (bijvoorbeeld het lezen van een schijf is traag omdat de schijf is beschadigd), node limplock, wanneer een knooppunt traag is, zelfs voor ogenschijnlijk niet-gerelateerde bewerkingen (bijvoorbeeld het lezen van RAM is traag omdat een schijf is beschadigd), en cluster limplock, waarbij het hele cluster traag is (bijvoorbeeld een enkele defecte schijf maakt een volledig cluster van 1000 machines traag).

Hoe gebeuren deze?

Operatie Limplock

Deze is de eenvoudigste. Als u van schijf probeert te lezen en uw schijf is traag, dan zal het lezen van de schijf ook langzaam zijn. In de echte wereld zullen we dit zien wanneer operaties één enkel storingspunt hebben, en wanneer monitoring is ontworpen om totale mislukkingen op te vangen en niet verminderde prestaties. Een HBase-toegang tot een regio loopt bijvoorbeeld via de server die verantwoordelijk is voor die regio. De gegevens worden gerepliceerd op HDFS, maar dit helpt u niet als het knooppunt dat eigenaar is van de gegevens hinkt. Over HDFS gesproken, het heeft een time-out van 60 seconden en de leesbewerkingen zijn in stukjes van 64K, wat betekent dat je leesbewerkingen kunnen vertragen tot bijna 1K/s voordat HDFS zal overgaan naar een gezond knooppunt.

Knooppunt Limplock

Hoe kan het zo zijn dat (bijvoorbeeld) een trage schijf ervoor zorgt dat het lezen van het geheugen traag verloopt? Als we opnieuw naar HDFS kijken, wordt er gebruik gemaakt van een threadpool. Als elke thread heel langzaam bezig is met het voltooien van een schijflezing, worden geheugenlezingen geblokkeerd totdat een thread vrijkomt.

Dit is niet alleen een probleem bij het gebruik van beperkte threadpools of andere begrensde abstracties – de realiteit is dat machines eindige bronnen hebben, en onbegrensde abstracties zullen tegen machinelimieten aanlopen als ze niet zorgvuldig zijn ontworpen om de mogelijkheid te vermijden. Zookeeper houdt bijvoorbeeld een wachtrij bij van bewerkingen, en een langzame volger kan ervoor zorgen dat de wachtrij van de leider het fysieke geheugen uitput.

Cluster Limplock

Een heel cluster kan gemakkelijk ongezond worden als het afhankelijk is van een enkele primaire cluster en de primaire hinkt. Trapsgewijze fouten kunnen dit ook veroorzaken: de eerste grafiek, waarin een cluster van het voltooien van 172 taken per uur naar 1 taak per uur gaat, is eigenlijk een Facebook-werklast op Hadoop. Wat voor mij hier verrassend is, is dat Hadoop staarttolerant zou moeten zijn; individuele langzame taken mogen geen grote impact hebben op de voltooiing van de hele klus. Dus wat is er gebeurd? Ongezonde knooppunten infecteren gezonde knooppunten en sluiten uiteindelijk het hele cluster op.

Een ongezond knooppunt infecteert een heel cluster

De staarttolerantie van Hadoop komt voort uit het starten van speculatieve berekeningen wanneer de resultaten langzaam binnenkomen. In het bijzonder wanneer achterblijvers ongewoon langzaam binnenkomen in vergelijking met andere resultaten. Dit werkt prima wanneer een reduceerknooppunt hinkt (subgrafiek H2), maar wanneer een kaartknooppunt hinkt (subgrafiek H1), kan het alle reducers in dezelfde taak vertragen, wat de staarttolerantiemechanismen van Hadoop tenietdoet.

Eén enkel slecht kaartknooppunt zorgt voor een impasse in hadoop

Om te zien waarom, moeten we naar het speculatie-algoritme van Hadoop kijken. Elke taak heeft een voortgangsscore die een getal tussen 0 en 1 (inclusief) is. Voor een kaart is de score de fractie van de gelezen invoergegevens. Voor een reductie krijgt elk van de drie fasen (gegevens van mappers kopiëren, sorteren en verkleinen) 1/3 van de score. Een speculatieve taak wordt uitgevoerd als een taak ten minste één minuut is uitgevoerd en een voortgangsscore heeft die lager is dan het gemiddelde voor de betreffende categorie minus 0,2.

In geval H2 loopt de NIC mank, zodat de kaartfase normaal wordt voltooid, aangezien de resultaten uiteindelijk naar de lokale schijf worden geschreven. Maar wanneer reducerende knooppunten gegevens proberen op te halen van het hinkende kaartknooppunt, lopen ze allemaal vast, waardoor de gemiddelde score voor de categorie omlaag gaat, waardoor speculatieve taken niet kunnen worden uitgevoerd. Als we naar het grote geheel kijken, heeft elk Hadoop-knooppunt een beperkt aantal kaarten en minder taken. Als deze vollopen met hinkende taken, zal het hele knooppunt vastlopen. Omdat Hadoop niet is ontworpen om trapsgewijze fouten te voorkomen, zorgt dit er uiteindelijk voor dat het hele cluster vastloopt.

Eén ding dat ik interessant vind, is dat deze exacte oorzaak van mislukkingen werd beschreven in het originele MapReduce-artikel, gepubliceerd in 2004. Ze noemden zelfs expliciet trage schijven en netwerken als oorzaken van achterblijvers, wat hun speculatieve uitvoeringsalgoritme motiveerde. Ze verstrekten echter niet de details van het algoritme. De open source kloon van MapReduce, Hadoop, probeerde hetzelfde probleem te vermijden. Hadoop werd voor het eerst uitgebracht in 2008. Vijf jaar later, toen het artikel dat we lezen werd gepubliceerd, slaagde het ingebouwde mechanisme voor achterblijversdetectie er niet alleen niet in om meerdere typen achterblijvers te voorkomen, maar ook niet om te voorkomen dat achterblijvers het hele cluster effectief in een impasse brachten.

Conclusie

Ik ga niet in details treden over hoe elk systeem het tijdens de tests heeft gedaan. Dat staat heel mooi beschreven in de krant, en ik raad je aan de krant te lezen als je nieuwsgierig bent. Samenvattend: Cassandra doet het redelijk goed, terwijl HDFS, Hadoop en HBase dat niet doen.

Cassandra lijkt het om twee redenen goed te doen. Ten eerste voorkomt deze patch uit 2009 dat wachtrij-overflows gezonde knooppunten infecteren, waardoor een grote storingsmodus wordt voorkomen die clusterbrede storingen in andere systemen veroorzaakt. Ten tweede ontkoppelt de gebruikte architectuur (SEDA) verschillende soorten operaties, waardoor goede operaties kunnen blijven worden uitgevoerd, zelfs als sommige operaties haperen.

Mijn grote vragen na het lezen van dit artikel zijn: hoe vaak komen dit soort mislukkingen voor, hoe, en hoe zouden redelijke statistieken/rapportage dit soort dingen toch niet moeten onderkennen?

Voor het antwoord op de eerste vraag hebben veel van dezelfde auteurs ook een artikel waarin ze naar 3000 fouten in Cassandra, Flume, HDFS en ZooKeeper keken en bepaalden welke fouten hardware-gerelateerd waren en wat de hardwarefout was.

14 gevallen van verminderde prestaties versus 410 andere hardwarefouten. In hun steekproef is dat 3% van de mislukkingen; zeldzaam, maar niet zo zeldzaam dat we het probleem kunnen negeren.

Als we dit soort fouten niet kunnen negeren, hoe kunnen we ze dan opsporen voordat ze in productie gaan? Het papier maakt gebruik van het Emulab-testbed, wat echt gaaf is. Helaas staat op de Emulab-pagina: “Emulab is een openbare voorziening, gratis beschikbaar voor de meeste onderzoekers wereldwijd. Als u niet zeker weet of u in aanmerking komt voor gebruik, raadpleeg dan ons beleidsdocument of vraag het ons. Als u denkt dat u in aanmerking komt, kunt u een aanvraag indienen om een ​​nieuw project te starten.” Dat is begrijpelijk, maar dat betekent dat het voor de meesten van ons waarschijnlijk geen geweldige oplossing is.

De overgrote meerderheid van haperende hardware is te wijten aan netwerk- of schijftraagheid. Waarom zou een aangepaste versie van Jepsen, of iets dergelijks, de schijf- of netwerktraagheid niet kunnen simuleren? Een naïeve implementatie zou bij lange na niet in de buurt komen van de nauwkeurigheid van Emulab, maar aangezien we het hebben over vertragingen van een orde van grootte, zou een variantie van 10% (of zelfs 2x) voldoende moeten zijn om de robuustheid van systemen te testen ten opzichte van gedegradeerde hardware. Er zijn een aantal manieren waarop je je kunt voorstellen dat dit werkt. Om bijvoorbeeld een langzaam netwerk op Linux te simuleren, zou je kunnen proberen throttling via qdisc, syscalls aan te sluiten via ptrace, enz. Voor een trage CPU kun je rate-limit gebruiken via cgroups en cpu.shares, of het proces gewoon toewijzen aan UC-geheugen (of misschien WT of WC als dat een beetje te langzaam is), enzovoort, enzovoort voor schijf- en andere foutmodi.

Dan blijft mijn laatste vraag over: zouden systemen dit soort fouten niet al moeten opvangen, zelfs als ze zich daar niet in het bijzonder zorgen over maken? Zoals we hierboven hebben gezien, zijn systemen met verlammend trage hardware zo zeldzaam dat we ze gewoon als dood kunnen beschouwen zonder een significante impact op onze totale computerbronnen. En systemen met defecte hardware kunnen vrij eenvoudig worden gedetecteerd. Bovendien moeten multi-tenantsystemen hun eigen prestaties voortdurend monitoren om toch een goede benutting te krijgen.

Dus waarom zouden we ons druk maken over het ontwerpen van systemen die robuust zijn tegen hinkende hardware? Een deel van het antwoord is diepgaande verdediging. Natuurlijk moeten we over monitoring beschikken, maar we moeten ook over systemen beschikken die robuust zijn als onze monitoring faalt, wat onvermijdelijk zal gebeuren. Een ander deel van het antwoord is dat door systemen toleranter te maken voor haperende hardware, we ze ook toleranter zullen maken voor interferentie van andere werklasten in een omgeving met meerdere tenants. Dat laatste is een enigszins speculatieve empirische vraag: het is mogelijk dat het efficiënter is om systemen te ontwerpen die niet bijzonder robuust zijn tegen interferentie van concurrerend werk op dezelfde machine, terwijl ze betere partities gebruiken om interferentie te voorkomen.

Met dank aan Leah Hanson, Hari Angepat, Laura Lindzey, Julia Evans en James M. Lee voor commentaar/discussie.



Source link

Postagens Similares

  • অস্পষ্ট করা আমার যোগাযোগের ইমেল – কেভ কুইর্ক

    7 এপ্রিল 2026 আমি গতকাল স্পেনসার মর্টেনসেনের এই দুর্দান্ত পোস্টে হোঁচট খেয়েছি, যা বাস্তব স্প্যামবটগুলির বিরুদ্ধে বিভিন্ন ইমেল অস্পষ্টকরণ কৌশল পরীক্ষা করে দেখেছে কোনটি আসলে কাজ করে। এটি একটি চিত্তাকর্ষক পঠন, এবং আপনি যদি এই ধরণের জিনিসটিতে থাকেন তবে আমি এটি পরীক্ষা করে দেখার পরামর্শ দেব। সংক্ষিপ্ত সংস্করণ হল যে স্প্যামবট আপনার এইচটিএমএল স্ক্র্যাপ করে…

  • 如何成为不断变化的世界中的专家

    2014年12月 如果世界是静态的,我们对自己信念的信心就会单调增加。一种信仰所经历的经历越多(也越多样化),它就越不可能是错误的。大多数人隐含地相信他们的观点是这样的。他们对那些不会发生太大变化的事物(例如人性)的看法这样做是合理的。但你不能以同样的方式相信自己对变化的事物的看法,这可能包括几乎所有其他事情。 当专家犯错时,通常是因为他们是早期版本世界的专家。 有可能避免这种情况吗?你能保护自己免受过时信念的影响吗?在某种程度上,是的。我花了近十年的时间投资早期初创企业,奇怪的是,保护自己免受过时信念的影响正是作为一名初创投资者想要成功所必须要做的。大多数真正好的创业想法一开始看起来都像坏主意,其中许多看起来很糟糕,特别是因为世界上的一些变化只是将它们从坏变成了好。我花了很多时间学习识别这些想法,而且我使用的技术可能适用于一般的想法。 第一步是对变革有明确的信念。那些对自己的观点信心不断增强的人会含蓄地得出世界是静态的结论。如果你有意识地提醒自己事实并非如此,你就会开始寻求改变。 应该去哪里寻找呢?除了人性不会发生太大变化这一比较有用的概括之外,不幸的事实是变化很难预测。这在很大程度上是同义反复,但仍然值得记住:重要的变化通常来自不可预见的方面。 所以我什至不尝试预测它。当我在面试中被要求预测未来时,我总是不得不努力想出一些听起来似乎合理的东西,就像一个还没有准备考试的学生一样。 (1) 但我并不是因为懒才没有做好准备。在我看来,对未来的信念很少是正确的,因此通常不值得施加额外的僵化,而最好的策略就是保持积极的开放态度。不要试图为自己指明正确的方向,而要承认你不知道什么是正确的方向,并尝试对变革之风保持超级敏感。 有可行的假设是可以的,尽管它们可能会有点限制你,因为它们也会激励你。追逐事物令人兴奋,尝试猜测答案令人兴奋。但你必须遵守纪律,不要让你的假设变得更加僵化。 (2) 我相信这种被动模式不仅适用于评估新想法,也适用于拥有它们。提出新想法的方法不是明确地尝试,而是尝试解决问题,并且在这个过程中不要忽视你的奇怪预感。 变革之风源于领域专家的无意识思维。如果您在某个领域足够专业,那么您想到的任何奇怪的想法或明显不相关的问题本身都值得探索。 (3) 在 Y Combinator 中,当一个想法被描述为“疯狂”时,这是一种赞美——事实上,平均而言,这种赞美可能比一个想法被描述为“好”时更高。 初创企业投资者有非凡的动力去纠正过时的信念。如果他们能够在其他投资者之前意识到一些看似没有前途的初创公司并非如此,那么他们就可以赚到一大笔钱。但激励措施不仅仅是经济上的。投资者的意见受到明确的测试:初创公司找到他们,他们必须说是或否,然后,很快,他们就知道自己的猜测是否正确。对谷歌说“不”的投资者(有好几个)将终生铭记在心。 任何必须在某种意义上对想法下注而不是仅仅对它们进行评论的人都有类似的动机。这意味着任何想要这种激励的人都可以通过将他们的评论变成赌注来获得它们:如果你以某种相当持久和公开的形式写一个主题,你会发现你比大多数人在随意谈话中更担心把事情做好。 (4) 我发现的另一个保护自己免受过时信念影响的技巧是首先关注人而不是想法。尽管未来发现的性质很难预测,但我发现我可以很好地预测什么样的人会做出这些发现。好的新想法来自于认真、充满活力、独立思想的人。 作为一名投资者,把赌注押在人而不是想法上无数次地拯救了我。例如,我们认为 Airbnb 是个坏主意。但我们可以看出创始人是认真的、充满活力的、独立的。 (事实上​​,这几乎是病态的。)因此我们停止了怀疑并资助了他们。 这似乎也是一种应该普遍适用的技术。让自己周围都是那些能提出新想法的人。如果你想在你的信念变得过时时迅速注意到,你最好与那些发现会使信念过时的人成为朋友。 不成为自己专业知识的囚徒已经够难的了,而且只会变得更难,因为变化正在加速。这并不是最近才出现的趋势。自旧石器时代以来,变化一直在加速。想法产生想法。我不希望这种情况发生改变。但我可能是错的。 笔记 (1)我惯用的技巧是谈论大多数人尚未注意到的当下的方面。 (2)尤其是当他们变得足够出名,人们开始将他们与你联系起来时。你必须对你想要相信的事情保持额外的怀疑,一旦你开始认同一个假设,它几乎肯定会开始属于这一类别。 (3)实际上,“足够专家”并不要求一个人被认可为专家——无论如何,专家都是一个跟踪指标。在许多领域,一年的专注工作加上大量的关心就足够了。 (4)虽然它们是公开的并且无限期地持续存在,但从经验上看,论坛和 Twitter 等地方的评论似乎就像随意的对话一样。门槛可能是你写的东西有没有标题。 谢谢 感谢 Sam Altman、Patrick Collison 和 Robert Morris 阅读本文的草稿。 Source link

  • NP ハードはハードという意味ではありません ||数学∩プログラミング

    NP 困難性がインターネット上に現れると、たとえば、愚かなブロガーがビデオ ゲームについて書きたいなどの理由で、NP 困難であることが証明されている問題は実際には非常に難しいと結論付けたくなることがよくあります。 「スーパーマリオはNPが難しいと科学者が証明した?私は自分がマリオを苦手とするのには理由があるとずっと思っていたんだ!」ごめんなさい、この二つは関係ありません。 NP 硬度とは、狭い意味での硬いことを意味します。この投稿で明確になることを願っています。その後、NP 硬度を超えてプログラマーとしての仕事に応用できる、数学的な意味での「ハード」の意味を探っていきます。 問題が NP 困難である場合、それは単純に、その問題を使用してロジックを表現できるほど、問題が十分に表現力豊かであることを意味します。これは、AND、OR、NOT を使用したブール式を意味します。スーパー マリオの例では、「問題」は、(1) プレーヤーのコントロール、(2) レベルを構成する許可されたタイルとキャラクター、(3) 最初から最後まで到達するという目標の束です。論理式はレベルの作成時にエンコードされ、問題を解決する (レベルを完了する) ことは、論理式が成り立つ条件を見つけることと同じです。 オリジナルのスーパー マリオ ブラザーズの句ガジェット。3 つの変数の OR をエンコードします。 この意味では、宝具の硬さがスーパーマリオのすべてを硬くするわけではありません。論理式をエンコードするために設計されたレベルは、不自然で、複雑で、歪んでいます。彼らはゲームのルールを悪用して、ゲームにブール論理を詰め込みます。これらは 最悪の場合のレベル。これはマリオをまったく意図しない目的に使用するものであり、ハッキングと何ら変わりません。したがって、NP 硬度は最悪の場合の主張です。 繰り返しになりますが、NPの硬さはスーパーマリオが持っていることを意味します。 表現力。表現力が非常に高いため、最悪の場合には難しいと思われる他の問題もエミュレートできます。そして、数学的な「難易度」の目標はアルゴリズムの限界について推論することであるため、スーパー マリオを完全に一般的に解くことができるということは、レベル デザインがどれほどばかばかしいものであっても、どんな難しい部分問題も解決できることを意味します。 P != NP 予想は、ブール論理式が充足可能かどうかを決定する多項式時間アルゴリズムが存在しないことを示しており、その結果、スーパー マリオには (完全に一般的に) 多項式時間アルゴリズムも存在しません。 そうは言っても、実際には、スーパー マリオのレベルは論理式をエンコードしていません。現実世界のスーパー マリオのレベルはそのように (解けるように、楽しく) 設計されているという知識を使えば、アルゴリズムを使ってスーパー マリオを解くことができます。多くの例があります。 一般に、人間にとっての問題の難しさは、アルゴリズムの難しさとは無関係です。整数の乗算を考えてみましょう。これはコンピュータにとって解決できる些細な問題ですが、人間はこの問題に苦戦する傾向があります。コンピューターが 2,000 桁の数値を数ミリ秒で掛け算できるのに対し、7 桁の数値 2 つを 5 秒以内に掛け算できるのは驚くべき偉業です。 一方、タンパク質の折り畳みは NP が困難な問題として知られていますが、人間にとって十分に簡単に解決できるゲームに変換されており、プレイヤーは科学研究に貢献しています。実際、巡回セールスマンなど、最も一般的に引用される…

  • simonw/pedalicano

    simonw/pedalicano. Chiaramente non stavo prestando attenzione quando lo erano annunciato per primo a maggio, ma oggi ho accidentalmente attivato un “animale domestico” in Codex Desktop – un piccolo robot animato, che ricorda Clippy – e poi ho scoperto che puoi crearne uno tuo. Così ho fatto e ora ho un simpatico pellicano su una bicicletta…

  • Slashdot et Sourceforge

    Si vous avez suivi un agrégateur d’actualités technologiques au cours de la semaine dernière (la semaine du 24 mai 2015), vous avez probablement vu l’histoire de la façon dont SourceForge prend en charge les comptes d’administrateur pour des projets existants et injecte des logiciels publicitaires dans les installateurs de packages comme GIMP. Pour tous ceux…

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *