
Egyszer elhatároztam, hogy írok egy alkalmazást, hogy zenét válogassak magamnak, és hallgassam otthon/kint/edzés közben, stb. És hogy mindez folyamatosan működjön, a lehető legkevesebb részvételemmel. Kitaláltam az architektúrát, készítettem egy prototípust, és végül egy "kicsi problémával" találkoztam.
De nem volt világos, honnan szerezzem be magukat a dalfájlokat. Ekkorra a Vkontakte már bezárta az API-ját, a nagy zenei portálokon is minden elakadt, még a dalokat is darabokban adják át, hogy ne lehessen őket lementeni. Csak néhány különálló, hirdetésekkel teli, egy napig élő weboldal maradt, mindenféle kétes programokkal és egyéb "piszkos" megoldásokkal. Szóval nem volt egyetlen érvényes jó megoldás sem. Persze, lehetne előfizetni valamilyen Yandex Music-ra vagy hasonlóra. De ismét, sehol sincs nyilvánosan elérhető API, és nincs programozott hozzáférés a zenéhez. Néhány nagyobb cég lényegében korlátozta a zenei hozzáférést mások számára. Miért történik ez egyáltalán? Mélyebbre ásva világossá vált, hogy a fő probléma a szerzői jogokkal van. A jelenlegi előfizetéses modell sok kereskedelmi zenemű szerzőjének és ezeknek a cégeknek is megfelel. Eközben a nem kereskedelmi és félig kereskedelmi zene is bekerül a közös listába. Vagy mindent kifizetsz, vagy egyáltalán nem hallgatsz semmit.
Kezdtem gondolkodni, mit is tegyek ezzel az egésszel. Hogyan lehetne a zene szabad terjesztését megszervezni? Mit tennék, ha én magam zenét készítenék és szeretnék pénzt keresni ezzel? Tetszene, ha a dalaimat kalóz módon terjesztenék? Milyen alternatív megoldás létezik egyáltalán?
Végül két fő problémává álltak össze, amelyeket meg kell oldani:
- A zene szabad terjesztésének megszervezése a legtöbb ember számára kényelmes módszerekkel, beleértve a programokat is.
- Alternatív ajánlatok létrehozása a zeneszerzők számára a keresetükhöz
Globális decentralizált zenei tároló
Kezdetben próbáltam már meglévő megoldásokat találni, és erre alapozva létrehozni mindent. Néhány keresés után elsőként a -t találtam. Elkezdtem megvalósítani az ötletemet, de egy idő után több kritikus problémát fedeztem fel ebben a megoldásban:
- Az IPFS - mindent és mindenkit tároló. Itt vannak képek, zene, videók és minden, ami csak elképzelhető. Tulajdonképpen egy nagy planetáris "kukának" nevezhető. Tehát amikor elindítod a csomópontodat, azonnal hatalmas terheléssel találkozol. A gép egyszerűen szenved a terheléstől.
- Valamilyen befejezetlen módszer a "szemét" összegyűjtésére. Nem tudom, hogy most hogy van, de abban a pillanatban, ha a konfigurációdban beírtad, hogy szeretnél tíz gigabájtra korlátozni a tárolót, az semmit sem jelentett. A tároló növekedett, figyelmen kívül hagyva sok konfigurációs paramétert. Végül is hatalmas merevlemez-kapacitással kellett rendelkezned, míg az IPFS ki tudta takarítani a felesleges anyagokat.
- A könyvtár használatakor (nem tudom, hogy ez most hogy van) a kliens nem valósította meg az időkorlátokat. Küldesz egy kérést egy fájl lekérésére, és ha az nem található, egyszerűen várakozol. Persze az emberek kitalálták a különböző megoldásokat, amelyek részben megoldották a problémát, de ezek csak ideiglenes megoldások voltak. Ezeknek dobozból kellene működniük.
Ráadásul sok apró probléma is felmerült, a benyomásom egyértelműen az volt: ezt nem lehet használni projekthez. Folytattam a tárolók keresését, különböző lehetőségeket tanulmányoztam, de végül nem találtam megfelelőt.
Végül úgy döntöttem, hogy érdemes megpróbálni saját decentralizált tárolót írni. Nem azért, hogy interplanetáris szerepre pályázzon, hanem hogy egy konkrét feladatot megoldjon.
Így született meg , , , , .
spreadable ez a fő, legalsó réteg, amely lehetővé teszi a csomópontok összekapcsolását a hálózatban. Itt van egy algoritmus, amit eddig részlegesen valósítottam meg, körülbelül 10.000 szerverre kalkulálva. Az algoritmus teljes verziója sokkal bonyolultabb a megvalósítás szempontjából, és további hónapokat igényelne (talán többet is).
Részleteiben nem fogom itt a spreadable-t bemutatni, inkább írok róla külön cikket valamikor. Itt csak néhány jellemzőt emelnék ki:
- HTTP/HTTPS-en keresztül működik.
- Külön hálózatokat lehet létrehozni konkrét feladatokhoz, ami lényegesen csökkenti a terhelést minden egyes projekten, mintha mindannyian egy hálózatban lennének.
- Eredetileg be volt tervezve az időkorlátok és egyéb apróságok mechanizmusa. Ez minden módszerre működik, mind a kliensben, mind a csomópontban. Rugalmasan kezelheted a paramétereket a saját alkalmazásodból.
- A könyvtár nodejs-ben készült. A verem teljesítményproblémáit a decentralizált természet kompenzálja. A terhelést "el lehet osztani" a csomópontok számának növelésével. Cserébe sok előny: hatalmas közösség, egyszerű és kényelmes használat, izomorf kliens, külső függőségek hiánya stb.
storacle — ez egy spreadable-től öröklődő réteg, amely lehetővé teszi fájlok tárolását a hálózaton. Minden fájl rendelkezik egy saját hash-sel a tartalom alapján, amely később a hozzáférése lehetséges. A fájlok nem blokkokra oszlanak, hanem egészben kerülnek tárolásra.
metastocle — egy spreadable-től öröklődő réteg, amely lehetővé teszi adatok tárolását a hálózaton, de nem fájlokat. Az interfész hasonló a nosql adatbázisokhoz. Például lehet egy fájlt hozzáadni a storacle-hoz, megkapni a hash-ét, és bejegyezni a metastocle-ba valamivel való kapcsolódással.
museria — a storacle és metastocle örököse. Ez a réteg közvetlenül felelős a zene tárolásáért. A tároló csak mp3 fájlokkal és id3 címkékkel működik.
A dal „kulcsaként” a teljes címe szolgál, formában Előadó (TPE1) — Cím (TIT2). Például:
- Brimstone — The Burden
- Hi-rez — Lost My Way (feat. Emilio Rojas, Dani Devinci)
A dal címének kialakulásáról a lehető legrészletesebb információt lehet kapni . A funkciót kell megnézni utils.beautifySongTitle().
A kulcsok szerinti egyezést a csomópont beállításaiban meghatározott százalék tekinti. Például a 0.85-ös érték azt jelenti, hogy ha a kulcsok (dalok címei) összehasonlító funkciója 85%-nál nagyobb hasonlóságot észlel, akkor ugyanarról a dalról van szó.
A hasonlóság meghatározó algoritmus ugyanott van, a utils.getSongSimilarity().
A dal borítója, a további eléréshez, szintén a címkék (APIC). A segédprogramokban (utils) minden szükséges módszer megtalálható a címkék megszerzéséhez és feldolgozásához.
Példa a tárolóval való munkára a kliensen keresztül megtekinthető a .
Az összes fent említett réteg önellátó, és külön is használható, mint alacsonyabb rétegek más projektekhez. Például már most van elképzelésünk arra, hogy könyvek tárolására szolgáló réteget hozzunk létre.
museria-global — ez egy már konfigurált git-repozitórium, amely lehetővé teszi a saját csomópont elindítását a globális zenehálózaton. Klónozi, npm i && npm start, és lényegében ennyi. Részletesebben beállítható, futtatható dockerben stb. Részletes információ található az .
Amikor a tároló frissül, a csomópontodnak is frissülnie kell. Ha a fő vagy a mellékverzió száma megváltozik, ez a lépés kötelező, különben a régi csomópontokat figyelmen kívül hagyja a hálózat.
A dalokkal manuálisan és programozottan is lehet dolgozni. Minden csomópont szervert indít különböző feladatokhoz. Például, ha ellátogatsz az alapértelmezett végpontra, egy felületet kapsz a zenével való munkához. Például meglátogathatod a (a link később elavulhat, a belépési csomópontokat szintén megkaphatod a , vagy megnézheted a frissítéseket a GitHubon).
Így kereshetsz és tölthetsz le dalokat a tárolóban. A dalok feltöltése két módban történhet: normál és moderált. A második üzemmód azt jelenti, hogy az ember intézi a munkát, nem a program. Ha ezt a jelölőnégyzetet bejelölöd a hozzáadáskor, akkor captcha-t kell megoldanod. A dalokat -1, 0 vagy 1 prioritással lehet hozzáadni. A 1 prioritás csak a moderált üzemmódban adható meg. A prioritások segítenek abban, hogy a tároló hatékonyabban döntsön arról, mit tegyen, amikor megpróbálod kicserélni a már létező dalt egy újra. Minél nagyobb a prioritás, annál nagyobb az esély, hogy felülírod a meglévő fájlt. Ez segít a spam ellen és növeli a feltöltött dalok minőségét.
Ha dalokat kezdesz hozzáadni a tárolóhoz, próbálj képeket (borítót) is csatolni, bár ez a mező nem kötelező. Az esetek 99%-ában az első képek a Google-ben a dalok nevei alapján albumborítók.
Hogyan történik a fájlok hozzáadása technikailag, röviden:
- Az ügyfél megkapja a szabad csomópont címét, amely egy időre koordinátorrá válik.
- Elindul a dal hozzáadásának funkciója (ember vagy kód által), a koordinátor végpontjára történik a hozzáadási kérés.
- A koordinátor kiszámítja, hány duplikát kell megőrizni (konfigurálható paraméter).
- Megkeresik a legmegfelelőbb csomópontokat a tárolásra.
- A fájl közvetlenül ezekre a csomópontokra kerül.
Hogyan történik a fájlok lekérdezése technikailag:
- Az ügyfél megkapja a szabad csomópont címét, amely egy időre koordinátorrá válik.
- Elindul a dal lekérésének funkciója (ember vagy kód által), a koordinátor végpontjára történik a lekérdezési kérés.
- A koordinátor ellenőrzi, hogy van-e link a gyorsítótárban. Ha van, és működőképes, akkor azonnal visszaküldi az ügyfélnek, különben megkérdezi a csomópontokat a meglévő tartalomról.
- A fájl letöltése a link segítségével történik, ha van ilyen.
Alternatívák a zeneszerzők számára
Mindig is foglalkoztatott a kérdés, hogyan lehet objektíven értékelni sok kreatív mű költségét? Miért állít például valaki 10 dollárt a zenei albumáért? Vagy 20 dollárt vagy akár 100 dollárt. Hol van az algoritmus? Amikor például egy fizikai termékről vagy sokféle szolgáltatásról beszélünk, legalább kiszámíthatjuk a költségeket, és ebből kiindulhatunk.
Oké, tegyük fel, hogy 10 dollárt állítottak be. Ez nagyon hatékony? Tegyük fel, hogy meghallgattam egy albumot vagy egy dalt, és szeretném megköszönni. De az érzéseim és a lehetőségeim szerint a 3 dollár a határ. És mit tegyek ezután? Valószínűleg semmit sem fogok tenni, ahogy a legtöbb ember.
Ha egy rögzített árat állítasz be a kreatív munkádért, akkor csak korlátozod magad, nem adod meg a lehetőséget, hogy több ember kisebb összegeket küldjön neked, ami összességében lehet jelentősebb, mint azoké, akik a megadott áron vásárolnak. Úgy érzem, hogy a kreativitás éppen az a terület, ahol először kellene a adományoknak uralkodniuk. Ehhez szükség van:
- Meg kell tanítani az embereket, hogy így köszönjék meg. A kreatoroknak tisztán kell azt mutatniuk, hogy szeretnék kapni az adományokat, és mindenhol hozzá kell adniuk a különböző fizetési módszerekre mutató linkeket.
- Több mechanizmusra van szükség a folyamatok egyszerűsítésére és erősítésére. Például létrehozni egy globális weboldalt, ahol az emberek a kreativitásért adományozhatnak szerzői linkek segítségével.
Tegyük fel, hogy a link körülbelül így néz ki:
http://someartistsdonationsite.site/category/artist?external-infoHa a zenészekre szűkítjük, akkor:
http://someartistsdonationsite.com/music/miyagi?song=blablaA művésznek ellenőriznie kell a nevét, és azt hozzárendelni.
A museria kliensbe adjunk hozzá egy hasonló link generálási funkciót, és minden olyan projekt, amely tárolót használ, elhelyezheti a weboldalain / alkalmazásaikban a gyors és egyszerű adományozási gombokat ezekkel a linkekkel a dalok mellett. A felhasználók nagyon gyorsan és egyszerűen adományozhatnak. Természetesen ezt a megközelítést bármely projekt és kreatív kategória során alkalmazni lehet, nemcsak a tárolón keresztül.
Miért van szükséged, pontosan neked, egy zenei tárolóra, és hogyan lehet részt venni ebben?
- Ha zenével kapcsolatos projekten dolgozol, vagy ilyet tervezel, ezért van ez az egész kitalálva. Használhatod a museriát a dalok tárolására és elérésére, növelve a dalok áramlását az interneten. Ha van lehetőséged legalább egy saját node felállítására és fenntartására, az lenne a legjobb hozzájárulás a hálózat fejlődéséhez.
- Talán készen állsz arra, hogy valamilyen más szerepet vállalj: segíteni a kódolásban, vagy kitölteni és moderálni az adatbázist, terjeszteni a projekt információját a barátaid között stb.
- Lehet, hogy tetszett az ötlet, és anyagilag is szeretnél támogatni, hogy ez az egész éljen és fejlődjön. Minél több node, annál több dal.
- Vagy lehet, hogy egyszerűen szükséged lesz egy dal megtalálására és letöltésére. Ezt nagyon egyszerűen megteheted, például a .
A projekt jelenleg a legkorábbi szakaszában van. Elindult a tesztelési hálózat, a node-ok gyakran újraindulhatnak, frissítéseket igényelhetnek stb. Ha a becsült időszakban nincsenek kritikus problémák, a hálózat átalakul az alapértelmezett hálózattá.
A node külső információit: a dalok számát, a szabad helyet stb. az alábbi formátumú link segítségével lehet megnézni: http://node-address/status vagy http://node-address/status?pretty
Az elérhetőségeim:
Forrás: habr.com
