Museria - decentralizirana pohrana glazbe

Museria - decentralizirana pohrana glazbe

Jednog sam dana odlučio napisati aplikaciju kako bih odabrao glazbu za sebe i slušao je kod kuće/na ulici/na vježbanju itd. I tako da sve to radi u toku, uz minimalno moje sudjelovanje. Smislio sam arhitekturu, skicirao prototip i na kraju naišao na jedan "mali problem".

I nije jasno gdje nabaviti same datoteke pjesama. U to vrijeme VKontakte je već zatvorio api, na velikim glazbenim portalima sve je također bilo utišano, čak su i pjesme davane u komadima kako se ne bi analizirale. Ostala su samo neka pojedinačna mjesta za letenje s gomilom reklama i svakakvim smećem, svakakvim sumnjivim grabber programima i drugim "prljavim" opcijama. Općenito, niti jedno stvarno dobro rješenje. Možete, naravno, kupiti pretplatu na neku Yandex glazbu ili slično. Ali opet, nigdje ne postoji otvoreni javni API i nemate pristup glazbi programski. Nekoliko velikih kompanija u biti je drugima ograničilo pristup glazbi. Zašto se to uopće dogodilo? Kopajući dublje, postalo je jasno da su glavni problem autorska prava. Trenutno rješenje u obliku pretplate odgovara mnogim komercijalnim autorima glazbe i tim istim tvrtkama. Istovremeno, nekomercijalna i polukomercijalna glazba također spada u opći popis. Ili plaćate za sve ili ne slušate ništa.

I počeo sam razmišljati što učiniti sa svim tim. Kako možemo organizirati besplatnu distribuciju glazbe? Što bih napravio da sam stvaram glazbu i da od toga želim zarađivati? Bih li volio da su moje pjesme piratske? Koje alternativno rješenje uopće postoji?

Kao rezultat toga, postoje dva glavna problema koja se moraju riješiti:

  • Organizacija besplatne distribucije glazbe koristeći metode pogodne za većinu ljudi, uključujući softver.
  • Nudeći alternative za zaradu glazbenim stvarateljima

Globalna decentralizirana pohrana glazbe

U početku sam pokušao pronaći postojeća rješenja i na temelju toga sve kreirati. Nakon nekog vremena traženja, prva mi se svidjela ipfs. Počeo sam provoditi svoju ideju, ali sam nakon nekog vremena otkrio nekoliko kritičnih problema u ovom rješenju:

  • Ipfs - pohrana za sve i svakoga. Tu su slike i glazba i video i sve što želite. Općenito, tako velika planetarna "kanta za smeće". Stoga, kada pokrenete svoj čvor, odmah dobivate ogromno opterećenje. Auto se samo grči od boli.
  • Neka vrsta nedovršenog mehanizma za prikupljanje "smeća". Ne znam kako je sada, ali u tom trenutku, ako ste u konfiguraciji napisali da želite ograničiti pohranu na deset gigabajta podataka, onda to nije ništa značilo. Pohrana je rasla, zanemarujući mnoge konfiguracijske parametre. Kao rezultat toga, bilo je potrebno imati veliku rezervu tvrdog diska dok ipfs nije shvatio kako resetirati nepotrebno.
  • U vrijeme korištenja knjižnice (ne znam kako je sada), klijent nije imao implementirane timeouts. Pošaljete zahtjev za primanje datoteke, a ako ona ne postoji, onda samo visi. Naravno, ljudi su smislili svakakva rješenja koja su djelomično riješila problem, ali to su bile štake. Ove stvari bi trebale izaći iz kutije.

Bilo je još mnogo manjih problema, a dojam je bio jasan: to se ne može koristiti za projekt. Nastavio sam tražiti skladišni prostor, istražujući različite mogućnosti, ali nikad nisam našao ništa prikladno.

Na kraju sam odlučio da se isplati pokušati sam napisati decentraliziranu pohranu. Čak i ako se ne pretvara da je međuplanetarna, riješit će određeni problem.

I tako je ispalo mazive, skladište, metastokul, muserija, museria-global.

mazive - ovo je glavni, najniži sloj koji vam omogućuje kombiniranje čvorova u mrežu. Sadrži algoritam, koji sam do sada djelomično implementirao na oko 10000 servera. Punu verziju algoritma mnogo je teže implementirati i zahtijevat će nekoliko dodatnih mjeseci (možda i više).

U ovom članku neću detaljno opisivati ​​mazivo, bolje je da jednog dana napišem poseban. Ovdje ću samo napomenuti neke karakteristike:

  • Radi preko http/https.
  • Možete kreirati zasebnu mrežu za određeni zadatak, što će značajno smanjiti opterećenje svakog pojedinačnog projekta nego da su svi na istoj mreži.
  • U početku je zamišljen mehanizam s timeoutom i drugim sitnicama. I ovo radi za sve metode i u klijentu i u čvoru. Možete fleksibilno upravljati postavkama unutar svoje aplikacije.
  • Knjižnica je napisana u nodejs. Problemi s izvedbom stoga nadoknađeni su njegovom decentraliziranom prirodom. Opterećenje se može "rasprostrijeti" povećanjem broja čvorova. Zauzvrat, postoje mnoge prednosti: velika zajednica, jednostavnost i lakoća korištenja, izomorfni klijent, nema vanjskih ovisnosti itd.

skladište je sloj naslijeđen od spreadable koji vam omogućuje pohranjivanje datoteka na mreži. Svaka datoteka ima vlastiti hash svog sadržaja, koji se može koristiti za kasnije dohvaćanje. Datoteke nisu podijeljene u blokove, već se pohranjuju u cijelosti.

metastokul - sloj naslijeđen od spreadable, koji vam omogućuje pohranjivanje podataka na mreži, ali ne i datoteka. Sučelje je slično Nosql bazi podataka. Možete, na primjer, dodati datoteku u storacle, dobiti njen hash i napisati je u metastocle s vezom na nešto.

muserija - naslijeđeno od storakla i metastokula. Ovaj sloj je izravno odgovoran za pohranu glazbe. Pohrana radi samo s mp3 datotekama i id3 oznakama.

Kao “ključ” pjesme, u obrascu se koristi njen puni naziv Izvođač (TPE1) - Naslov (TIT2), Na primjer:

  • Brimstone - The Burden
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Možete saznati što detaljnije kako nastaju naslovi pjesama. ovdje. Morate pogledati funkciju utils.beautifySongTitle().

Postotak podudaranja definiran u postavkama čvora smatra se podudaranjem. Na primjer, vrijednost od 0.85 znači da ako je ključna funkcija usporedbe (imena pjesama) pronašla sličnost veću od 85%, onda se radi o istoj pjesmi.

Algoritam za određivanje sličnosti je tu, u funkciji utils.getSongSimilarity().

Obrada pjesme, za kasnije dobivanje, također se može pričvrstiti putem tagova (APIC). Uslužni programi imaju sve potrebne metode za primanje i obradu oznaka.

Primjer rada s pohranom preko klijenta može se pronaći u obavijesna.

Svi gore navedeni slojevi su samostalni i mogu se koristiti odvojeno kao niži slojevi za druge projekte. Na primjer, već postoji ideja da se napravi sloj za pohranu knjiga.

museria-global je već konfigurirano git spremište za pokretanje vlastitog čvora u globalnoj glazbenoj mreži. Kloniranje npm i && npm start i to je u biti to. Možete ga detaljnije konfigurirati, pokrenuti u Dockeru itd. Detaljne informacije dostupne su na githabe.

Kada se repozitorij ažurira, morate ažurirati svoj čvor. Ako se glavni ili sporedni broj verzije promijeni, tada je ova radnja obavezna, inače će mreža ignorirati stare čvorove.

S pjesmama možete raditi ručno i programski. Svaki čvor pokreće poslužitelj za različite zadatke. Uključujući, kada posjetite zadanu krajnju točku, dobit ćete sučelje za rad s glazbom. Na primjer, možete otići na korijenski čvor (veza možda neće biti relevantna kasnije, ulazni čvorovi također se mogu dobiti u telegram, ili potražite ažuriranja na Githubu).

Na ovaj način možete pretraživati ​​i postavljati pjesme u pohranu. Prijenos pjesama može se odvijati u dva načina: normalno i moderirano. Drugi način rada znači da posao obavlja osoba, a ne program. A ako označite ovaj okvir prilikom dodavanja, morat ćete riješiti captcha. Pjesme se mogu dodavati s prioritetima -1, 0 ili 1. Prioritet 1 može se postaviti samo u moderiranom načinu rada. Prioriteti su potrebni kako bi pohrana mogla učinkovitije odlučiti što učiniti kada pokušate zamijeniti postojeću pjesmu novom. Što je veći prioritet, veća je vjerojatnost da ćete prebrisati postojeću datoteku. To pomaže u borbi protiv neželjene pošte i povećava kvalitetu preuzetih pjesama.

Ako počnete dodavati pjesme u svoju pohranu, pokušajte priložiti slike (naslovnice), iako ovo polje nije obavezno. U 99% slučajeva prve slike na Googleu prema naslovima pjesama su naslovnice albuma.

Kako tehnički dolazi do dodavanja datoteka, ukratko:

  • Klijent dobiva adresu slobodnog čvora, koji će na neko vrijeme postati koordinator.
  • Pokreće se funkcija dodavanja pjesme (od strane osobe ili koda) i postavlja se zahtjev za dodavanjem koordinatora na krajnju točku.
  • Koordinator izračunava koliko duplikata treba pohraniti (parametar koji se može konfigurirati).
  • Traže se najprikladniji čvorovi za spremanje.
  • Datoteka ide izravno do ovih čvorova.

Tehnički kako se datoteke primaju:

  • Klijent dobiva adresu slobodnog čvora, koji će na neko vrijeme postati koordinator.
  • Pokreće se funkcija primanja pjesme (od strane osobe ili koda) i postavlja se zahtjev za primanje iste na krajnjoj točki koordinatora.
  • Koordinator provjerava prisutnost poveznice u predmemoriji. Ako postoji i radi, odmah se vraća klijentu, inače se čvorovi ispituju radi dostupnosti.
  • Datoteka se prima s veze, ako je pronađena.

Alternative za glazbene stvaratelje

Oduvijek me zanimalo pitanje kako objektivno ocijeniti vrijednost mnogih kreativnih djela? Zašto, na primjer, osoba nudi svoj glazbeni album za 10 dolara? Ili za 20 ili 100 dolara. Gdje je algoritam? Kada je, na primjer, riječ o nekom fizičkom proizvodu, pa čak i više vrsta usluga, onda možemo barem izračunati trošak i krenuti od toga.

U redu, recimo da se kladimo u 10 dolara. Je li ovo vrlo učinkovito? Recimo da sam negdje poslušao album ili pjesmu od tamo i odlučio pokazati svoju zahvalnost. Ali prema mojim osjećajima i vlastitim mogućnostima, 3 dolara je moj plafon. Dakle, što da radimo? Najvjerojatnije jednostavno neću učiniti ništa, kao većina ljudi.

Postavljanjem nekakve fiksne cijene za kreativni rad jednostavno ograničavate sami sebe, sprječavajući veći broj ljudi da vam šalje manje novca, što ukupno može biti impresivnije od onih koji će kupovati po cijeni koju ste postavili. Čini mi se da je upravo kreativnost ono područje u kojem bi donacije trebale vladati prije svega. Da biste to učinili potrebno vam je:

  • Naučite ljude da zahvaljuju na ovaj način. Sami kreatori moraju jasno pokazati da žele primati donacije, posvuda dodati poveznice na različite načine plaćanja itd.
  • Potrebno je više mehanizama za pojednostavljenje i jačanje tih procesa. Na primjer, stvorite neku vrstu globalne web stranice na kojoj možete donirati za kreativnost koristeći veze za autorska prava.

    Recimo da je poveznica otprilike ovakva:

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

    Ako ga suzimo na glazbenike, onda:

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

    Izvođač mora potvrditi svoj nadimak i priložiti ga.

    Dodajemo funkciju za generiranje takve poveznice klijentu museria, a svi projekti koji koriste repozitorij mogu postaviti gumbe za donacije s ovim poveznicama pored pjesama na svojim web stranicama/aplikacijama. Korisnici imaju mogućnost vrlo brzo i jednostavno donirati. Naravno, ovaj se pristup može koristiti u bilo kojem projektu i kategoriji kreativnosti, ne samo kroz skladištenje.

Zašto vam točno treba postrojenje za pohranu glazbe i kako možete u tome sudjelovati?

  • Ako radite na nekom projektu vezanom uz glazbu, ili ga planirate kreirati, onda je tome sve i namijenjeno. Museria možete koristiti za pohranjivanje i dohvaćanje pjesama, povećavajući protok pjesama na mreži. Ako pritom imate mogućnost podići i držati barem jedan vlastiti čvor, onda će to biti najbolji doprinos razvoju mreže.
  • Možda ste spremni preuzeti neku drugu ulogu: pomoći oko koda ili ispuniti i moderirati bazu podataka, distribuirati informacije o projektu svojim prijateljima itd.
  • Možda vam se svidjela ideja i spremni ste financijski pomoći kako bi sve zaživjelo i razvijalo se. Što više čvorova, više pjesama.
  • Ili samo trebate pronaći i preuzeti pjesmu u nekom trenutku. To možete učiniti vrlo jednostavno, na primjer, putem telegram bot.

Projekt je sada na samom početku. Testna mreža je pokrenuta, čvorovi se mogu često ponovno pokretati, zahtijevati ažuriranja itd. Ako tijekom razdoblja evaluacije nema kritičnih problema, ta ista mreža se pretvara u glavnu.

Informacije o čvoru možete vidjeti izvana: broj pjesama, slobodan prostor itd., koristeći poveznicu poput http://node-address/status ili http://node-address/status?pretty

Moji kontakti:

Izvor: www.habr.com

Dodajte komentar