Katakanlah Anda dihadapkan dengan file log terkompresi senilai 25 TB dan Anda memiliki 20 kotak komoditas dengan kapasitas penyimpanan kolektif gratis 25 TB.
Bagaimana Anda menyimpan ini?
a) Sistem file terdistribusi mana yang digunakan?
b) Format / algoritma kompresi / dekompresi yang mana?
c) Ukuran file log adalah 1MB hingga maksimal 7MB semua teks dan banyak ruang kosong
d) Penggunaan adalah a) orang ingin file log terbaru lebih dari sebelumnya sehingga sistem caching apa yang digunakan b) orang hanya akan membaca file log tidak menghapusnya c) orang ingin daftar file log terhadap rentang tanggal
e) Sistem operasi yang berjalan pada kotak komoditas adalah Linux,
f) Adapun cadangan juga kami memiliki array penyimpanan yang mengurusnya. Jadi kemampuan untuk mengembalikan data dari array ada.
Saya tidak ingin mereka mengakses sistem file secara langsung. Apa yang harus saya lakukan ? Bagaimana cara saya mendapatkan mereka API berbasis REST untuk ini?
Harap luangkan Anda 2 sen dan apa yang akan Anda lakukan?
Ankur
sumber
Jawaban:
Saya bukan ninja sistem file terdistribusi, tetapi setelah mengkonsolidasikan drive sebanyak yang saya bisa ke dalam beberapa mesin yang saya bisa, saya akan mencoba menggunakan iSCSI untuk menghubungkan sebagian besar mesin ke satu mesin utama. Di sana saya bisa mengkonsolidasikan hal-hal menjadi semoga penyimpanan toleran. Lebih disukai, toleran kesalahan dalam mesin (jika drive padam) dan di antara mesin (jika seluruh mesin dimatikan).
Secara pribadi saya suka ZFS. Dalam hal ini, build dalam kompresi, dedupe, dan toleransi kesalahan akan sangat membantu. Namun, saya yakin ada banyak cara lain untuk mengompres data sambil membuatnya toleran terhadap kesalahan.
Seandainya saya punya solusi file terdistribusi turnkey nyata untuk merekomendasikan, saya tahu ini benar-benar kludgey tapi saya harap itu menunjukkan Anda ke arah yang benar.
Sunting: Saya masih baru di ZFS dan mengatur iSCSI, tetapi ingat melihat video dari Sun di Jerman di mana mereka menunjukkan toleransi kesalahan ZFS. Mereka menghubungkan tiga hub USB ke komputer dan menempatkan empat flash drive di setiap hub. Kemudian untuk mencegah salah satu hub menurunkan storage pool, mereka membuat volume RAIDz yang terdiri dari satu flash drive dari masing-masing hub. Kemudian mereka memotong empat volume ZFS RAIDz bersama-sama. Dengan cara itu hanya empat flash drive yang digunakan untuk paritas. Berikutnya tentu saja satu hub yang dicabut dan yang mendegradasi setiap zpool, tetapi semua data tersedia. Dalam konfigurasi ini hingga empat drive bisa hilang, tetapi hanya jika ada dua drive tidak di kolam yang sama.
Jika konfigurasi ini digunakan dengan drive mentah dari setiap kotak, maka itu akan mempertahankan lebih banyak drive untuk data dan bukan untuk paritas. Saya mendengar FreeNAS dapat (atau akan dapat) berbagi drive secara "mentah" melalui iSCSI, jadi saya kira Linux dapat melakukan hal yang sama. Seperti yang saya katakan, saya masih belajar, tetapi metode alternatif ini akan kurang boros dari sudut pandang drive parity daripada saran saya sebelumnya. Tentu saja, itu akan bergantung pada penggunaan ZFS yang saya tidak tahu apakah akan diterima. Saya tahu biasanya lebih baik berpegang pada apa yang Anda tahu jika Anda harus membangun / memelihara / memperbaiki sesuatu, kecuali ini adalah pengalaman belajar.
Semoga ini lebih baik.
Sunting: Melakukan penggalian dan menemukan video yang saya bicarakan. Bagian di mana mereka menjelaskan penyebaran USB flash drive melalui hub dimulai pada 2m10s. Video ini untuk mendemonstrasikan server penyimpanan mereka "Thumper" (X4500) dan cara menyebarkan disk di seluruh pengontrol jadi jika Anda memiliki kegagalan pengontrol hard disk data Anda akan tetap bagus. (Secara pribadi saya pikir ini hanya video geeks yang bersenang-senang. Saya berharap saya memiliki kotak Thumper sendiri, tetapi istri saya tidak suka saya menjalankan jack palet melalui rumah.: D Itu adalah satu kotak besar.)
Sunting: Saya ingat pernah melintasi sistem file terdistribusi yang disebut OpenAFS . Saya belum mencobanya, saya hanya membaca beberapa tentang itu. Mungkin orang lain tahu bagaimana menangani di dunia nyata.
sumber
Pertama, file log dapat dikompresi dengan rasio yang sangat tinggi. Saya menemukan file log saya dikompres pada rasio 10: 1. Jika mereka memampatkan bahkan rasio 5: 1, itu hanya 5GB, atau 20% dari kapasitas penyimpanan Anda.
Mengingat Anda memiliki lebih dari cukup penyimpanan, algoritme kompresi khusus tidak terlalu penting. Anda bisa...
Pertanyaan yang lebih besar adalah: bagaimana Anda akan memberi pengguna Anda akses mudah ke file-file ini? Sebagian dari ini tergantung pada bagaimana mesin Anda dikonfigurasi.
Jika Anda dapat menempatkan cukup penyimpanan ke dalam satu mesin, maka Anda dapat melakukan sesuatu yang sangat sederhana, seperti berbagi file Windows hanya baca. Cukup atur file dalam subdirektori, dan Anda siap berangkat.
Jika Anda tidak dapat membuat server file tunggal untuk file-file ini, maka Anda mungkin menemukan bahwa Anda memerlukan sistem file terdistribusi. Windows memiliki Sistem File Terdistribusi (DFS) yang mungkin sesuai dengan kebutuhan Anda.
Jika kebutuhan Anda lebih maju, Anda mungkin menginginkan aplikasi web sebagai ujung depan tempat pengguna Anda dapat menelusuri dan mengunduh file log. Dalam hal ini, saya sarankan menggunakan MogileFS, yang merupakan sistem file terdistribusi yang dirancang untuk digunakan dengan server aplikasi front-end. Sangat mudah diintegrasikan dengan sebagian besar bahasa pemrograman web. Anda tidak dapat memasangnya sebagai drive yang dibagikan di komputer Anda, tetapi itu adalah yang terbaik sebagai penyimpan data untuk aplikasi web.
sumber
lessfs adalah sistem file deduplicating, kompresi. Meskipun tidak akan menyelesaikan seluruh masalah, mungkin layak untuk dilihat sebagai backend.
sumber
ekspor folder ini melalui NFS
pasang mereka pada satu mesin dengan apache berjalan (di bawah root dokumen) sebagai pohon
gunakan zip untuk mengompresnya- rasio kompres yang bagus, zip bisa dibuka dari semua OS
daftar file di Apache -jadi Anda memberi pengguna akses hanya baca (file log tidak seharusnya diedit, kan)
sumber
Anda pernah berpikir tentang mengompresi file log? Kemudian lakukan sesuatu di frontend untuk mengompres mereka sebelum menyajikannya kepada pengguna akhir. Mungkin semacam skrip CGI.
sumber
@Ankur dan @Porch. Saya sangat setuju dengan keharusan untuk mengompresi log ini.
@jet Saya pikir skema sederhana lebih baik - sehingga httpd untuk pengguna akhir mendekati ideal. Dan backend bisa berupa apa saja.
Pendapat saya - bagi log menjadi 2 grup - folder 'lama' dan 'baru'.
Gabungkan mereka ke dalam root dokumen httpd. Gunakan kompresi kuat untuk yang lama (baik arsip xz atau 7z, populer untuk semua OS) dengan kamus besar dan ukuran blok, mungkin bahkan arsip padat.
Gunakan mengompresi fs untuk yang baru: lessfs (rw, deduplication + metode kompresi ringan), fusecompress 0.9.x (rw, metode kompresi ringan ke kuat), btrfs / zfs, squashfs (ro, metode kompresi ringan ke kuat, beberapa dedup, gunakan untuk log yang baru diputar).
Anda bahkan dapat secara transparan menulis log ke fs terkompresi (fusecompress, lessfs, btrfs / zfs). Berikan akses R / o dengan httpd ke log yang sedang ditulis. Mereka akan transparan untuk pengguna dan didekompresi secara transparan untuk mereka.
Peringatan tentang fusecompress: 1) gunakan hanya 0.9.x - stabil. Klon dari sini https://github.com/hexxellor/fusecompress
Versi selanjutnya tidak mendukung lzma dengan baik atau kehilangan data.
2) hanya menggunakan 1 cpu core untuk mengompresi satu file, sehingga mungkin lambat.
Kompres ulang setiap login di folder 'baru', lebih lama dari beberapa waktu (beberapa bulan) dan pindah ke 'lama'.
sumber