Museria – decentralizované úložiště hudby

Museria – decentralizované úložiště hudby

Jednoho dne jsem se rozhodl napsat aplikaci, abych si vybral hudbu pro sebe a poslouchal ji doma/na ulici/cvičení atd. A aby to všechno fungovalo plynule, s minimální účastí z mé strany. Vymyslel jsem architekturu, načrtl prototyp a nakonec jsem narazil na jeden „malý problém“.

A není jasné, kde získat samotné soubory písní. Do této doby VKontakte již uzavřel api, na velkých hudebních portálech bylo také vše ztlumeno, dokonce i písně byly vydávány po částech, aby nebyly analyzovány. Zůstaly jen nějaké jednotlivé weby s přelety v noci s tunou reklamy a nejrůznějšími odpadky, všemožnými pochybnými grabovacími programy a dalšími „špinavými“ možnostmi. Obecně není jediné opravdu dobré řešení. Můžete si samozřejmě koupit předplatné nějaké hudby Yandex nebo podobně. Ale zase nikde není otevřené veřejné API a k hudbě nemáte přístup programově. Několik velkých společností v podstatě omezilo přístup ostatních k hudbě. Proč k tomu vůbec došlo? Když jsem se ponořil hlouběji, bylo jasné, že hlavním problémem jsou autorská práva. Současné řešení v podobě předplatného vyhovuje mnoha komerčním hudebním autorům a stejným společnostem. Do obecného seznamu přitom spadá i nekomerční a polokomerční hudba. Buď platíte za všechno, nebo neposloucháte vůbec nic.

A začal jsem přemýšlet, co s tím vším. Jak můžeme zorganizovat bezplatnou distribuci hudby? Co bych dělal, kdybych sám tvořil hudbu a chtěl na ní vydělávat? Líbilo by se mi, kdyby moje písničky byly pirátské? Jaké alternativní řešení vůbec existuje?

V důsledku toho existují dva hlavní problémy, které je třeba vyřešit:

  • Organizace bezplatné distribuce hudby pomocí metod vhodných pro většinu lidí, včetně softwaru.
  • Nabídka alternativ pro hudební tvůrce, jak vydělat peníze

Globální decentralizované úložiště hudby

Zpočátku jsem se snažil najít existující řešení a vytvořit vše na základě toho. Po nějaké době hledání se mi líbil první ipfs. Začal jsem realizovat svůj nápad, ale po chvíli jsem v tomto řešení objevil několik kritických problémů:

  • Ipfs – úložiště pro všechno a pro všechny. Jsou tam obrázky, hudba, videa a vše, co chcete. Obecně taková velká planetární „popelnice“. Proto, když spustíte svůj uzel, okamžitě obdržíte obrovskou zátěž. Auto se jen svíjí bolestí.
  • Nějaký druh nedokončeného mechanismu sběru „odpadu“. Nevím, jak je to teď, ale v tu chvíli, pokud jste v konfiguraci psali, že chcete úložiště omezit na deset gigabajtů dat, tak to nic neznamenalo. Úložiště rostlo a ignorovalo mnoho konfiguračních parametrů. V důsledku toho bylo nutné mít obrovskou rezervu pevného disku, dokud ipfs nepřišlo na to, jak resetovat nepotřebné.
  • V době používání knihovny (nevím, jak je to nyní) klient neměl implementované timeouty. Odešlete žádost o přijetí souboru, a pokud neexistuje, prostě zavěsíte. Lidé samozřejmě vymýšleli nejrůznější řešení, která problém částečně vyřešila, ale byly to berličky. Tyto věci by měly vyjít z krabice.

Stále bylo mnoho menších problémů a dojem byl jasný: toto nelze pro projekt použít. Pokračoval jsem v hledání skladiště, zjišťoval jsem různé možnosti, ale nikdy jsem nenašel nic vhodného.

Nakonec jsem se rozhodl, že stojí za to zkusit napsat decentralizované úložiště sám. I když se netváří jako meziplanetární, vyřeší konkrétní problém.

A tak to dopadlo roztažitelný, skladiště, metastáze, muzea, museria-global.

roztažitelný - toto je hlavní, nejnižší vrstva, která umožňuje kombinovat uzly do sítě. Obsahuje algoritmus, který jsem zatím částečně implementoval na cca 10000 XNUMX serverech. Plná verze algoritmu je mnohem obtížnější implementovat a vyžadovala by několik dalších měsíců (možná i více).

V tomto článku nebudu roztírat podrobně popisovat, bude lepší napsat někdy samostatný. Zde jen upozorním na některé funkce:

  • Funguje přes http/https.
  • Pro konkrétní úkol můžete vytvořit samostatnou síť, což výrazně sníží zatížení každého jednotlivého projektu, než kdyby byly všechny ve stejné síti.
  • Původně byl vymyšlen mechanismus s časovými limity a dalšími drobnostmi. A to funguje pro všechny metody jak v klientovi, tak v uzlu. Nastavení můžete flexibilně spravovat z vaší aplikace.
  • Knihovna je napsána v nodejs. Problémy s výkonem zásobníku jsou kompenzovány jeho decentralizovanou povahou. Zátěž lze „rozložit“ zvýšením počtu uzlů. Na oplátku existuje mnoho výhod: obrovská komunita, jednoduchost a snadné použití, izomorfní klient, žádné externí závislosti atd.

skladiště je vrstva zděděná z spreadable, která umožňuje ukládat soubory v síti. Každý soubor má svůj vlastní hash obsahu, který lze použít k pozdějšímu načtení. Soubory nejsou rozděleny do bloků, ale jsou uloženy celé.

metastáze - vrstva zděděná z spreadable, která umožňuje ukládat data v síti, ale ne soubory. Rozhraní je podobné databázi Nosql. Můžete například přidat soubor do úložiště, získat jeho hash a zapsat ho do metastocle s odkazem na něco.

muzea - zděděno ze zásobníku a metastoklu. Tato vrstva je přímo zodpovědná za ukládání hudby. Úložiště funguje pouze se soubory mp3 a id3 tagy.

Jako „klíč“ k písni je ve formuláři použit její celý název Interpret (TPE1) – název (TIT2). Například:

  • Síra – břemeno
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Dozvíte se co nejpodrobněji, jak se tvoří názvy skladeb. zde. Musíte se podívat na funkci utils.beautifySongTitle().

Procento shod definovaných v nastavení uzlů se považuje za shodu. Například hodnota 0.85 znamená, že pokud funkce porovnání kláves (názvů skladeb) nalezla podobnost více než 85 %, pak se jedná o stejnou skladbu.

Algoritmus pro určení podobnosti je ve funkci utils.getSongSimilarity().

Obal k písni, pro pozdější přijetí, lze také připojit pomocí značek (APIC). Utility mají všechny potřebné metody pro příjem a zpracování tagů.

Ukázku práce s úložištěm prostřednictvím klienta naleznete v readme.

Všechny výše uvedené vrstvy jsou samostatné a lze je použít samostatně jako spodní vrstvy pro jiné projekty. Například už existuje nápad udělat vrstvu pro ukládání knih.

museria-global je již nakonfigurovaný git repozitář pro spuštění vlastního uzlu v globální hudební síti. Klonování npm i && npm začít a to je v podstatě vše. Můžete jej podrobněji nakonfigurovat, spustit v Dockeru atd. Podrobné informace jsou k dispozici na githabe.

Když je úložiště aktualizováno, musíte aktualizovat svůj uzel. Pokud se změní hlavní nebo vedlejší číslo verze, pak je tato akce povinná, jinak budou staré uzly sítí ignorovány.

S písněmi můžete pracovat ručně i programově. Každý uzel provozuje server pro různé úkoly. Včetně toho, že když navštívíte výchozí koncový bod, obdržíte rozhraní pro práci s hudbou. Můžete jít například do kořenový uzel (odkaz nemusí být později relevantní, vstupní uzly lze získat také v telegramnebo vyhledejte aktualizace na Github).

Tímto způsobem můžete vyhledávat a nahrávat skladby do úložiště. Nahrávání skladeb může probíhat ve dvou režimech: normální a moderované. Druhý režim znamená, že práci vykonává osoba, nikoli program. A pokud při přidávání zaškrtnete toto políčko, budete muset vyřešit captcha. Skladby lze přidávat s prioritami -1, 0 nebo 1. Prioritu 1 lze nastavit pouze v moderovaném režimu. Priority jsou potřeba, aby úložiště mohlo efektivněji rozhodovat o tom, co dělat, když se pokusíte nahradit existující skladbu novou. Čím vyšší priorita, tím je pravděpodobnější, že přepíšete existující soubor. To pomáhá bojovat proti spamu a zvyšuje kvalitu stahovaných skladeb.

Pokud začnete přidávat skladby do úložiště, zkuste připojit obrázky (obálku), ačkoli toto pole není povinné. V 99 % případů jsou prvními obrázky na Googlu podle názvů skladeb obaly alb.

Jak technicky probíhá přidávání souborů, v kostce:

  • Klient obdrží adresu volného uzlu, který se na chvíli stane koordinátorem.
  • Funkce přidání skladby je spuštěna (osobou nebo kódem) a je podán požadavek na přidání koordinátora do koncového bodu.
  • Koordinátor vypočítá, kolik duplikátů by mělo být uloženo (konfigurovatelný parametr).
  • Vyhledají se nejvhodnější uzly pro uložení.
  • Soubor jde přímo do těchto uzlů.

Jak technicky jsou soubory přijímány:

  • Klient obdrží adresu volného uzlu, který se na chvíli stane koordinátorem.
  • Spustí se funkce příjmu písně (osobou nebo kódem) a je podán požadavek na její přijetí na koncovém bodu koordinátora.
  • Koordinátor zkontroluje přítomnost odkazu v mezipaměti. Pokud existuje a funguje, je okamžitě vrácen klientovi, jinak jsou uzly dotazovány na dostupnost.
  • Soubor je přijat z odkazu, pokud je nalezen.

Alternativy pro hudební tvůrce

Vždy mě zajímala otázka, jak lze objektivně zhodnotit hodnotu mnoha tvůrčích děl? Proč například člověk nabízí své hudební album za 10 dolarů? Buď za 20 $ nebo 100 $. Kde je algoritmus? Když se například bavíme o nějakém fyzickém produktu, nebo dokonce o mnoha typech služeb, tak si můžeme alespoň spočítat náklady a z toho vycházet.

Dobře, řekněme, že jsme vsadili 10 dolarů. Je to velmi účinné? Řekněme, že jsem někde poslouchal album nebo písničku odtamtud a rozhodl jsem se projevit svou vděčnost. Ale podle mých pocitů a vlastních možností jsou 3 dolary můj strop. Tak co bychom měli dělat? S největší pravděpodobností prostě nic neudělám, jako většina lidí.

Stanovením jakési pevné ceny za kreativní práci se jednoduše omezíte a zabráníte většímu počtu lidí, aby vám posílali méně peněz, což může být v součtu působivější než ti, kteří nakoupí za vámi stanovenou cenu. Zdá se mi, že kreativita je přesně tou oblastí, kde by dárcovství mělo vládnout jako první. K tomu potřebujete:

  • Naučte lidi děkovat tímto způsobem. Sami tvůrci musí jasně ukázat, že chtějí dostávat dary, všude přidávat odkazy na různé platební metody atd.
  • Ke zjednodušení a posílení těchto procesů je zapotřebí více mechanismů. Vytvořte například nějaký druh globální webové stránky, kde můžete přispět na kreativitu pomocí odkazů na autorská práva.

    Řekněme, že odkaz je něco takového:

    http://someartistsdonationsite.site/category/artist?external-info

    Pokud to zúžíme na hudebníky, pak:

    http://someartistsdonationsite.com/music/miyagi?song=blabla

    Interpret musí ověřit svou přezdívku a připojit se k ní.

    Přidáváme funkci pro generování takového odkazu na klienta museria a všechny projekty využívající repozitář mohou u skladeb na své stránky/aplikace umístit darovací tlačítka s těmito odkazy. Uživatelé mají možnost velmi rychle a snadno přispět. Tento přístup lze samozřejmě použít v jakémkoli projektu a kategorii kreativity, nejen prostřednictvím úložiště.

Proč přesně potřebujete úložiště hudby a jak se na něm můžete podílet?

  • Pokud pracujete na nějakém projektu souvisejícím s hudbou, nebo ho plánujete vytvořit, tak k tomu bylo vše určeno. Museria můžete použít k ukládání a načítání skladeb, čímž se zvýší tok skladeb online. Pokud zároveň máte možnost zvýšit a udržet alespoň jeden vlastní uzel, bude to nejlepší příspěvek k rozvoji sítě.
  • Možná jste připraveni převzít nějakou jinou roli: pomoci s kódem nebo vyplnit a moderovat databázi, distribuovat informace o projektu svým přátelům atd.
  • Možná se vám nápad zalíbil a jste připraveni finančně pomoci, aby vše žilo a rozvíjelo se. Čím více uzlů, tím více skladeb.
  • Nebo prostě potřebujete v určitém okamžiku najít a stáhnout skladbu. Můžete to udělat velmi jednoduše, například prostřednictvím telegramový robot.

Projekt je nyní na úplném začátku. Byla spuštěna testovací síť, uzly se mohou často restartovat, vyžadovat aktualizace atd. Pokud se během vyhodnocovacího období nevyskytnou žádné kritické problémy, je tato síť transformována na hlavní.

Informace o uzlu můžete zobrazit zvenčí: počet skladeb, volné místo atd. pomocí odkazu jako http://node-address/status nebo http://node-address/status?pretty

Moje kontakty:

Zdroj: www.habr.com

Přidat komentář