Teď ten počítač mobilní technologie rozvíjeno za nepříznivého počasí, problematika první důležitosti je zaměřena na schopnost udržovat vzájemnou komunikaci.

Messengery vám umožňují diskutovat o jakýchkoli problémech v reálném čase, od soukromých až po obchodní konference. Jejich popularita proto není o nic menší než u her pro více hráčů.

Všichni instant messenger mají jeden problém, kterým je rychlé hromadění starých zpráv. Zabírají extra paměť na vašem zařízení.

Vymazání chatu v Discordu (návod)

Pravidelná komunikace v messengeru má tendenci zanášet paměť zařízení. Zprávy se hromadí a mnohé z nich nenesou sémantickou zátěž. Proto je nutné jejich odstranění.

Uchovávání veškeré korespondence je navíc velmi riskantní. Existuje vysoká pravděpodobnost úniku dat, v důsledku čehož mohou být použity jako kompromitující důkazy o vás samotných. Aby se zabránilo takovému výsledku událostí, je nutné včas vyčistit historii. V aplikaci Discord to lze provést třemi způsoby:

  • Smazat kanál.
  • Samostatné mazání každé zprávy.
  • Smazat všechny zprávy z minulého týdne.

Po odeslání zbývá jen několik sekund, které vám umožní smazat zprávu, než ji uvidí všichni členové kanálu. Volba způsobu čištění je velmi situační a volí se podle osobních potřeb tvůrce serveru. Zjistěte více o každé z metod s návodem k použití.

Metoda jedna, smažte celý kanál a vytvořte nový P2>

Nemůžete vymyslet jednodušší variantu. Až se téma vyčerpá, nebo se v diskuzích nashromáždí jen spousta kompromitujících informací, kanál úplně smažte a vytvořte nový. K vymazání dojde během několika sekund a nelze jej obnovit.

Pozornost! Pokud existuje důležitá informace, přepište do samostatného dokumentu nebo uložte jako snímky obrazovky.

Musíte provést několik jednoduchých kroků:



Poté vytvoříte nový, můžete dokonce se stejným názvem.

Metoda 2: odstraňte každou zprávu jednotlivě

Nejdelší úklid vůbec. Vzhledem k velké časové náročnosti je vhodný pouze pro odběr malého množství. Návod k použití:



Smazané zprávy budou ztraceny pro všechny uživatele kanálu. Pokud byl uložen do záložek, zmizí.

Metoda třetí: Čištění posledních 7 dní

Tato metoda platí pouze pro příspěvky uživatele, kterého chcete zakázat. Před odesláním na černou listinu vám bude nabídnuta volba, pro jaké období chcete smazat historii dopisů od uživatele:

  • Na dvacet čtyři hodin.
  • Nebo posledních sedm dní (a nocí).


Jak přidat osobu na černou listinu:


Pokud chcete, uveďte důvod, pole můžete nechat prázdné.

Jak často byste měli chat vymazat?

Čištění chatu zcela závisí na tématu vaší komunity. Pokud si vyměňujete humor, tak to nemá smysl mazat, je lepší nechat vše tak, abyste se mohli vrátit k příspěvku, který se vám líbí.

Pokud máte kolektivní mišmaš, podmíněně úplnou svobodu diskuse na různá témata, pak je lepší to alespoň jednou za pár dní vyčistit. Ideálně samozřejmě – jednou denně. V této záležitosti neexistují žádné specifické požadavky, takže každý administrátor si v této záležitosti nastavuje laťku sám.

Ve světě moderní technologie komunikace přes internet je téměř na prvním místě. To je velmi pohodlné, takže lidé stále častěji instalují různé instant messengery (stejné nebo telegramy) do svých gadgetů a provozují soukromé i obchodní korespondence. Nesoulad je v takových případech žádaný. Postupem času se ale nahromadí spousta zbytečných dopisů, které zařízení ucpávají, a také hrozí, že soukromé zprávy, které nejsou určeny třetím stranám, si stále někdo může přečíst a pak se nabízí otázka: „Jak vyčistit chat v Discordu?"

Jak smazat chatové zprávy na Discordu

Metoda 1. Smazání korespondence jednou zprávou

Tato možnost je vhodná, pokud potřebujete smazat pouze některá písmena, vlastní nebo od jiných uživatelů, protože úplné vyčištění chatu zabere spoustu času. Samotný proces vypadá takto:

  • otevřete program;
  • vstupte do konverzace, kde budete pracovat;
  • přesuňte kurzor myši na zprávu, kterou chcete odstranit, a klikněte na ni (můžete také kliknout na svislé tři tečky na pravé straně vybrané zprávy);
  • ve vyskakovacím okně vyberte "Smazat zprávu";
  • potvrďte operaci.

Metoda 2. Smazání celého chatu

Jak odstranit všechny zprávy v Discordu, pokud neobsahují cenné informace? Chcete-li provést tuto operaci, musíte provést několik akcí:

  • stáhnout aplikaci;
  • vyberte kanál, který má být zničen;
  • přesuňte nad něj ukazatel myši a klikněte na ikonu ozubeného kola, která se zobrazí vpravo;
  • v nabídce, která se otevře, vyberte červenou položku „Odstranit kanál“;
  • Na otázku, která se objeví, odpovězte „Ano“.

Metoda 3: Spouštění skriptů

Tato metoda může být nebezpečná pro ty, kteří se špatně orientují ve skriptech. Před spuštěním je nutné zkontrolovat, zda neobsahují žádné informace, které umožňují přístup k vašim osobním údajům. Pokud jste si jisti, že skript byl odeslán od poctivého odesílatele, pak:

  • zkopírujte to;
  • vložte do pole pro zadání textu SMS;
  • běh.

Tímto způsobem se můžete zbavit velkého počtu zpráv. Ale stojí za to zopakovat, je vhodný pouze pro zkušené uživatele.

Metoda 4: Odstraňte konverzace za posledních sedm dní

Takový systém je vhodný, pokud budete mazat zprávy od konkrétní osoby. Návod krok za krokem vypadá takto:

  • klikněte pravým tlačítkem myši na uživatele, od kterého budete mazat písmena;
  • v zobrazené nabídce vyberte možnost „Zakázat“;
  • označte požadovaný časový interval, po který bude čištění prováděno (24 hodin nebo 7 dní) a klikněte na „Zakázat“.

Tento účastník se již nebude moci účastnit konverzace, dokud mu správce nebo tvůrce chatu neodstraní zákaz.

Co jsou příkazy Discord Chat?

Neexistuje způsob, jak odstranit všechny zprávy v aplikaci Discord najednou, ale existuje jedna metoda, která vám umožní odstranit až 100 zpráv najednou. K tomu je nainstalován bot Mee6, který má příkazy pro chatování v Discordu, pomocí kterého se korespondence vymaže. Postup je následující:

  • přejděte na stránku s dostupnými;
  • kliknutím na tlačítko „Přidat do Discordu“;
  • pokud jste správce, připojte jej k serveru výběrem položky „Autorizovat“.

  • otevřená korespondence s Mee6;
  • v uvítací zprávě se objeví odkaz, na který musíte kliknout, abyste se dostali na Dashboard;
  • connect „The Moderator Plugin“, zde se nachází příkaz k vymazání „!clear“ (to se provede kliknutím na položku „Disabled“ ve žluté barvě v okně, které se otevře, poté se změní na „Enabled“ a změní se modrá, což znamená úspěšné připojení).

Pečlivě si přečtěte pravidla pro používání příkazů. Poté můžete přejít na textový kanál nebo osobní korespondenci a provést čištění výběrem příkazu " [e-mail chráněný] Uživatelské jméno". V důsledku toho 100 Poslední příspěvky budou odstraněny.

Pokud chcete vymazat jen několik zpráv, použijte příkaz "!clear xx", kde místo xx zadáte počet zpráv od 1 do 99.

Vidí účastník smazané zprávy?

Někdy nastanou případy, kdy napíšete něco nadbytečného nebo mimo téma, a když si všimnete přehlédnutí, okamžitě smažete dopis a pak přemýšlíte o tom, zda partner vidí smazané zprávy v Discordu. Pokud tak učiníte před přečtením dopisu jiným účastníkem, pak smazaná zpráva zůstane tajná.

Na základě výše uvedeného materiálu je vidět, že existuje několik možností pro vymazání chatu v Discordu. Způsob, který zvolíte, závisí na tom, kolik zpráv plánujete odstranit.

Po vytvoření vlastního serveru Discord může mít mnoho začátečníků různé otázky týkající se správy serveru. Jednou z těchto otázek může být „Jak smazat všechny zprávy v Discord?“. Tuto otázku lze položit z mnoha důvodů: od smazání jedné zbytečné zprávy až po vyčištění celé databáze od zvědavých očí.

Smazat konverzaci v Discordu

Bohužel vývojáři neposkytli možnost, jak smazat všechny zprávy v Discordu najednou. Ale nebuďte naštvaní! Existuje mnoho metod, jak tento zákaz částečně obejít.

Metoda 1: Odstraňte konverzaci o jednu zprávu

Tato metoda je vhodná pouze v případě, že potřebujete korespondenci smazat pouze částečně. Jako možnost rozsáhlého čištění je tato metoda nejhorší, protože vyžaduje náklady na mnohonásobné opakování akcí.


Metoda 2: Smažte všechny zprávy v Discord odstraněním chatu

Smazat korespondenci s tato metoda lze provést poměrně rychle. Jediným negativem je, že budete muset kanál znovu vytvořit a provést jeho nastavení. Hlavní výhoda - umožňuje smazat všechny zprávy v Discord uložené na zvoleném kanálu.


Připomeňme, že Discord oficiálně neuznává takové pojmy jako skupina nebo chat. Nejčastěji jsou chápány jako místo, kde můžete vést skupinovou komunikaci. Pouze v Discordu se taková místa nazývají trochu jinak - kanály. V tomto případě mohou být kanály dvou typů: textové a hlasové. Mnoho lidí preferuje Discord z toho důvodu, že umožňuje účastníkům komunikovat v několika textových kanálech současně, aniž by opustili hlasový kanál.

Metoda 3: Odstranění nesouhlasné konverzace pomocí reakcí

Smazat všechny zprávy v Discordu pomocí reakcí není možné, samy o sobě pomáhají spravovat některé procesy.

Existuje například užitečný bot, který vám umožní přidávat na server Discord ankety skládající se až z devíti odpovědí. Pomocí reakcí můžete vidět, jaké možnosti odpovědí byly vybrány definované uživatelem a také je odstranit. Zpočátku byly reakce určeny pro emotikony emotikony.


Metoda 4: Odstraňte zprávy z minulého týdne

Tam je také místo, kde být trochu radikálním způsobem pro vymazání zpráv. Umožňuje vám však smazat všechny zprávy v Discordu za posledních 7 dní.

Stojí za zmínku, že tato metoda je vhodná pouze v případě, že potřebujete vymazat zprávy jednotlivého uživatele, nikoli celý chat.


Nakonec bude zakázaný uživatel ze serveru zablokován, to znamená, že nebude moci použít odkaz na pozvánku ke zdroji, dokud nebude odblokován tvůrcem nebo členem s právy správce. Jak odblokovat osobu popisuje následující.

Metoda 5: Mee6 Bot

Přestože Discord neumožňuje smazat všechny zprávy, existuje způsob, jak odstranit až 100 zpráv najednou. K tomu stačí nainstalovat dalšího robota Mee6. Nutno přiznat, že jde o nejjednodušší a rychlá metoda, který umožňuje smazat konverzaci.

Mee6 je v podstatě hudební bot, ale má několik užitečných funkcí.

  1. Prvním krokem je přidání robota na váš server. Následujte tento odkaz.
  2. Spustit příkaz" Přidat do Discordu».
  3. Autorizujte robota Mee6.
  4. Dále musíte vybrat server, na kterém bude Mee6 dominovat.
  5. V dalším okně můžete nastavit práva, která bude mít přidaný bot k dispozici.
  6. Po kliknutí na „Autorizovat“ potvrďte, že nejste robot.
  7. Po přidání bota na server se otevře okno, kde byste měli nastavit konfiguraci a parametry bota. Například bylo zahrnuto několik pluginů. Jedním z nich je pomoc.
  8. Aby se změny projevily, zaškrtněte políčko a klikněte na „ Aktualizace", tj. Aktualizace.
  9. Chcete-li zkontrolovat fungování příkazu, pošlete zprávu! help na server v kterémkoli z chatů.
  10. Poté by měl robot přijít v osobní zprávě s popisem různých bodů zásuvných modulů.
  11. Z podpůrného příspěvku Mee6 bude zřejmé, že sada příkazů pro mazání příspěvků může obsahovat plugin „Moderátor“. V okně pro úpravy konfigurace botů klikněte na oranžový ovál s popiskem „Zakázáno“ vedle sekce „Moderátor“.
  12. Potvrďte přidání pluginu.
  13. Všimněte si zahrnutí příkazu!Clear a uložte změny pomocí operace "Update". Příkaz !clear xx umožňuje smazat až 100 zpráv najednou, přičemž místo xx musíte přidat počet zpráv, které chcete odstranit.
  14. Odešlete zprávu příkazem !clear 50.
  15. To znamená, že z chatu bude smazáno posledních 50 zpráv. Odpočítávání smazaných zpráv je od konce korespondence, to znamená, že nejprve jsou smazány nové zprávy a teprve potom staré.

Algoritmus akcí, který vám umožňuje odstranit korespondenci prostřednictvím rozhraní mobilní telefon, je zcela podobný prováděným operacím. Proto je nebudeme ilustrovat.

  • Překlad

Discord stále roste rychleji, než jsme očekávali, stejně jako obsah vytvářený uživateli. Čím více uživatelů - tím více zpráv v chatu. V červenci jsme oznámili 40 milionů zpráv denně, v prosinci jsme oznámili 100 milionů zpráv a v polovině ledna jsme překonali 120 milionů. Okamžitě jsme se rozhodli uchovávat historii chatu navždy, takže se uživatelé mohou kdykoli vrátit a přistupovat ke svým datům z libovolného zařízení. Jde o spoustu dat, jejichž tok a objem roste a všechna musí být dostupná. jak to uděláme? Cassandra!

Co jsme udělali?

Původní verze Discordu byla napsána za méně než dva měsíce na začátku roku 2015. Možná jeden z nejlepší DBMS pro rychlou iteraci je MongoDB. Vše v Discordu bylo konkrétně uloženo v jediné sadě replik MongoDB, ale také jsme vše připravovali na jednoduchou migraci na nový DBMS (věděli jsme, že nebudeme používat sharding MongoDB kvůli jeho složitosti a neznámé stabilitě). Ve skutečnosti je to naše součást firemní kultura: navrhněte rychle, abyste je mohli vyzkoušet nová vlastnost produkt, ale vždy směřuje ke spolehlivějšímu řešení.

Zprávy byly uloženy v kolekci MongoDB s jediným složeným indexem na channel_id a created_at . Kolem listopadu 2015 jsme dosáhli milníku 100 milionů zpráv v databázi a poté jsme začali chápat problémy, které nás čekají: data a index se již nevejdou do RAM a zpoždění se stávají nepředvídatelnými. Je čas přejít na vhodnější DBMS.

Výběr správného DBMS

Před výběrem nového DBMS jsme potřebovali porozumět dostupným vzorcům čtení/zápisu a proč se vyskytly problémy se současným řešením.
  • Rychle se ukázalo, že čtení byla extrémně náhodná a poměry čtení/zápis byly asi 50/50.
  • Silné servery pro hlasový chat Discord neodesílají téměř žádné zprávy. To znamená, že každých pár dní poslali jednu nebo dvě zprávy. Za rok server tohoto typu pravděpodobně nedosáhne milníku 1000 zpráv. Problém je, že i při tak malém počtu zpráv se tato data hůře doručují uživatelům. Pouhé vrácení 50 zpráv uživateli může mít za následek mnoho náhodných vyhledávání na disku, což má za následek vyprázdnění mezipaměti disku.
  • Těžké soukromé textové chatovací servery Discord odesílají slušné množství zpráv, které snadno spadají do rozsahu mezi 100 000 a 1 milionem zpráv ročně. Obvykle požadují pouze nejnovější údaje. Problém je v tom, že tyto servery mají obvykle méně než 100 členů, takže rychlost požadavků na data je pomalá a je nepravděpodobné, že by byly v diskové mezipaměti.
  • Velké veřejné servery Discord posílají spoustu zpráv. Existují tisíce členů, kteří posílají tisíce zpráv denně. Miliony zpráv ročně lze snadno napsat. Téměř vždy požadují zprávy odeslané za poslední hodinu, a to se stává často. Proto jsou data obvykle v diskové mezipaměti.
  • Věděli jsme, že v nadcházejícím roce budou mít uživatelé ještě více způsobů, jak generovat náhodná čtení: možnost zobrazit své zmínky za posledních 30 dní a poté přejít na daný okamžik v historii, zobrazit a přejít na pevné příspěvky a fulltext Vyhledávání. To vše znamená ještě více náhodných čtení!
Poté jsme definovali naše požadavky:
  • Lineární škálovatelnost- Nechceme později revidovat rozhodnutí nebo ručně přesouvat data do jiného fragmentu.
  • Automatické převzetí služeb při selhání- Rádi v noci spíme a děláme Discord tak samoléčivým, jak je to jen možné.
  • Malá podpora- Mělo by to fungovat, jakmile to nainstalujeme. Jsme povinni pouze přidávat další uzly, jak data rostou.
  • Osvědčený v práci Rádi zkoušíme nové technologie, ale ne příliš nové.
  • Předvídatelný výkon- Zprávy se nám zasílají, pokud doba odezvy API v 95 % případů překročí 80 ms. Také nechceme čelit nutnosti ukládat zprávy do mezipaměti v Redis nebo Memcached.
  • Ne úložiště blobů- Psaní tisíců zpráv za sekundu nebude fungovat skvěle, pokud budeme muset neustále deserializovat objekty blob a připojovat k nim data.
  • open source- Věříme, že ovládáme svůj vlastní osud a nechceme být závislí na společnosti třetí strany.
Cassandra se ukázala jako jediná DBMS, která splňovala všechny naše požadavky. Můžeme jen přidávat uzly při škálování a řeší ztrátu uzlů bez jakéhokoli dopadu na aplikaci. Velké společnosti jako Netflix a Apple mají tisíce uzlů Cassandra. Přidružená data jsou uložena vedle sebe na disku, což zajišťuje minimum vyhledávání a snadnou distribuci v rámci clusteru. Je spravován DataStax, ale distribuován otevřeně. zdrojový kód a komunitní síly.

Poté, co se rozhodl, bylo nutné prokázat, že byl skutečně oprávněný.

Datové modelování

Nejlepší způsob, jak popsat Cassandru začátečníkovi, je zkratka KKV. Dvě písmena "K" obsahují primární klíč. První "K" je klíč oddílu. Pomáhá určit, ve kterém uzlu data žijí a kde je na disku najít. Uvnitř sekce je mnoho řádků a konkrétní řádek uvnitř sekce je určen druhým „K“ - shlukovacím klíčem. Funguje jako primární klíč v rámci oddílu a definuje způsob řazení řádků. Sekci si můžete představit jako uspořádaný slovník. Všechny tyto vlastnosti dohromady umožňují velmi výkonné datové modelování.

Pamatujete si, že zprávy v MongoDB byly indexovány pomocí channel_id a created_at ? channel_id se stalo klíčem oddílu, protože všechny zprávy fungují v kanálu, ale created_at neposkytuje dobrý klíč pro shlukování, protože lze vytvořit dvě zprávy současně. Naštěstí je každé ID na Discordu ve skutečnosti vytvořeno ve Snowflake, což znamená, že je řazeno chronologicky. Takže by se daly použít. Primární klíč se stal (channel_id, message_id), kde message_id je Snowflake. To znamená, že když je kanál načten, můžeme Cassandře sdělit přesný rozsah, kde má zprávy hledat.

Zde je zjednodušené schéma pro naši tabulku zpráv (přeskakuje asi 10 sloupců).

CREATE TABLE zprávy (channel_id bigint, message_id bigint, author_id bigint, text obsahu, PRIMÁRNÍ KLÍČ (channel_id, message_id)) S CLUSTERING ORDER BY (message_id DESC);
Ačkoli jsou Cassandrina schémata podobná schématům relačních databází, lze je snadno změnit bez jakéhokoli dočasného dopadu na výkon. Vzali jsme to nejlepší z úložiště objektů blob a relačního úložiště.

Jakmile začal import existujících zpráv do Cassandry, okamžitě jsme v protokolech viděli varování, že byly nalezeny sekce větší než 100 MB. jo?! Ostatně Cassandra tvrdí, že podporuje 2 GB oddíly! Zdá se, že tato možnost sama o sobě neznamená, že by se to mělo dělat. Velké příčky velmi zatěžují sběrač odpadu v Cassandře při hutnění, rozšiřování clusteru atd. Velký oddíl také znamená, že data v něm nelze distribuovat napříč clusterem. Bylo jasné, že budeme muset nějak omezit velikost oddílů, protože některé kanály Discord mohou existovat roky a neustále se zvětšovat.

Rozhodli jsme se distribuovat naše zprávy v blocích (kbelících) podle času. Podívali jsme se na největší kanály v Discordu a zjistili jsme, že pokud budeme ukládat zprávy v blocích po cca 10 dnech, pohodlně se vejdeme do 100 MB limitu. Bloky musí být získány z message_id nebo timestamp.

DISCORD_EPOCH = 1420070400000 BUCKET_SIZE = 1000 * 60 * 60 * 24 * 10 def make_bucket(snowflake): if snowflake je None: timestamp = int(time.time() * 1000) - DISCORD je vytvořen jinak: When a Snowflake počet # sekund od DISCORD_EPOCH. timestamp = snowflake_id >> 22 return int(timestamp / BUCKET_SIZE) def make_buckets(start_id, end_id=None): return range(make_bucket(start_id), make_bucket(end_id) + 1)
Klíče oddílu Cassandra mohou být složené, takže náš nový primární klíč je ((channel_id, bucket), message_id) .

CREATE TABLE zprávy (channel_id bigint, bucket int, message_id bigint, author_id bigint, text obsahu, PRIMÁRNÍ KLÍČ ((channel_id, bucket), message_id)) WITH CLUSTERING ORDER BY (message_id DESC);
Pro dotazování na nedávné zprávy v kanálu jsme vygenerovali řadu bloků od aktuálního času po channel_id (toto je také řazeno chronologicky jako Snowflake a musí být starší než první zpráva). Poté se sekvenčně dotazujeme na oddíly, dokud neshromáždíme dostatek zpráv. Nevýhodou této metody je, že občas aktivní instance Discordu budou muset vyzpovídat mnoho různých bloků, aby časem nasbíraly dostatek zpráv. V praxi se ukázalo, že je vše v pořádku, protože pro aktivní instanci Discordu je obvykle v první sekci zpráv dostatek a je jich většina.

Import zpráv do Cassandry proběhl hladce a my jsme byli připraveni to vyzkoušet v produkci.

Těžký start

Výstup nový systém produkce je vždy děsivá, takže je dobré ji otestovat, aniž by to ovlivnilo uživatele. Systém jsme nakonfigurovali tak, aby duplikoval operace čtení/zápisu v MongoDB a Cassandře.

Ihned po spuštění bug tracker ukázal chyby, že author_id bylo nulové. Jak to může být nulové? Toto je požadované pole!

Konzistence na závěr

Cassandra je typový systém, to znamená, že zaručená integrita je zde obětována pro dostupnost, což jsme obecně chtěli. Cassandra odrazuje od čtení před zápisem (operace čtení jsou dražší), a tak vše, co Cassandra dělá, je aktualizace a upsert, i když jsou poskytovány pouze určité sloupce. Můžete také psát do libovolného uzlu a automaticky vyřeší konflikty pomocí " poslední záznam vyhraje“ pro každý sloupec. Jak nás to tedy ovlivňuje?


Upravit/smazat příklad závodních podmínek

V případě, že by některý uživatel upravoval příspěvek, zatímco jiný uživatel mazal stejný příspěvek, dostali bychom se na řádek s úplně chybějícími údaji, kromě primárního klíče a textu, protože Cassandra zaznamenává pouze aktualizace a vkládání. Existují dvě možná řešení tohoto problému:

  1. Při úpravě zprávy odepište celou zprávu. Pak je tu možnost vzkříšení smazané zprávy a přidává šance na konflikty pro souběžné položky v jiných sloupcích.
  2. Identifikujte poškozenou zprávu a odstraňte ji z databáze.
Druhou možnost jsme zvolili tak, že jsme nadefinovali požadovaný sloupec (v tomto případě author_id) a smazali příspěvek, pokud je prázdný.

Při řešení tohoto problému jsme si všimli, že jsme byli dost neefektivní s operacemi zápisu. Protože je Cassandra v konečném důsledku konzistentní, nemůže jen tak pokračovat a data okamžitě smazat. Potřebuje replikovat odstranění do jiných uzlů, a to by mělo být provedeno, i když jsou uzly dočasně nedostupné. Cassandra to řeší tak, že smazání přirovnává ke zvláštní formě záznamu zvané „náhrobní kámen“. Během operace čtení jednoduše přeskakuje „náhrobky“, na které se cestou narazí. Životnost „náhrobků“ je konfigurovatelná (ve výchozím nastavení 10 dní) a jsou trvale odstraněny během hutnění základny, pokud lhůta vypršela.

Smazání sloupce a zápis nuly do sloupce je úplně to samé. V obou případech je vytvořen „náhrobní kámen“. Protože všechny zápisy v Cassandře jsou aktualizace a vložky, vytvoříte náhrobek, i když zpočátku napíšete nulu. V praxi se naše úplné rozložení zpráv skládalo ze 16 sloupců, ale průměrná zpráva měla nastavené pouze 4 hodnoty. Nahráli jsme 12 náhrobků v Cassandře, obvykle bez důvodu. Řešení problému bylo jednoduché: do databáze zapisovat pouze nenulové hodnoty.

Výkon

Je známo, že Cassandra je rychlejší při zápisech než čtení, a to je přesně to, co jsme pozorovali. Operace zápisu proběhly v intervalu menším než milisekunda a operace čtení - méně než 5 milisekund. Tyto míry byly pozorovány bez ohledu na typ zpřístupněných dat. Výkon zůstal nezměněn po celý týden testování. Žádné překvapení, dostali jsme přesně to, co jsme očekávali.


Zpoždění čtení/zápisu podle údajů z log

V souladu s rychlým a spolehlivým výkonem čtení je zde příklad přechodu na rok starou zprávu v kanálu s miliony zpráv:

velké překvapení

Všechno šlo hladce, takže jsme Cassandru zavedli jako naši hlavní databázi a během týdne jsme vyřadili MongoDB z provozu. Pokračovala v bezchybné práci ... asi 6 měsíců, až jednoho dne přestala reagovat.

Všimli jsme si, že Cassandra se během sbírání odpadu nepřetržitě na 10 sekund zastavila, ale nemohli jsme tak docela přijít na to proč. Začali jsme kopat a našli jsme kanál Discord, jehož načítání trvalo 20 sekund. Viníkem byl veřejný Discord server subredditu Puzzles & Dragons. Vzhledem k tomu, že je to veřejné, připojili jsme se ke sledování. K našemu překvapení byla na kanálu pouze jedna zpráva. V tu chvíli se ukázalo, že prostřednictvím našich rozhraní API smazali miliony zpráv, takže na kanál zůstala pouze jedna zpráva.

Pokud jste četli pozorně, vzpomeňte si, jak Cassandra řeší mazání pomocí „náhrobků“ (zmíněno v kapitole „Případná konzistence“). Když uživatel načte tento kanál, i když existuje pouze jedna zpráva, Cassandra musí efektivně skenovat miliony náhrobků zpráv. Potom generuje odpadky rychleji, než je dokáže JVM shromáždit.

Tento problém jsme vyřešili následujícím způsobem:

  • Snížila životnost náhrobků z 10 dnů na 2 dny, protože každý večer na našem clusteru zpráv spouštíme opravu Cassandry (proces antientropie).
  • Změnil kód požadavku tak, aby sledoval prázdné bloky v kanálu a v budoucnu se jim vyhnul. To znamená, že pokud uživatel znovu iniciuje tento požadavek, pak v nejhorším případě Cassandra naskenuje pouze úplně poslední blok.

Budoucnost

V tento moment máme shluk 12 uzlů spuštěný s faktorem opakování 3 a podle potřeby budeme i nadále přidávat další uzly Cassandra. Věříme, že tento přístup funguje z dlouhodobého hlediska, ale jak Discord roste, vypadá to jako vzdálená budoucnost, kdy musíme denně ukládat miliardy zpráv. Netflix a Apple provozují clustery se stovkami uzlů, takže se zatím nemáme čeho obávat. Rád bych však měl v záloze pár nápadů.

Blízká budoucnost

  • Upgradujte náš cluster zpráv z Cassandra 2 na Cassandra 3. Nový formát úložiště v Cassandře 3 může snížit úložiště o více než 50 %.
  • Novější verze Cassandry jsou lepší ve zpracování více dat v každém uzlu. V každém z nich aktuálně ukládáme přibližně 1 TB komprimovaných dat. Myslíme si, že je bezpečné snížit počet uzlů v clusteru zvýšením tohoto limitu na 2 TB.

vzdálená budoucnost

  • Learn Scylla je DBMS kompatibilní s Cassandrou napsaný v C++. Za normálního provozu naše uzly Cassandra skutečně spotřebovávají nějaké prostředky CPU, avšak během hodin mimo špičku během opravy Cassandra (proces protientropie) jsou dosti závislé na CPU a doba opravy se zvyšuje v závislosti na množství zapsaných dat od poslední oprava. Scylla slibuje výrazné zvýšení rychlosti oprav.
  • Vytvořte systém pro archivaci nepoužívaných zdrojů do Google Cloud Storage a jejich nahrání zpět na vyžádání. Chceme se tomu vyhnout a nemyslíme si, že to musíme dělat.

Závěr

Od přechodu na Cassandru uplynul více než rok, a to navzdory "velké překvapení" bylo to klidné plavání. Z celkového počtu více než 100 milionů zpráv jsme se dostali na více než 120 milionů zpráv denně při zachování výkonu a stability.

Vzhledem k úspěchu tohoto projektu jsme od té doby úspěšně migrovali všechna naše další data ve výrobě do Cassandry.

V pokračování tohoto článku prozkoumáme, jak provádíme fulltextové vyhledávání v miliardách zpráv.

Stále nemáme specializované inženýry DevOps (pouze čtyři backendové inženýry), takže je opravdu skvělé mít systém, o který se nemusíte starat. Přijímáme zaměstnance, tak se ozvěte, pokud vás tyto hádanky lechtají.

Štítky: Přidat štítky