Museria - armazenamento de música descentralizado

Museria - armazenamento de música descentralizado

Um dia resolvi escrever um aplicativo para selecionar músicas para mim e ouvi-las em casa/na rua/treinos, etc. E para que tudo isso funcione de forma fluida, com o mínimo de participação minha. Criei uma arquitetura, esbocei um protótipo e acabei me deparando com um “pequeno problema”.

E não está claro onde conseguir os arquivos de música. A essa altura, o VKontakte já havia fechado a API, nos grandes portais de música tudo também estava silenciado, até as músicas eram distribuídas em pedaços para não serem analisadas. Tudo o que restou foram alguns sites individuais com uma tonelada de publicidade e todo tipo de lixo, todos os tipos de programas de captura duvidosos e outras opções “sujas”. Em geral, nem uma única solução realmente boa. Você pode, é claro, comprar uma assinatura de alguma música do Yandex ou algo semelhante. Mas, novamente, não existe uma API pública aberta em nenhum lugar e você não tem acesso à música de forma programática. Várias grandes empresas restringiram essencialmente o acesso de terceiros à música. Por que isso aconteceu? Indo mais fundo, ficou claro que o principal problema eram os direitos autorais. A solução atual na forma de assinaturas é adequada para muitos autores de música comercial e para essas mesmas empresas. Ao mesmo tempo, a música não comercial e semicomercial também entra na lista geral. Ou você paga por tudo ou não ouve nada.

E comecei a pensar no que fazer com tudo isso. Como podemos organizar a distribuição gratuita de música? O que eu faria se eu mesmo estivesse criando música e quisesse ganhar dinheiro com isso? Eu gostaria que minhas músicas fossem pirateadas? Que solução alternativa existe, afinal?

Como resultado, existem dois problemas principais que precisam ser resolvidos:

  • Organização da distribuição gratuita de música usando métodos convenientes para a maioria das pessoas, incluindo software.
  • Oferecendo alternativas para criadores de música ganharem dinheiro

Armazenamento de música descentralizado global

Inicialmente tentei encontrar soluções existentes e criar tudo baseado nisso. Depois de algum tempo pesquisando, o primeiro que gostei foi ipfs. Comecei a implementar minha ideia, mas depois de um tempo descobri vários problemas críticos nesta solução:

  • Ipfs – armazenamento para tudo e todos. Existem imagens, músicas e vídeos e tudo o que você quiser. Em geral, uma “lata de lixo” planetária tão grande. Portanto, ao iniciar seu nó, você recebe imediatamente uma carga enorme. O carro está se contorcendo de dor.
  • Algum tipo de mecanismo inacabado de coleta de “lixo”. Não sei como é agora, mas naquele momento, se você escreveu na configuração que queria limitar o armazenamento a dez gigabytes de dados, isso não significava nada. O armazenamento cresceu, ignorando muitos parâmetros de configuração. Como resultado, era necessário ter uma enorme reserva de disco rígido até que o IPFS descobrisse como redefinir o desnecessário.
  • Na hora de usar a biblioteca (não sei como está agora), o cliente não tinha timeouts implementados. Você envia uma solicitação para receber um arquivo e, se ele não existir, você simplesmente trava. É claro que as pessoas criaram todo tipo de soluções alternativas que resolveram parcialmente o problema, mas essas eram muletas. Essas coisas deveriam sair da caixa.

Ainda havia muitos pequenos problemas e a impressão era clara: isso não poderia ser usado para o projeto. Continuei procurando um depósito, explorando diferentes opções, mas nunca encontrei nada adequado.

No final, decidi que valia a pena tentar escrever sozinho um armazenamento descentralizado. Mesmo que não pretenda ser interplanetário, resolverá um problema específico.

E assim aconteceu espalhavel, armazenamento, metástoco, museria, museria-global.

espalhavel - esta é a camada principal e inferior que permite combinar nós em uma rede. Ele contém um algoritmo que até agora implementei parcialmente com base em cerca de 10000 servidores. A versão completa do algoritmo é muito mais difícil de implementar e exigiria vários meses adicionais (talvez mais).

Não descreverei o spread em detalhes neste artigo; é melhor escrever um separado algum dia. Aqui vou apenas observar alguns recursos:

  • Funciona via http/https.
  • Você pode criar uma rede separada para uma tarefa específica, o que reduzirá significativamente a carga de cada projeto individual do que se todos estivessem na mesma rede.
  • Inicialmente foi pensado um mecanismo com timeouts e outras pequenas coisas. E isso funciona para todos os métodos, tanto no cliente quanto no nó. Você pode gerenciar configurações de maneira flexível no seu aplicativo.
  • A biblioteca é escrita em nodejs. Os problemas de desempenho da pilha são compensados ​​pela sua natureza descentralizada. A carga pode ser “distribuída” aumentando o número de nós. Em troca, as vantagens são muitas: uma enorme comunidade, simplicidade e facilidade de uso, um cliente isomórfico, sem dependências externas, etc.

armazenamento é uma camada herdada do spreadable que permite armazenar arquivos na rede. Cada arquivo possui seu próprio hash de seu conteúdo, que pode ser usado para recuperá-lo posteriormente. Os arquivos não são divididos em blocos, mas são armazenados inteiramente.

metástoco - uma camada herdada de spreadable, que permite armazenar dados na rede, mas não arquivos. A interface é semelhante a um banco de dados Nosql. Você pode, por exemplo, adicionar um arquivo ao armazenamento, obter seu hash e gravá-lo no metastóculo com um link para algo.

museria - herdado de estoráculo e metástoco. Esta camada é diretamente responsável pelo armazenamento da música. O armazenamento funciona apenas com arquivos mp3 e tags id3.

Como “chave” da música, seu nome completo é usado na forma Artista (TPE1) - Título (TIT2). Por exemplo:

  • Enxofre - O Fardo
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Você pode descobrir com o máximo de detalhes possível como os títulos das músicas são formados. aqui. Você precisa olhar para a função utils.beautifySongTitle().

A porcentagem de correspondências definida nas configurações do nó é considerada uma correspondência. Por exemplo, um valor de 0.85 significa que se a função de comparação de tons (nomes de músicas) encontrar uma semelhança de mais de 85%, então é a mesma música.

O algoritmo para determinação de similaridade está aí, na função utils.getSongSimilarity().

A capa da música, para recebimento posterior, também pode ser anexada via tags (APIC). Os utilitários possuem todos os métodos necessários para receber e processar tags.

Um exemplo de trabalho com armazenamento por meio de um cliente pode ser encontrado em readme.

Todas as camadas acima são independentes e podem ser usadas separadamente como camadas inferiores para outros projetos. Por exemplo, já existe a ideia de fazer uma camada para guardar livros.

museria-global é um repositório git já configurado para lançar seu próprio nó na rede global de música. Clonagem npm eu && npm começar e é basicamente isso. Você pode configurá-lo com mais detalhes, executá-lo no Docker, etc. Informações detalhadas estão disponíveis em githabe.

Quando o repositório for atualizado, você precisará atualizar seu nó. Se o número da versão principal ou secundária for alterado, esta ação será obrigatória, caso contrário, os nós antigos serão ignorados pela rede.

Você pode trabalhar com músicas manualmente e programaticamente. Cada nó executa um servidor para tarefas diferentes. Inclusive, ao visitar o endpoint padrão, você receberá uma interface para trabalhar com música. Por exemplo, você pode ir para nó raiz (o link pode não ser relevante posteriormente, os nós de entrada também podem ser obtidos em telegramaou procure atualizações no Github).

Desta forma, você pode pesquisar e fazer upload de músicas para o armazenamento. O upload de músicas pode ocorrer em dois modos: normal e moderado. O segundo modo significa que o trabalho é realizado por uma pessoa e não por um programa. E se você marcar esta caixa ao adicionar, precisará resolver o captcha. As músicas podem ser adicionadas com prioridades -1, 0 ou 1. A prioridade 1 só pode ser definida no modo moderado. As prioridades são necessárias para que o armazenamento possa decidir de forma mais eficaz o que fazer quando você tenta substituir uma música existente por uma nova. Quanto maior a prioridade, maior a probabilidade de você substituir um arquivo existente. Isso ajuda a combater spam e aumenta a qualidade das músicas baixadas.

Se você começar a adicionar músicas ao seu armazenamento, tente anexar imagens (capa), embora este campo não seja obrigatório. Em 99% dos casos, as primeiras imagens no Google baseadas em títulos de músicas são capas de álbuns.

Em poucas palavras, como ocorre tecnicamente a adição de arquivos:

  • O cliente recebe o endereço de um nó livre, que se tornará coordenador por um tempo.
  • A função de adicionar uma música é acionada (por uma pessoa ou código), e é feita uma solicitação para adicionar um coordenador ao endpoint.
  • O coordenador calcula quantas duplicatas devem ser armazenadas (parâmetro configurável).
  • Os nós mais adequados para salvar são pesquisados.
  • O arquivo vai diretamente para esses nós.

Como tecnicamente os arquivos são recebidos:

  • O cliente recebe o endereço de um nó livre, que se tornará coordenador por um tempo.
  • A função de recebimento de uma música (de uma pessoa ou de um código) é acionada e é feita uma solicitação para recebê-la no endpoint do coordenador.
  • O coordenador verifica a presença do link no cache. Se houver um e estiver funcionando, ele será imediatamente devolvido ao cliente, caso contrário, os nós serão pesquisados ​​quanto à disponibilidade.
  • O arquivo é recebido do link, se for encontrado.

Alternativas para criadores de música

Sempre me interessei pela questão de como avaliar objetivamente o valor de muitos trabalhos criativos? Por que, por exemplo, uma pessoa oferece seu álbum de música por US$ 10? Ou por $ 20 ou $ 100. Onde está o algoritmo? Quando, por exemplo, estamos falando de algum produto físico, ou mesmo de vários tipos de serviços, então podemos pelo menos calcular o custo e partir daí.

Ok, digamos que apostamos $ 10. Isso é muito eficaz? Digamos que eu ouvi um álbum ou uma música de algum lugar e resolvi demonstrar minha gratidão. Mas de acordo com meus sentimentos e minhas próprias capacidades, US$ 3 é meu teto. Então o que deveríamos fazer? Provavelmente não farei nada, como a maioria das pessoas.

Ao definir algum tipo de preço fixo para o trabalho criativo, você simplesmente se limita, evitando que um número maior de pessoas lhe envie menos dinheiro, o que no total pode ser mais impressionante do que quem vai comprar pelo preço que você definiu. Parece-me que a criatividade é exactamente a área onde as doações devem prevalecer. Para fazer isso você precisa:

  • Ensine as pessoas a agradecer dessa forma. Os próprios criadores devem demonstrar claramente que gostariam de receber doações, adicionar links para diferentes métodos de pagamento em qualquer lugar, etc.
  • São necessários mais mecanismos para simplificar e reforçar estes processos. Por exemplo, crie algum tipo de site global onde você possa doar para criatividade usando links de direitos autorais.

    Digamos que o link seja algo assim:

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

    Se restringirmos aos músicos, então:

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

    O artista precisa verificar seu apelido e anexá-lo.

    Estamos adicionando uma função para gerar esse link para o cliente museria, e todos os projetos que utilizam o repositório podem colocar botões de doação com esses links ao lado das músicas em seus sites/aplicativos. Os usuários têm a oportunidade de fazer uma doação com muita rapidez e facilidade. Naturalmente, esta abordagem pode ser utilizada em qualquer projeto e categoria de criatividade, não apenas através do armazenamento.

Por que exatamente você precisa de um local de armazenamento de música e como pode participar dele?

  • Se você está trabalhando em um projeto relacionado à música, ou planejando criar um, então é para isso que tudo foi pensado. Você pode usar museria para armazenar e recuperar músicas, aumentando o fluxo de músicas online. Se, ao mesmo tempo, você tiver a capacidade de criar e manter pelo menos um nó próprio, então esta será a melhor contribuição para o desenvolvimento da rede.
  • Talvez você esteja pronto para assumir alguma outra função: ajudar com o código, ou preencher e moderar o banco de dados, distribuir informações sobre o projeto para seus amigos, etc.
  • Talvez você tenha gostado da ideia e esteja pronto para ajudar financeiramente para que tudo viva e se desenvolva. Quanto mais nós, mais músicas.
  • Ou você só precisa encontrar e baixar uma música em algum momento. Você pode fazer isso de forma muito simples, por exemplo, através bot de telegrama.

O projeto está agora na fase inicial. Uma rede de teste foi lançada, os nós podem ser reinicializados com frequência, exigir atualizações, etc. Caso não haja problemas críticos durante o período de avaliação, esta mesma rede é transformada na principal.

Você pode visualizar informações sobre o nó de fora: número de músicas, espaço livre, etc., usando um link como http://node-address/status ou http://node-address/status?pretty

Meus contatos:

Fonte: habr.com

Adicionar um comentário