Museria - kho lưu trữ nhạc phi tập trung

Museria - kho lưu trữ nhạc phi tập trung

Một ngày nọ, tôi quyết định viết một ứng dụng để chọn nhạc cho mình và nghe ở nhà/trên đường/tập luyện, v.v. Và để tất cả những điều này diễn ra một cách trôi chảy, với sự tham gia tối thiểu của tôi. Tôi nghĩ ra một kiến ​​trúc, phác thảo một nguyên mẫu và cuối cùng gặp phải một “vấn đề nhỏ”.

Và không rõ lấy file bài hát ở đâu. Lúc này, VKontakte đã đóng api, trên các cổng âm nhạc lớn, mọi thứ cũng bị tắt tiếng, thậm chí các bài hát cũng được phát ra từng phần để không bị phân tích cú pháp. Tất cả những gì còn lại là một số trang web bay qua đêm riêng lẻ với rất nhiều quảng cáo và đủ loại rác, tất cả các loại chương trình lấy cắp đáng ngờ và các tùy chọn "bẩn" khác. Nói chung, không có một giải pháp thực sự tốt. Tất nhiên, bạn có thể mua đăng ký một số bản nhạc Yandex hoặc những thứ tương tự. Nhưng một lần nữa, không có API công khai mở ở bất kỳ đâu và bạn không có quyền truy cập vào âm nhạc theo chương trình. Một số công ty lớn về cơ bản đã hạn chế quyền tiếp cận âm nhạc của người khác. Tại sao điều này lại xảy ra? Tìm hiểu sâu hơn, người ta thấy rõ vấn đề chính là bản quyền. Giải pháp hiện tại dưới hình thức đăng ký phù hợp với nhiều tác giả âm nhạc thương mại và chính các công ty này. Đồng thời, âm nhạc phi thương mại và bán thương mại cũng nằm trong danh sách chung. Bạn có thể trả tiền cho mọi thứ hoặc không nghe gì cả.

Và tôi bắt đầu nghĩ phải làm gì với tất cả những thứ này. Làm thế nào chúng ta có thể tổ chức phân phối âm nhạc miễn phí? Tôi sẽ làm gì nếu tôi tự sáng tạo âm nhạc và muốn kiếm tiền từ nó? Tôi có muốn nếu bài hát của tôi bị vi phạm bản quyền không? Có giải pháp thay thế nào không?

Kết quả là có hai vấn đề chính cần được giải quyết:

  • Tổ chức phân phối nhạc miễn phí bằng các phương pháp thuận tiện cho hầu hết mọi người, kể cả phần mềm.
  • Cung cấp các lựa chọn thay thế để người sáng tạo âm nhạc kiếm tiền

Lưu trữ âm nhạc phi tập trung toàn cầu

Ban đầu, tôi cố gắng tìm các giải pháp hiện có và tạo ra mọi thứ dựa trên giải pháp này. Sau một thời gian tìm kiếm, cái đầu tiên tôi thích là ipfs. Tôi bắt đầu thực hiện ý tưởng của mình, nhưng sau một thời gian, tôi phát hiện ra một số vấn đề nghiêm trọng trong giải pháp này:

  • Ipfs - lưu trữ cho mọi thứ và mọi người. Có hình ảnh, âm nhạc, video và mọi thứ bạn muốn. Nói chung, một “thùng rác” hành tinh lớn như vậy. Do đó, khi bạn khởi chạy nút của mình, bạn sẽ ngay lập tức nhận được một lượng tải rất lớn. Chiếc xe chỉ quằn quại trong đau đớn.
  • Một số loại cơ chế thu gom "rác" chưa hoàn thiện. Tôi không biết bây giờ nó thế nào, nhưng tại thời điểm đó, nếu bạn viết trong cấu hình rằng bạn muốn giới hạn bộ nhớ ở mức XNUMX gigabyte dữ liệu, thì điều đó không có ý nghĩa gì cả. Dung lượng lưu trữ tăng lên, bỏ qua nhiều thông số cấu hình. Do đó, cần phải có một lượng lớn ổ cứng dự trữ cho đến khi ipfs tìm ra cách thiết lập lại những thứ không cần thiết.
  • Tại thời điểm sử dụng thư viện (tôi không biết bây giờ nó thế nào), khách hàng chưa triển khai thời gian chờ. Bạn gửi yêu cầu nhận tệp và nếu nó không tồn tại thì bạn chỉ cần treo. Tất nhiên, mọi người đã nghĩ ra đủ mọi cách giải quyết để giải quyết được phần nào vấn đề, nhưng đó chỉ là những chiếc nạng. Những thứ này nên ra khỏi hộp.

Vẫn còn nhiều vấn đề nhỏ và ấn tượng rất rõ ràng: cái này không thể được sử dụng cho dự án. Tôi tiếp tục tìm kiếm cơ sở lưu trữ, khám phá nhiều lựa chọn khác nhau nhưng không tìm được nơi nào phù hợp.

Cuối cùng, tôi quyết định rằng việc tự mình viết một kho lưu trữ phi tập trung là điều đáng làm. Ngay cả khi nó không giả vờ liên hành tinh, nó sẽ giải quyết được một vấn đề cụ thể.

Và thế là hóa ra có thể lây lan, kho chứa, di căn, bảo tàng, Museria-toàn cầu.

có thể lây lan - đây là lớp chính, thấp nhất cho phép bạn kết hợp các nút thành một mạng. Nó chứa một thuật toán mà cho đến nay tôi đã triển khai một phần dựa trên khoảng 10000 máy chủ. Phiên bản đầy đủ của thuật toán khó thực hiện hơn nhiều và sẽ cần thêm vài tháng nữa (có thể nhiều hơn).

Tôi sẽ không mô tả chi tiết về khả năng lan truyền trong bài viết này; tốt hơn là nên viết một bài riêng vào một ngày nào đó. Ở đây tôi sẽ chỉ lưu ý một số tính năng:

  • Hoạt động thông qua http/https.
  • Bạn có thể tạo một mạng riêng cho một tác vụ cụ thể, điều này sẽ giảm đáng kể tải cho từng dự án riêng lẻ so với khi tất cả chúng đều nằm trên cùng một mạng.
  • Ban đầu, một cơ chế có thời gian chờ và những thứ nhỏ nhặt khác đã được nghĩ ra. Và điều này hoạt động với tất cả các phương thức cả trong máy khách và trong nút. Bạn có thể quản lý linh hoạt các cài đặt từ bên trong ứng dụng của mình.
  • Thư viện được viết bằng nodejs. Các vấn đề về hiệu suất của ngăn xếp được bù đắp bởi tính chất phi tập trung của nó. Tải có thể được “trải rộng” bằng cách tăng số lượng nút. Đổi lại, có rất nhiều lợi thế: cộng đồng lớn, đơn giản và dễ sử dụng, client đẳng cấu, không phụ thuộc bên ngoài, v.v.

kho chứa là một lớp kế thừa từ spreadable cho phép bạn lưu trữ các tập tin trên mạng. Mỗi tệp có hàm băm riêng cho nội dung của nó, có thể được sử dụng để truy xuất nó sau này. Các tập tin không được chia thành các khối mà được lưu trữ hoàn toàn.

di căn - một lớp được kế thừa từ lớp có thể lây lan, cho phép bạn lưu trữ dữ liệu trên mạng chứ không phải các tệp. Giao diện tương tự như cơ sở dữ liệu Nosql. Ví dụ: bạn có thể thêm một tệp vào bộ lưu trữ, lấy hàm băm của nó và ghi nó vào metastocle với một liên kết đến một cái gì đó.

bảo tàng - di truyền từ nơi lưu trữ và di căn. Lớp này chịu trách nhiệm trực tiếp cho việc lưu trữ nhạc. Bộ lưu trữ chỉ hoạt động với các tệp mp3 và thẻ id3.

Là “chìa khóa” của bài hát, tên đầy đủ của nó được sử dụng dưới dạng Nghệ sĩ (TPE1) - Tiêu đề (TIT2). Ví dụ:

  • Diêm Sinh - Gánh Nặng
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Bạn có thể tìm hiểu càng chi tiết càng tốt cách hình thành tên bài hát. đây. Bạn cần nhìn vào chức năng utils.beautifySongTitle().

Tỷ lệ phần trăm trùng khớp được xác định trong cài đặt nút được coi là trùng khớp. Ví dụ: giá trị 0.85 có nghĩa là nếu chức năng so sánh khóa (tên bài hát) tìm thấy điểm tương đồng trên 85% thì đó là cùng một bài hát.

Thuật toán xác định độ tương tự có sẵn trong hàm utils.getSongSimilarity().

Bìa bài hát, để nhận sau này, cũng có thể được đính kèm qua thẻ (APIC). Các tiện ích có tất cả các phương pháp cần thiết để nhận và xử lý thẻ.

Bạn có thể tìm thấy một ví dụ về cách làm việc với bộ nhớ thông qua ứng dụng khách trong readme.

Tất cả các lớp trên đều khép kín và có thể được sử dụng riêng biệt làm lớp thấp hơn cho các dự án khác. Ví dụ, đã có ý tưởng tạo một lớp để lưu trữ sách.

Museria-toàn cầu là kho lưu trữ git đã được định cấu hình để khởi chạy nút của riêng bạn trong mạng âm nhạc toàn cầu. Nhân bản npm tôi && npm bắt đầu và về cơ bản là vậy. Bạn có thể định cấu hình chi tiết hơn, chạy nó trong Docker, v.v. Thông tin chi tiết có sẵn tại github.

Khi kho lưu trữ được cập nhật, bạn cần cập nhật node. Nếu số phiên bản chính hoặc phụ thay đổi thì hành động này là bắt buộc, nếu không, mạng sẽ bỏ qua các nút cũ.

Bạn có thể làm việc với các bài hát theo cách thủ công và theo chương trình. Mỗi nút chạy một máy chủ cho các nhiệm vụ khác nhau. Bao gồm, khi truy cập điểm cuối mặc định, bạn sẽ nhận được giao diện để làm việc với âm nhạc. Ví dụ: bạn có thể đi đến Nút gốc (sau này liên kết có thể không liên quan, các nút đầu vào cũng có thể được lấy trong điện tínhoặc tìm kiếm thông tin cập nhật trên Github).

Bằng cách này bạn có thể tìm kiếm và tải bài hát lên bộ lưu trữ. Việc tải bài hát lên có thể diễn ra ở hai chế độ: bình thường và kiểm duyệt. Chế độ thứ hai có nghĩa là công việc được thực hiện bởi một người chứ không phải một chương trình. Và nếu bạn chọn hộp này khi thêm, bạn sẽ cần phải giải hình ảnh xác thực. Các bài hát có thể được thêm với mức độ ưu tiên -1, 0 hoặc 1. Mức độ ưu tiên 1 chỉ có thể được đặt ở chế độ kiểm duyệt. Cần có mức độ ưu tiên để bộ lưu trữ có thể quyết định những việc cần làm một cách hiệu quả hơn khi bạn cố gắng thay thế bài hát hiện có bằng bài hát mới. Mức độ ưu tiên càng cao thì bạn càng có nhiều khả năng ghi đè lên tệp hiện có. Điều này giúp chống thư rác và tăng chất lượng bài hát được tải xuống.

Nếu bạn bắt đầu thêm bài hát vào bộ nhớ của mình, hãy thử đính kèm hình ảnh (bìa), mặc dù trường này không bắt buộc. Trong 99% trường hợp, hình ảnh đầu tiên trên Google dựa trên tên bài hát là bìa album.

Tóm lại về mặt kỹ thuật việc thêm tệp diễn ra như thế nào:

  • Máy khách nhận được địa chỉ của một nút miễn phí, nút này sẽ trở thành nút điều phối trong một thời gian.
  • Chức năng thêm bài hát được kích hoạt (bởi một người hoặc mã) và yêu cầu thêm người điều phối vào điểm cuối được đưa ra.
  • Điều phối viên tính toán số lượng bản sao sẽ được lưu trữ (tham số có thể định cấu hình).
  • Các nút phù hợp nhất để lưu được tìm kiếm.
  • Tệp trực tiếp đi đến các nút này.

Về mặt kỹ thuật các tập tin được nhận như thế nào:

  • Máy khách nhận được địa chỉ của một nút miễn phí, nút này sẽ trở thành nút điều phối trong một thời gian.
  • Chức năng nhận bài hát (bởi một người hoặc một mã) được kích hoạt và đưa ra yêu cầu nhận bài hát đó tại điểm cuối của người điều phối.
  • Điều phối viên kiểm tra sự hiện diện của liên kết trong bộ đệm. Nếu có một nút và nó đang hoạt động, nó sẽ ngay lập tức được trả lại cho máy khách, nếu không, các nút sẽ được thăm dò xem có sẵn sàng hay không.
  • Tệp được nhận từ liên kết, nếu tìm thấy.

Các lựa chọn thay thế cho người sáng tạo âm nhạc

Tôi luôn quan tâm đến câu hỏi làm thế nào người ta có thể đánh giá một cách khách quan giá trị của nhiều tác phẩm sáng tạo? Ví dụ, tại sao một người lại chào bán album nhạc của mình với giá 10 đô la? Hoặc với giá 20 đô la hoặc 100 đô la. Thuật toán ở đâu? Ví dụ: khi chúng ta đang nói về một số sản phẩm vật chất hoặc thậm chí nhiều loại dịch vụ, thì ít nhất chúng ta có thể tính toán chi phí và tiến hành từ đó.

Được rồi, giả sử chúng ta đặt cược 10 đô la. Điều này có hiệu quả lắm không? Giả sử tôi đã nghe một album hoặc một bài hát ở đâu đó và quyết định bày tỏ lòng biết ơn của mình. Nhưng theo cảm nhận và khả năng của tôi thì 3$ là mức trần. Vậy chúng ta nên làm gì? Rất có thể tôi sẽ không làm gì cả, giống như hầu hết mọi người.

Bằng cách đặt ra một số loại giá cố định cho công việc sáng tạo, bạn chỉ cần giới hạn bản thân, ngăn không cho nhiều người gửi cho bạn ít tiền hơn, điều này về tổng thể có thể ấn tượng hơn những người sẽ mua ở mức giá bạn đặt. Đối với tôi, có vẻ như sự sáng tạo chính xác là lĩnh vực mà sự quyên góp nên được ưu tiên hàng đầu. Để làm điều này bạn cần:

  • Hãy dạy mọi người tạ ơn theo cách này. Bản thân người sáng tạo phải thể hiện rõ ràng rằng họ muốn nhận tiền quyên góp, thêm liên kết đến các phương thức thanh toán khác nhau ở mọi nơi, v.v.
  • Cần có nhiều cơ chế hơn để đơn giản hóa và tăng cường các quy trình này. Ví dụ: tạo một số loại trang web toàn cầu nơi bạn có thể quyên góp cho sự sáng tạo bằng cách sử dụng các liên kết bản quyền.

    Giả sử liên kết giống như thế này:

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

    Nếu chúng ta thu hẹp nó xuống các nhạc sĩ thì:

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

    Người biểu diễn cần xác minh biệt danh của mình và đính kèm với nó.

    Chúng tôi đang thêm chức năng tạo liên kết như vậy đến ứng dụng khách museria và tất cả các dự án sử dụng kho lưu trữ đều có thể đặt các nút quyên góp có các liên kết này bên cạnh các bài hát trên trang web/ứng dụng của họ. Người dùng có cơ hội quyên góp rất nhanh chóng và dễ dàng. Đương nhiên, cách tiếp cận này có thể được sử dụng trong bất kỳ dự án và thể loại sáng tạo nào, không chỉ thông qua việc lưu trữ.

Chính xác thì tại sao bạn cần một cơ sở lưu trữ nhạc và làm thế nào bạn có thể tham gia vào nó?

  • Nếu bạn đang thực hiện một dự án liên quan đến âm nhạc hoặc dự định tạo một dự án, thì đây chính là mục đích của mọi thứ. Bạn có thể sử dụng museria để lưu trữ và truy xuất các bài hát, tăng luồng bài hát trực tuyến. Nếu đồng thời bạn có khả năng huy động và nắm giữ ít nhất một nút của riêng mình thì đây sẽ là đóng góp tốt nhất cho sự phát triển của mạng.
  • Có lẽ bạn đã sẵn sàng đảm nhận một số vai trò khác: trợ giúp về mã, hoặc điền và kiểm duyệt cơ sở dữ liệu, phân phối thông tin về dự án cho bạn bè của bạn, v.v.
  • Có thể bạn thích ý tưởng này và sẵn sàng hỗ trợ tài chính để nó tồn tại và phát triển. Càng nhiều nút, càng nhiều bài hát.
  • Hoặc bạn chỉ cần tìm và tải xuống một bài hát tại một thời điểm nào đó. Bạn có thể làm điều này rất đơn giản, ví dụ, thông qua bot điện tín.

Dự án hiện đang ở giai đoạn đầu. Mạng thử nghiệm đã được khởi chạy, các nút có thể khởi động lại thường xuyên, yêu cầu cập nhật, v.v. Nếu không có vấn đề nghiêm trọng nào trong giai đoạn đánh giá, mạng này sẽ được chuyển thành mạng chính.

Bạn có thể xem thông tin về nút từ bên ngoài: số lượng bài hát, dung lượng trống, v.v. bằng cách sử dụng liên kết như http://node-address/status hoặc http://node-address/status?pretty

Địa chỉ liên lạc của tôi:

Nguồn: www.habr.com

Thêm một lời nhận xét