Museria - gedecentraliseerde muziekopslag

Museria - gedecentraliseerde muziekopslag

Op een dag besloot ik een applicatie te schrijven waarmee ik voor mezelf muziek kon selecteren en er thuis/op straat/workouts naar kon luisteren, enz. En zodat dit allemaal in een flow werkt, met minimale deelname van mij. Ik bedacht een architectuur, schetste een prototype en kwam uiteindelijk één ‘klein probleem’ tegen.

En het is niet duidelijk waar je de songbestanden zelf kunt krijgen. Tegen die tijd had VKontakte de API al gesloten, op grote muziekportals was alles ook gedempt, zelfs nummers werden in stukjes uitgedeeld om niet te worden geparseerd. Het enige dat overbleef waren enkele individuele 'fly-by-night'-sites met een hoop reclame en allerlei soorten onzin, allerlei dubieuze grabberprogramma's en andere 'vuile' opties. Over het algemeen geen enkele echt goede oplossing. Je kunt natuurlijk een abonnement kopen op bepaalde Yandex-muziek of iets dergelijks. Maar nogmaals, er is nergens een open publieke API en je hebt geen programmatische toegang tot muziek. Verschillende grote bedrijven hebben de toegang van anderen tot muziek feitelijk beperkt. Waarom gebeurde dit überhaupt? Toen ik dieper graafde, werd het duidelijk dat het grootste probleem het auteursrecht was. De huidige oplossing in de vorm van abonnementen is geschikt voor veel commerciële muziekauteurs en dezelfde bedrijven. Tegelijkertijd valt ook niet-commerciële en semi-commerciële muziek in de algemene lijst. Je betaalt voor alles, of je luistert helemaal naar niets.

En ik begon na te denken wat ik met dit alles moest doen. Hoe kunnen we de gratis distributie van muziek organiseren? Wat zou ik doen als ik zelf muziek zou maken en er geld mee zou willen verdienen? Zou ik het leuk vinden als mijn liedjes illegaal zouden zijn? Welke alternatieve oplossing is er überhaupt?

Als gevolg hiervan zijn er twee belangrijke problemen die moeten worden opgelost:

  • Organisatie van gratis distributie van muziek met behulp van methoden die voor de meeste mensen handig zijn, inclusief software.
  • Het aanbieden van alternatieven voor muziekmakers om geld te verdienen

Wereldwijde gedecentraliseerde muziekopslag

In eerste instantie probeerde ik bestaande oplossingen te vinden en op basis hiervan alles te creëren. Na een tijdje zoeken was de eerste die ik leuk vond IPFs. Ik begon mijn idee te implementeren, maar na een tijdje ontdekte ik verschillende kritieke problemen in deze oplossing:

  • Ipfs - opslag voor alles en iedereen. Er zijn afbeeldingen en muziek en video's en alles wat je maar wilt. Over het algemeen zo'n grote planetaire "vuilnisbak". Daarom ontvangt u onmiddellijk een enorme belasting wanneer u uw knooppunt start. De auto kronkelt alleen maar van de pijn.
  • Een soort onvoltooid afvalinzamelingsmechanisme. Ik weet niet hoe het nu is, maar als je op dat moment in de configuratie schreef dat je de opslag wilde beperken tot tien gigabyte aan gegevens, dan betekende dat niets. De opslag groeide, waarbij veel configuratieparameters werden genegeerd. Als gevolg hiervan was het noodzakelijk om een ​​enorme reserve aan harde schijven te hebben totdat ipfs erachter kwam hoe ze het onnodige konden resetten.
  • Op het moment dat de bibliotheek werd gebruikt (ik weet niet hoe het nu is), had de klant geen time-outs geïmplementeerd. Je stuurt een verzoek om een ​​bestand te ontvangen, en als het niet bestaat, blijf je hangen. Natuurlijk bedachten mensen allerlei oplossingen die het probleem gedeeltelijk oplosten, maar dit waren krukken. Deze dingen zouden uit de doos moeten komen.

Er waren nog veel kleine problemen en de indruk was duidelijk: dit kan niet worden gebruikt voor het project. Ik bleef zoeken naar een opslagruimte en onderzocht verschillende opties, maar vond nooit iets geschikts.

Uiteindelijk besloot ik dat het de moeite waard was om zelf een gedecentraliseerde opslag te schrijven. Zelfs als het niet pretendeert interplanetair te zijn, zal het een specifiek probleem oplossen.

En zo bleek smeerbaar, opbergruimte, metastokel, museria, museria-global.

smeerbaar - dit is de belangrijkste, onderste laag waarmee u knooppunten tot een netwerk kunt combineren. Het bevat een algoritme dat ik tot nu toe gedeeltelijk heb geïmplementeerd op basis van ongeveer 10000 servers. De volledige versie van het algoritme is veel moeilijker te implementeren en zou enkele extra maanden (misschien meer) vergen.

Ik zal smeerbaar niet in detail beschrijven in dit artikel; het is beter om er ooit een apart artikel over te schrijven. Hier zal ik slechts enkele kenmerken opmerken:

  • Werkt via http/https.
  • U kunt voor een specifieke taak een afzonderlijk netwerk creëren, waardoor de belasting van elk afzonderlijk project aanzienlijk wordt verminderd dan wanneer ze allemaal op hetzelfde netwerk zouden zitten.
  • Aanvankelijk werd gedacht aan een mechanisme met time-outs en andere kleine dingen. En dit werkt voor alle methoden, zowel in de client als in het knooppunt. U kunt de instellingen flexibel beheren vanuit uw applicatie.
  • De bibliotheek is geschreven in nodejs. De prestatieproblemen van de stapel worden gecompenseerd door het gedecentraliseerde karakter ervan. De belasting kan worden “gespreid” door het aantal knooppunten te vergroten. In ruil daarvoor zijn er veel voordelen: een enorme community, eenvoud en gebruiksgemak, een isomorfe client, geen externe afhankelijkheden, enz.

opbergruimte is een laag die is overgenomen van spreadable en waarmee u bestanden op het netwerk kunt opslaan. Elk bestand heeft zijn eigen hash van de inhoud, die kan worden gebruikt om deze later op te halen. Bestanden worden niet in blokken verdeeld, maar in zijn geheel opgeslagen.

metastokel - een laag die is overgenomen van spreadable, waarmee u gegevens op het netwerk kunt opslaan, maar geen bestanden. De interface is vergelijkbaar met een NoSQL-database. U kunt bijvoorbeeld een bestand aan Storacle toevoegen, de hash ophalen en het naar Metastocle schrijven met een link naar iets.

museria - geërfd van storakel en metastokel. Deze laag is direct verantwoordelijk voor het opslaan van muziek. De opslag werkt alleen met mp3-bestanden en id3-tags.

Als ‘sleutel’ voor het nummer wordt de volledige naam in de vorm gebruikt Artiest (TPE1) - Titel (TIT2). Bijvoorbeeld:

  • Zwavel - De last
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Je kunt zo gedetailleerd mogelijk ontdekken hoe songtitels worden gevormd. hier. Je moet naar de functie kijken utils.beautifySongTitle().

Het percentage overeenkomsten dat in de knooppuntinstellingen is gedefinieerd, wordt als een overeenkomst beschouwd. Een waarde van 0.85 betekent bijvoorbeeld dat als de sleutelvergelijkingsfunctie (nummernamen) een overeenkomst van meer dan 85% vindt, het om hetzelfde nummer gaat.

Het algoritme voor het bepalen van gelijkenis bevindt zich in de functie utils.getSongSimilarity().

Cover bij het nummer, voor latere ontvangst, kan ook via tags worden bevestigd (APIC). Hulpprogramma's beschikken over alle benodigde methoden voor het ontvangen en verwerken van tags.

Een voorbeeld van het werken met opslag via een client vind je in readme.

Alle bovenstaande lagen staan ​​op zichzelf en kunnen afzonderlijk worden gebruikt als onderlagen voor andere projecten. Er bestaat bijvoorbeeld al een idee om een ​​laag te maken voor het opbergen van boeken.

museria-global is een reeds geconfigureerde git-repository voor het lanceren van je eigen knooppunt in het wereldwijde muzieknetwerk. Klonen npm ik && npm beginnen en dat is het eigenlijk. U kunt het gedetailleerder configureren, uitvoeren in Docker, enz. Gedetailleerde informatie is beschikbaar op githabe.

Wanneer de repository wordt bijgewerkt, moet u uw knooppunt bijwerken. Als het primaire of secundaire versienummer verandert, is deze actie verplicht, anders worden de oude knooppunten door het netwerk genegeerd.

U kunt handmatig en programmatisch met nummers werken. Elk knooppunt voert een server uit voor verschillende taken. Wanneer u het standaardeindpunt bezoekt, ontvangt u ook een interface voor het werken met muziek. Je kunt bijvoorbeeld naar wortel knooppunt (de link is later mogelijk niet relevant, invoerknooppunten kunnen ook worden verkregen in telegram, of zoek naar updates op Github).

Zo kun je nummers zoeken en uploaden naar de opslag. Het uploaden van nummers kan in twee modi plaatsvinden: normaal en gemodereerd. De tweede modus betekent dat het werk wordt uitgevoerd door een persoon en niet door een programma. En als u dit vakje aanvinkt tijdens het toevoegen, moet u de captcha oplossen. Nummers kunnen worden toegevoegd met prioriteiten -1, 0 of 1. Prioriteit 1 kan alleen worden ingesteld in de gemodereerde modus. Er zijn prioriteiten nodig zodat de opslag effectiever kan beslissen wat er moet gebeuren als u een bestaand nummer probeert te vervangen door een nieuw nummer. Hoe hoger de prioriteit, hoe groter de kans dat u een bestaand bestand overschrijft. Dit helpt spam te bestrijden en verhoogt de kwaliteit van gedownloade nummers.

Als u nummers aan uw opslag gaat toevoegen, probeer dan afbeeldingen (omslag) bij te voegen, hoewel dit veld niet verplicht is. In 99% van de gevallen zijn de eerste afbeeldingen op Google op basis van de titels van nummers albumhoezen.

Hoe technisch het toevoegen van bestanden in zijn werk gaat, in een notendop:

  • De klant krijgt het adres van een vrije node, die een tijdje coördinator wordt.
  • De functie van het toevoegen van een nummer wordt geactiveerd (door een persoon of code) en er wordt een verzoek gedaan om een ​​coördinator aan het eindpunt toe te voegen.
  • De coördinator berekent hoeveel duplicaten er moeten worden opgeslagen (configureerbare parameter).
  • Er wordt gezocht naar de meest geschikte knooppunten om op te slaan.
  • Het bestand gaat rechtstreeks naar deze knooppunten.

Hoe technisch worden de bestanden ontvangen:

  • De klant krijgt het adres van een vrije node, die een tijdje coördinator wordt.
  • De functie van het ontvangen van een nummer (door een persoon of een code) wordt geactiveerd en er wordt een verzoek gedaan om het te ontvangen op het eindpunt van de coördinator.
  • De coördinator controleert op de aanwezigheid van de link in de cache. Als er een is en deze werkt, wordt deze onmiddellijk teruggestuurd naar de client, anders worden de knooppunten gecontroleerd op beschikbaarheid.
  • Het bestand wordt ontvangen via de link, als deze wordt gevonden.

Alternatieven voor muziekmakers

Ik ben altijd geïnteresseerd geweest in de vraag hoe je de waarde van veel creatieve werken objectief kunt beoordelen? Waarom biedt iemand bijvoorbeeld zijn muziekalbum aan voor €10? Of het nu voor $ 20 of $ 100 is. Waar is het algoritme? Als we het bijvoorbeeld over een fysiek product hebben, of zelfs over veel soorten diensten, dan kunnen we op zijn minst de kosten berekenen en daarvan uitgaan.

Oké, laten we zeggen dat we $ 10 inzetten. Is dit erg effectief? Laten we zeggen dat ik ergens naar een album of een nummer daarvan heb geluisterd en besloot mijn dankbaarheid te tonen. Maar volgens mijn gevoelens en mijn eigen mogelijkheden is $ 3 mijn plafond. Dus, wat zullen we doen? Hoogstwaarschijnlijk zal ik gewoon niets doen, zoals de meeste mensen.

Door een vaste prijs in te stellen voor creatief werk, beperk je eenvoudigweg jezelf, waardoor je voorkomt dat een groter aantal mensen je minder geld sturen, wat in totaal indrukwekkender kan zijn dan degenen die voor de door jou ingestelde prijs willen kopen. Het lijkt mij dat creativiteit precies het terrein is waarop donaties voorop moeten staan. Om dit te doen heb je nodig:

  • Leer mensen op deze manier dank te zeggen. De makers moeten zelf duidelijk laten zien dat ze graag donaties willen ontvangen, overal links naar verschillende betaalmethoden toevoegen, etc.
  • Er zijn meer mechanismen nodig om deze processen te vereenvoudigen en te versterken. Maak bijvoorbeeld een soort wereldwijde website waar u kunt doneren voor creativiteit met behulp van copyrightlinks.

    Laten we zeggen dat de link ongeveer zo is:

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

    Als we het beperken tot muzikanten, dan:

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

    De artiest moet zijn bijnaam verifiëren en eraan hechten.

    We voegen een functie toe voor het genereren van een dergelijke link naar de museria-client, en alle projecten die de repository gebruiken, kunnen donatieknoppen met deze links naast de nummers op hun websites/applicaties plaatsen. Gebruikers hebben de mogelijkheid om zeer snel en eenvoudig een donatie te doen. Uiteraard kan deze aanpak worden gebruikt in elk project en elke categorie van creativiteit, en niet alleen via opslag.

Waarom heb je precies een muziekopslagruimte nodig, en hoe kun je daaraan meedoen?

  • Als je aan een project werkt dat verband houdt met muziek, of van plan bent er een te maken, dan is dit waar alles voor bedoeld is. Je kunt museria gebruiken om nummers op te slaan en op te halen, waardoor de stroom nummers online toeneemt. Als je tegelijkertijd de mogelijkheid hebt om ten minste één eigen knooppunt op te richten en vast te houden, dan is dit de beste bijdrage aan de ontwikkeling van het netwerk.
  • Misschien ben je klaar om een ​​andere rol op je te nemen: helpen met de code, of de database invullen en modereren, informatie over het project verspreiden onder je vrienden, enz.
  • Misschien vond je het een leuk idee en ben je bereid om financieel te helpen, zodat het allemaal leeft en zich ontwikkelt. Hoe meer knooppunten, hoe meer nummers.
  • Of je moet gewoon op een gegeven moment een nummer vinden en downloaden. Dit kun je heel eenvoudig doen, bijvoorbeeld via telegram-bot.

Het project bevindt zich nu in de allereerste beginfase. Er is een testnetwerk gelanceerd, knooppunten kunnen regelmatig opnieuw opstarten, updates nodig hebben, enz. Als er tijdens de evaluatieperiode geen kritieke problemen zijn, wordt ditzelfde netwerk omgevormd tot het belangrijkste netwerk.

U kunt informatie over het knooppunt van buitenaf bekijken: het aantal nummers, vrije ruimte, enz., met behulp van een link zoals http://node-address/status of http://node-address/status?pretty

Mijn contacten:

Bron: www.habr.com

Voeg een reactie