Museria - zdecentralizowane przechowywanie muzyki

Museria - zdecentralizowane przechowywanie muzyki

Któregoś dnia postanowiłem napisać aplikację, która pozwoli mi wybrać dla siebie muzykę i słuchać jej w domu/na ulicy/na treningach itp. I żeby to wszystko działało płynnie, przy minimalnym udziale mnie. Wymyśliłem architekturę, naszkicowałem prototyp i ostatecznie napotkałem jeden „mały problem”.

Nie jest też jasne, skąd można pobrać same pliki utworów. Do tego czasu VKontakte zamknął już interfejs API, na dużych portalach muzycznych wszystko również zostało wyciszone, nawet piosenki były rozdawane w kawałkach, aby nie były analizowane. Pozostało tylko kilka pojedynczych, nocnych witryn z mnóstwem reklam i wszelkiego rodzaju śmieciami, wszelkiego rodzaju podejrzanymi programami przechwytującymi i innymi „brudnymi” opcjami. Ogólnie rzecz biorąc, nie ma jednego naprawdę dobrego rozwiązania. Możesz oczywiście kupić subskrypcję muzyki Yandex lub tym podobnej. Ale znowu, nigdzie nie ma otwartego publicznego API i nie masz programowego dostępu do muzyki. Kilka dużych firm zasadniczo ograniczyło innym dostęp do muzyki. Dlaczego tak się w ogóle stało? Kopiąc głębiej, stało się jasne, że głównym problemem były prawa autorskie. Obecne rozwiązanie w postaci subskrypcji odpowiada wielu komercyjnym twórcom muzyki i tym samym firmom. Jednocześnie na ogólnej liście znajduje się także muzyka niekomercyjna i półkomercyjna. Albo płacisz za wszystko, albo nie słuchasz wcale.

I zacząłem się zastanawiać, co z tym wszystkim zrobić. Jak zorganizować bezpłatną dystrybucję muzyki? Co bym zrobił, gdybym sam tworzył muzykę i chciał na niej zarabiać? Czy chciałbym, żeby moje piosenki były pirackie? Jakie w ogóle jest alternatywne rozwiązanie?

W rezultacie istnieją dwa główne problemy, które należy rozwiązać:

  • Organizacja bezpłatnej dystrybucji muzyki przy użyciu dogodnych dla większości ludzi metod, w tym oprogramowania.
  • Oferowanie twórcom muzyki alternatywnych sposobów zarabiania pieniędzy

Globalne zdecentralizowane przechowywanie muzyki

Początkowo starałem się znaleźć istniejące rozwiązania i w oparciu o to stworzyć wszystko. Po pewnym czasie poszukiwań pierwszym, który mi się spodobał, był IPFS. Zacząłem wdrażać mój pomysł, ale po pewnym czasie odkryłem kilka krytycznych problemów w tym rozwiązaniu:

  • Ipfs – pamięć masowa na wszystko i dla wszystkich. Są tam zdjęcia, muzyka, filmy i wszystko, czego chcesz. Ogólnie rzecz biorąc, taki duży planetarny „śmietnik”. Dlatego po uruchomieniu węzła natychmiast otrzymujesz ogromne obciążenie. Samochód po prostu zwija się z bólu.
  • Coś w rodzaju niedokończonego mechanizmu zbierania „śmieci”. Nie wiem jak jest teraz, ale w tamtym momencie, jeśli w konfiguracji napisałeś, że chcesz ograniczyć przechowywanie danych do dziesięciu gigabajtów, to nie miało to żadnego znaczenia. Pamięć rosła, ignorując wiele parametrów konfiguracyjnych. W rezultacie konieczne było posiadanie ogromnej rezerwy dysku twardego, dopóki ipfs nie wymyśli, jak zresetować niepotrzebne.
  • W momencie korzystania z biblioteki (nie wiem jak jest teraz) klient nie miał zaimplementowanych timeoutów. Wysyłasz prośbę o otrzymanie pliku, a jeśli nie istnieje, po prostu się wieszasz. Oczywiście ludzie wymyślali najróżniejsze obejścia, które częściowo rozwiązały problem, ale były to kule. Te rzeczy powinny wyjść z pudełka.

Nadal było wiele drobnych problemów i wrażenie było jasne: nie można tego wykorzystać w projekcie. Kontynuowałem poszukiwania magazynu, badając różne opcje, ale nigdy nie znalazłem niczego odpowiedniego.

W końcu zdecydowałem, że warto samemu spróbować napisać zdecentralizowaną pamięć masową. Nawet jeśli nie uda, że ​​jest międzyplanetarny, rozwiąże konkretny problem.

I tak się okazało rozsmarowywalny, schowek, metastokl, muzeum, museria-global.

rozsmarowywalny - jest to główna, najniższa warstwa, która umożliwia łączenie węzłów w sieć. Zawiera algorytm, który do tej pory zaimplementowałem częściowo w oparciu o około 10000 XNUMX serwerów. Pełna wersja algorytmu jest znacznie trudniejsza do wdrożenia i wymagałaby kilku dodatkowych miesięcy (może i więcej).

Nie będę szczegółowo opisywał spreadable w tym artykule, lepiej kiedyś napisać oddzielny. Tutaj zwrócę tylko uwagę na niektóre funkcje:

  • Działa poprzez http/https.
  • Możesz stworzyć oddzielną sieć dla konkretnego zadania, co znacznie zmniejszy obciążenie każdego projektu z osobna, niż gdyby wszystkie były w tej samej sieci.
  • Początkowo wymyślono mechanizm z limitami czasu i innymi drobiazgami. Działa to dla wszystkich metod zarówno w kliencie, jak i w węźle. Możesz elastycznie zarządzać ustawieniami z poziomu aplikacji.
  • Biblioteka jest napisana w nodejs. Problemy z wydajnością stosu są równoważone przez jego zdecentralizowany charakter. Obciążenie można „rozłożyć” zwiększając liczbę węzłów. W zamian jest wiele zalet: ogromna społeczność, prostota i łatwość obsługi, klient izomorficzny, brak zewnętrznych zależności itp.

schowek to warstwa odziedziczona z spreadable, która umożliwia przechowywanie plików w sieci. Każdy plik ma swój własny skrót zawartości, którego można użyć do późniejszego odzyskania. Pliki nie są dzielone na bloki, ale przechowywane w całości.

metastokl - warstwa odziedziczona z spreadable, która pozwala na przechowywanie danych w sieci, ale nie plików. Interfejs jest podobny do bazy danych Nosql. Możesz na przykład dodać plik do storacle, pobrać jego skrót i zapisać go w metastocle z linkiem do czegoś.

muzeum - odziedziczone po storacle i metastocle. Warstwa ta jest bezpośrednio odpowiedzialna za przechowywanie muzyki. Pamięć działa tylko z plikami mp3 i znacznikami ID3.

Jako „klucz” do utworu w formularzu użyto jego pełnej nazwy Artysta (TPE1) – Tytuł (TIT2). Na przykład:

  • Siarka – ciężar
  • Hi-rez – Lost My Way (feat. Emilio Rojas, Dani Devinci)

Możesz dowiedzieć się tak szczegółowo, jak to możliwe, jak powstają tytuły piosenek. tutaj. Trzeba przyjrzeć się funkcji utils.beautifySongTitle().

Za dopasowanie uważa się procent dopasowań zdefiniowany w ustawieniach węzła. Na przykład wartość 0.85 oznacza, że ​​jeśli funkcja porównania kluczy (nazwy utworów) znalazła podobieństwo większe niż 85%, to jest to ten sam utwór.

Algorytm wyznaczania podobieństwa znajduje się w funkcji utils.getSongSimilarity().

Cover do utworu, do późniejszego odbioru, można również dołączyć za pomocą tagów (APIC). Narzędzia posiadają wszystkie niezbędne metody odbierania i przetwarzania tagów.

Przykład pracy z pamięcią masową za pośrednictwem klienta można znaleźć w readme.

Wszystkie powyższe warstwy są samodzielne i mogą być używane oddzielnie jako warstwy dolne w innych projektach. Na przykład istnieje już pomysł, aby zrobić warstwę do przechowywania książek.

museria-global to już skonfigurowane repozytorium git do uruchomienia własnego węzła w globalnej sieci muzycznej. Klonowanie npm i && npm zacząć i to w zasadzie tyle. Możesz skonfigurować go bardziej szczegółowo, uruchomić w Dockerze itp. Szczegółowe informacje dostępne są pod adresem github.

Po zaktualizowaniu repozytorium musisz zaktualizować plik node. Jeśli zmieni się numer wersji głównej lub pomocniczej, czynność ta jest obowiązkowa, w przeciwnym razie stare węzły zostaną zignorowane przez sieć.

Z utworami można pracować ręcznie i programowo. Każdy węzeł obsługuje serwer do różnych zadań. Między innymi po odwiedzeniu domyślnego punktu końcowego otrzymasz interfejs do pracy z muzyką. Możesz na przykład przejść do Węzeł główny (link może później nie być istotny, węzły wejściowe można również uzyskać w telegramlub poszukaj aktualizacji na Githubie).

W ten sposób możesz wyszukiwać i przesyłać utwory do pamięci. Przesyłanie utworów może odbywać się w dwóch trybach: normalnym i moderowanym. Drugi tryb oznacza, że ​​pracę wykonuje osoba, a nie program. A jeśli zaznaczysz to pole podczas dodawania, będziesz musiał rozwiązać captcha. Utwory można dodawać z priorytetami -1, 0 lub 1. Priorytet 1 można ustawić tylko w trybie moderowanym. Priorytety są potrzebne, aby pamięć mogła skuteczniej decydować, co zrobić, gdy spróbujesz zastąpić istniejący utwór nowym. Im wyższy priorytet, tym większe prawdopodobieństwo zastąpienia istniejącego pliku. Pomaga to w walce ze spamem i podnosi jakość pobieranych utworów.

Jeśli zaczniesz dodawać utwory do swojej pamięci, spróbuj dołączyć obrazy (okładkę), chociaż to pole nie jest wymagane. W 99% przypadków pierwszymi obrazkami w Google na podstawie tytułów utworów są okładki albumów.

W skrócie, jak technicznie przebiega dodawanie plików:

  • Klient otrzymuje adres wolnego węzła, który na jakiś czas stanie się koordynatorem.
  • Uruchamia się funkcja dodania utworu (przez osobę lub kod) i następuje żądanie dodania koordynatora do punktu końcowego.
  • Koordynator oblicza, ile duplikatów należy przechowywać (parametr konfigurowalny).
  • Wyszukiwane są węzły najbardziej odpowiednie do zapisania.
  • Plik trafia bezpośrednio do tych węzłów.

Jak technicznie odbierane są pliki:

  • Klient otrzymuje adres wolnego węzła, który na jakiś czas stanie się koordynatorem.
  • Uruchamia się funkcja odbioru utworu (przez osobę lub kod) i następuje żądanie jego odbioru w punkcie końcowym koordynatora.
  • Koordynator sprawdza obecność linku w pamięci podręcznej. Jeśli taki istnieje i działa, jest natychmiast zwracany klientowi, w przeciwnym razie węzły są odpytywane pod kątem dostępności.
  • Plik zostanie odebrany z łącza, jeśli zostanie znalezione.

Alternatywy dla twórców muzyki

Zawsze interesowało mnie pytanie, jak można obiektywnie ocenić wartość wielu dzieł twórczych? Dlaczego na przykład ktoś oferuje swój album muzyczny za 10 dolarów? Albo za 20 albo 100 dolarów. Gdzie jest algorytm? Kiedy na przykład mówimy o jakimś produkcie fizycznym, a nawet o wielu rodzajach usług, to możemy przynajmniej obliczyć koszt i na tej podstawie postępować.

OK, powiedzmy, że obstawiamy 10 dolarów. Czy to jest bardzo skuteczne? Powiedzmy, że słuchałem gdzieś albumu lub piosenki stamtąd i postanowiłem okazać swoją wdzięczność. Ale zgodnie z moimi uczuciami i możliwościami, mój pułap to 3 dolary. Więc co powinniśmy zrobić? Najprawdopodobniej po prostu nic nie zrobię, jak większość ludzi.

Ustalając jakąś stałą cenę za pracę twórczą, po prostu się ograniczasz, uniemożliwiając większej liczbie osób przesłanie Ci mniejszych pieniędzy, co w sumie może zrobić większe wrażenie niż ci, którzy kupią po ustalonej przez Ciebie cenie. Wydaje mi się, że kreatywność to właśnie obszar, w którym darowizny powinny królować na pierwszym miejscu. Aby to zrobić, potrzebujesz:

  • Uczcie ludzi dziękować w ten sposób. Sami twórcy muszą wyraźnie pokazać, że chcieliby otrzymywać darowizny, wszędzie dodawać linki do różnych metod płatności itp.
  • Aby uprościć i wzmocnić te procesy, potrzeba więcej mechanizmów. Na przykład utwórz jakąś globalną witrynę internetową, na której możesz przekazać datki na kreatywność, korzystając z linków do praw autorskich.

    Załóżmy, że link wygląda mniej więcej tak:

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

    Jeśli zawęzimy to do muzyków, to:

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

    Wykonawca musi zweryfikować swój pseudonim i przywiązać się do niego.

    Dodajemy funkcję generowania takiego linku do klienta museria, a wszystkie projekty korzystające z repozytorium będą mogły umieszczać przyciski darowizny z tymi linkami obok utworów na swoich stronach/aplikacjach. Użytkownicy mają możliwość bardzo szybkiego i łatwego przekazania darowizny. Oczywiście takie podejście można zastosować w każdym projekcie i kategorii kreatywności, nie tylko poprzez przechowywanie.

Dlaczego dokładnie potrzebujesz magazynu muzyki i jak możesz w tym uczestniczyć?

  • Jeśli pracujesz nad projektem związanym z muzyką lub planujesz taki stworzyć, to właśnie do tego wszystko było przeznaczone. Możesz używać museria do przechowywania i pobierania utworów, zwiększając przepływ utworów w Internecie. Jeśli jednocześnie będziesz miał możliwość podniesienia i utrzymania własnego choć jednego węzła, będzie to najlepszy wkład w rozwój sieci.
  • Być może jesteś gotowy podjąć się innej roli: pomocy przy kodzie, uzupełniania i moderowania bazy danych, rozpowszechniania informacji o projekcie wśród znajomych itp.
  • Może spodobał Ci się ten pomysł i jesteś gotowy pomóc finansowo, aby to wszystko żyło i rozwijało się. Im więcej węzłów, tym więcej utworów.
  • Lub po prostu musisz w pewnym momencie znaleźć i pobrać utwór. Można to zrobić bardzo prosto, na przykład poprzez bot telegramowy.

Projekt jest obecnie w bardzo początkowej fazie. Uruchomiono sieć testową, węzły mogą często uruchamiać się ponownie, wymagać aktualizacji itp. Jeśli w okresie oceny nie wystąpią żadne krytyczne problemy, ta sama sieć zostanie przekształcona w sieć główną.

Możesz wyświetlić informacje o węźle z zewnątrz: liczbę utworów, wolne miejsce itp., korzystając z linku typu http://node-address/status lub http://node-address/status?pretty

Moje kontakty:

Źródło: www.habr.com

Dodaj komentarz