Museria: almacenamiento de música descentralizado

Museria: almacenamiento de música descentralizado

Un día decidí escribir una aplicación para seleccionar música y escucharla en casa/en la calle/entrenamiento, etc. Y para que todo esto funcione fluidamente, con una mínima participación de mi parte. Se me ocurrió una arquitectura, esbocé un prototipo y finalmente me encontré con un "pequeño problema".

Y no está claro dónde conseguir los archivos de las canciones. En ese momento, VKontakte ya había cerrado la API, en los grandes portales de música también todo estaba silenciado, incluso las canciones se entregaban en pedazos para que no se analizaran. Lo único que quedaba eran algunos sitios individuales con un montón de publicidad y todo tipo de basura, todo tipo de programas de captura dudosos y otras opciones "sucias". En general, ni una sola solución realmente buena. Por supuesto, puedes comprar una suscripción a música de Yandex o algo similar. Pero nuevamente, no hay ninguna API pública abierta en ninguna parte y no tienes acceso a la música mediante programación. Varias grandes empresas esencialmente han restringido el acceso de otros a la música. ¿Por qué sucedió esto? Profundizando más, quedó claro que el principal problema eran los derechos de autor. La solución actual en forma de suscripciones se adapta a muchos autores de música comercial y a estas mismas empresas. Al mismo tiempo, la música no comercial y semicomercial también entra en la lista general. O pagas por todo o no escuchas nada en absoluto.

Y comencé a pensar qué hacer con todo esto. ¿Cómo podemos organizar la distribución gratuita de música? ¿Qué haría si yo mismo estuviera creando música y quisiera ganar dinero con ello? ¿Me gustaría que mis canciones fueran pirateadas? ¿Qué solución alternativa existe de todos modos?

Como resultado, hay dos problemas principales que deben resolverse:

  • Organización de la distribución gratuita de música utilizando métodos convenientes para la mayoría de las personas, incluido el software.
  • Ofreciendo alternativas para que los creadores de música ganen dinero

Almacenamiento de música descentralizado global

Al principio, intenté encontrar soluciones existentes y crear todo en base a ellas. Después de un tiempo de búsqueda, el primero que me gustó fue ipfs. Comencé a implementar mi idea, pero después de un tiempo descubrí varios problemas críticos en esta solución:

  • Ipfs: almacenamiento para todo y para todos. Hay imágenes, música, vídeos y todo lo que quieras. En general, un "cubo de basura" planetario tan grande. Por lo tanto, cuando inicia su nodo, inmediatamente recibe una carga enorme. El coche simplemente se retuerce de dolor.
  • Una especie de mecanismo de recolección de “basura” inacabado. No sé cómo es ahora, pero en ese momento, si escribías en la configuración que querías limitar el almacenamiento a diez gigabytes de datos, entonces no significaba nada. El almacenamiento creció, ignorando muchos parámetros de configuración. Como resultado, era necesario tener una gran reserva de disco duro hasta que ipfs descubrió cómo restablecer lo innecesario.
  • Al momento de usar la biblioteca (no sé cómo es ahora), el cliente no tenía implementados tiempos de espera. Envías una solicitud para recibir un archivo y, si no existe, simplemente cuelgas. Por supuesto, a la gente se le ocurrieron todo tipo de soluciones que resolvieron en parte el problema, pero eran muletas. Estas cosas deberían salir de la caja.

Todavía había muchos problemas menores y la impresión era clara: esto no se puede utilizar para el proyecto. Continué buscando una instalación de almacenamiento, explorando diferentes opciones, pero nunca encontré nada adecuado.

Al final, decidí que valía la pena intentar escribir yo mismo un almacenamiento descentralizado. Aunque no pretenda ser interplanetario, solucionará un problema concreto.

Y así resultó untable, almacén, metastocle, museo, museria-global.

untable - esta es la capa principal e inferior que le permite combinar nodos en una red. Contiene un algoritmo, que hasta ahora he implementado parcialmente en base a unos 10000 servidores. La versión completa del algoritmo es mucho más difícil de implementar y requeriría varios meses adicionales (tal vez más).

No describiré lo que se puede difundir en detalle en este artículo; es mejor escribir uno por separado algún día. Aquí solo señalaré algunas características:

  • Funciona a través de http/https.
  • Puede crear una red separada para una tarea específica, lo que reducirá significativamente la carga en cada proyecto individual que si todos estuvieran en la misma red.
  • Inicialmente se pensó en un mecanismo con tiempos de espera y otras pequeñas cosas. Y esto funciona para todos los métodos tanto en el cliente como en el nodo. Puede administrar la configuración de manera flexible desde su aplicación.
  • La biblioteca está escrita en nodejs. Los problemas de rendimiento de la pila se ven compensados ​​por su naturaleza descentralizada. La carga se puede "repartir" aumentando el número de nodos. A cambio, hay muchas ventajas: una comunidad enorme, sencillez y facilidad de uso, un cliente isomórfico, sin dependencias externas, etc.

almacén Es una capa heredada de spreadable que permite almacenar archivos en la red. Cada archivo tiene su propio hash de su contenido, que puede usarse para recuperarlo más tarde. Los archivos no se dividen en bloques, sino que se almacenan por completo.

metastocle - una capa heredada de untable, que le permite almacenar datos en la red, pero no archivos. La interfaz es similar a una base de datos Nosql. Puede, por ejemplo, agregar un archivo al almacenamiento, obtener su hash y escribirlo en metastocle con un enlace a algo.

museo - heredado de estoracle y metastocle. Esta capa es directamente responsable de almacenar música. El almacenamiento sólo funciona con archivos mp3 y etiquetas id3.

Como “clave” de la canción, se utiliza su nombre completo en la forma Artista (TPE1) - Título (TIT2). Por ejemplo:

  • Azufre - La carga
  • Hi-rez - Lost My Way (hazaña. Emilio Rojas, Dani Devinci)

Podrás descubrir con el mayor detalle posible cómo se forman los títulos de las canciones. aquí. Necesitas mirar la función. utils.beautifySongTitle().

El porcentaje de coincidencias definido en la configuración del nodo se considera una coincidencia. Por ejemplo, un valor de 0.85 significa que si la función de comparación de claves (nombres de canciones) encontró una similitud de más del 85%, entonces es la misma canción.

El algoritmo para determinar la similitud está ahí, en la función. utils.getSongSimilarity().

La portada de la canción, para su posterior recepción, también se puede adjuntar mediante etiquetas (APIC). Las empresas de servicios públicos tienen todos los métodos necesarios para recibir y procesar etiquetas.

Se puede encontrar un ejemplo de cómo trabajar con almacenamiento a través de un cliente en readme.

Todas las capas anteriores son independientes y se pueden usar por separado como capas inferiores para otros proyectos. Por ejemplo, ya existe la idea de hacer una capa para guardar libros.

museria-global es un repositorio git ya configurado para lanzar su propio nodo en la red musical global. Clonación npm i && npm empezar y eso es básicamente todo. Puedes configurarlo con más detalle, ejecutarlo en Docker, etc. La información detallada está disponible en githabe.

Cuando se actualiza el repositorio, debe actualizar su nodo. Si el número de versión principal o secundaria cambia, entonces esta acción es obligatoria; de lo contrario, la red ignorará los nodos antiguos.

Puede trabajar con canciones de forma manual y programática. Cada nodo ejecuta un servidor para diferentes tareas. Además, cuando visite el punto final predeterminado, recibirá una interfaz para trabajar con música. Por ejemplo, puedes ir a nodo raíz (El enlace puede no ser relevante más adelante, los nodos de entrada también se pueden obtener en telegrama, o busque actualizaciones en Github).

De esta manera puedes buscar y subir canciones al almacenamiento. La carga de canciones se puede realizar de dos modos: normal y moderada. El segundo modo significa que el trabajo lo realiza una persona, no un programa. Y si marca esta casilla al agregar, deberá resolver el captcha. Se pueden agregar canciones con prioridades -1, 0 o 1. La prioridad 1 solo se puede configurar en modo moderado. Se necesitan prioridades para que el almacenamiento pueda decidir de manera más efectiva qué hacer cuando intentas reemplazar una canción existente por una nueva. Cuanto mayor sea la prioridad, más probabilidades habrá de sobrescribir un archivo existente. Esto ayuda a combatir el spam y aumenta la calidad de las canciones descargadas.

Si comienzas a agregar canciones a tu almacenamiento, intenta adjuntar imágenes (portada), aunque este campo no es obligatorio. En el 99% de los casos, las primeras imágenes en Google basadas en títulos de canciones son portadas de álbumes.

En pocas palabras, cómo se produce técnicamente la adición de archivos:

  • El cliente recibe la dirección de un nodo libre, que se convertirá en coordinador por un tiempo.
  • La función de agregar una canción se activa (mediante una persona o un código) y se realiza una solicitud para agregar un coordinador al punto final.
  • El coordinador calcula cuántos duplicados se deben almacenar (parámetro configurable).
  • Se buscan los nodos más adecuados para guardar.
  • El archivo va directamente a estos nodos.

Cómo técnicamente se reciben los archivos:

  • El cliente recibe la dirección de un nodo libre, que se convertirá en coordinador por un tiempo.
  • Se activa la función de recibir una canción (por una persona o un código) y se realiza una solicitud para recibirla en el punto final del coordinador.
  • El coordinador comprueba la presencia del enlace en la memoria caché. Si hay uno y está funcionando, se devuelve inmediatamente al cliente; de ​​lo contrario, se sondea la disponibilidad de los nodos.
  • El archivo se recibe desde el enlace, si se encuentra alguno.

Alternativas para creadores de música

Siempre me ha interesado la pregunta de ¿cómo se puede evaluar objetivamente el valor de muchas obras creativas? ¿Por qué, por ejemplo, una persona ofrece su álbum de música por 10 dólares? Ya sea por $20 o $100. ¿Dónde está el algoritmo? Cuando, por ejemplo, hablamos de algún producto físico, o incluso de muchos tipos de servicios, al menos podemos calcular el coste y partir de ahí.

Bien, digamos que apostamos $10. ¿Es esto muy efectivo? Digamos que escuché un álbum en algún lugar o una canción de allí y decidí mostrar mi gratitud. Pero según mis sentimientos y mis propias capacidades, 3 dólares es mi límite. ¿Entonces, qué debemos hacer? Lo más probable es que no haga nada, como la mayoría de la gente.

Al establecer un precio fijo para el trabajo creativo, simplemente te limitas, evitando que un mayor número de personas te envíen menos dinero, que en total puede ser más impresionante que aquellos que comprarán al precio que tú establezcas. Me parece que la creatividad es precisamente el ámbito donde las donaciones deberían prevalecer en primer lugar. Para hacer esto necesitas:

  • Enseña a la gente a dar gracias de esta manera. Los propios creadores deben mostrar claramente que les gustaría recibir donaciones, añadir enlaces a diferentes métodos de pago en todas partes, etc.
  • Se necesitan más mecanismos para simplificar y fortalecer estos procesos. Por ejemplo, cree algún tipo de sitio web global donde pueda donar para la creatividad utilizando enlaces de derechos de autor.

    Digamos que el enlace es algo como esto:

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

    Si lo limitamos a los músicos, entonces:

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

    El artista debe verificar su apodo y adjuntarlo.

    Estamos agregando una función para generar dicho enlace al cliente de museria, y todos los proyectos que usan el repositorio pueden colocar botones de donación con estos enlaces junto a las canciones en sus sitios web/aplicaciones. Los usuarios tienen la oportunidad de realizar una donación de forma muy rápida y sencilla. Naturalmente, este enfoque se puede utilizar en cualquier proyecto y categoría de creatividad, no sólo mediante el almacenamiento.

¿Por qué exactamente necesitas una instalación de almacenamiento de música y cómo puedes participar en ella?

  • Si estás trabajando en un proyecto relacionado con la música o planeas crear uno, entonces todo está pensado para esto. Puedes utilizar museria para almacenar y recuperar canciones, aumentando el flujo de canciones en línea. Si al mismo tiempo tiene la capacidad de crear y mantener al menos un nodo propio, entonces esta será la mejor contribución al desarrollo de la red.
  • Quizás estés listo para asumir algún otro rol: ayudar con el código, o completar y moderar la base de datos, distribuir información sobre el proyecto a tus amigos, etc.
  • Quizás te gustó la idea y estás dispuesto a ayudar económicamente para que todo viva y se desarrolle. Cuantos más nodos, más canciones.
  • O simplemente necesitas buscar y descargar una canción en algún momento. Puedes hacer esto de forma muy sencilla, por ejemplo, a través de robot de telegramas.

El proyecto se encuentra ahora en la etapa inicial. Se ha lanzado una red de prueba, los nodos pueden reiniciarse con frecuencia, requerir actualizaciones, etc. Si no hay problemas críticos durante el periodo de evaluación, esta misma red se transforma en la principal.

Puedes ver información sobre el nodo desde el exterior: el número de canciones, espacio libre, etc., usando un enlace como http://node-address/status o http://node-address/status?pretty

Mis contactos:

Fuente: habr.com

Añadir un comentario