Saya memiliki mesin virtual (Debian) yang berjalan di host mesin fisik. Mesin virtual bertindak sebagai penyangga untuk data yang sering diterima melalui jaringan lokal (periode untuk data ini adalah 0,5s, sehingga throughput yang cukup tinggi). Setiap data yang diterima disimpan di mesin virtual dan berulang kali diteruskan ke server eksternal melalui UDP. Setelah server eksternal mengakui (lebih dari UDP) bahwa ia telah menerima paket data, data asli dihapus dari mesin virtual dan tidak dikirim ke server eksternal lagi. Koneksi internet yang menghubungkan VM dan server eksternal tidak dapat diandalkan, artinya bisa turun selama berhari-hari.
Mesin fisik yang meng-host VM mendapatkan pemadaman listriknya beberapa kali per hari secara acak. Tidak ada cara untuk mengetahui kapan ini akan terjadi dan tidak mungkin untuk menambahkan UPS, baterai, atau solusi serupa ke sistem.
Awalnya, data disimpan pada basis data HSQLDB berbasis file di mesin virtual. Namun, pemadaman listrik yang sering pada akhirnya menyebabkan file skrip database menjadi rusak (tidak pada tingkat sistem file, yaitu dapat dibaca, tetapi HSQLDB tidak dapat memahaminya), yang mengarah ke pertanyaan saya:
Bagaimana seharusnya data disimpan di lingkungan di mana pemadaman listrik dapat dan memang sering terjadi?
Satu pilihan yang bisa saya pikirkan adalah menggunakan file flat, menyimpan setiap paket data sebagai file pada sistem file. Dengan cara ini jika suatu file rusak karena kehilangan daya, itu dapat diabaikan dan sisa data tetap utuh. Ini menimbulkan beberapa masalah Namun, terutama terkait dengan jumlah data yang kemungkinan disimpan di mesin virtual. Pada 0,5s antara setiap bagian data, 1.728.000 file akan dihasilkan dalam 10 hari. Ini setidaknya berarti menggunakan sistem file dengan peningkatan jumlah inode untuk menyimpan data ini (pengaturan sistem file saat ini kehabisan inode pada ~ 250.000 pesan dan 30% ruang disk yang digunakan). Juga, sulit (bukan tidak mungkin) untuk dikelola.
Apakah ada opsi lain? Apakah ada mesin basis data yang berjalan pada Debian yang tidak akan rusak oleh pemadaman listrik? Juga, sistem file apa yang harus digunakan untuk ini? ext3 adalah apa yang digunakan saat ini.
Perangkat lunak yang berjalan pada mesin virtual ditulis menggunakan Java 6, jadi semoga solusinya tidak akan kompatibel.
Jawaban:
Jujur pendekatan terbaik Anda di sini adalah untuk memperbaiki pemadaman listrik, atau menggunakan sistem yang berbeda di lokasi yang lebih baik.
Ya ada sistem seperti redis yang akan menyimpan data dalam log tambahan-tambahan untuk replay, tetapi Anda berisiko korupsi pada tingkat yang lebih rendah - misalnya jika sistem file Anda diacak maka data pada disk berpotensi berisiko.
Saya menghargai setiap perbaikan akan bermanfaat bagi Anda, tetapi sebenarnya masalahnya bukan salah satu yang dapat dipecahkan mengingat skenario yang telah Anda uraikan.
sumber
Pendekatan Anda bisa berhasil. Izinkan saya menyarankan beberapa peningkatan untuk itu. Ada pertanyaan dalam stack overflow pada penulisan atom ke file . Pada dasarnya Anda menyimpan setiap paket data ke file sementara dan kemudian Anda menamainya menjadi nama akhirnya. Mengganti nama adalah operasi atom yang akan aman dari kegagalan daya. Dengan begitu Anda dijamin bahwa semua file Anda di tujuan akhir Anda telah disimpan dengan benar tanpa korupsi.
Lalu apa yang dapat Anda lakukan untuk menangani masalah memiliki jutaan file. Adalah cron pekerjaan yang berjalan mungkin setiap jam yang mengambil semua file lebih lama dari satu jam dan menggabungkannya menjadi satu file besar menggunakan operasi file atom lagi sehingga pekerjaan ini berjalan dengan aman bahkan selama listrik mati, dan kemudian menghapus file lama. Jenis rotasi log seperti. Nilai satu jam file akan menjadi sekitar 7.200 file. Jadi kapan saja Anda seharusnya tidak memiliki lebih dari 20.000 file pada disk.
sumber
Anda memasang UPS atau kartu RAID dengan cache tulis yang didukung baterai ke sistem, dan hanya dengan $ 49,95 , Anda mencapai apa yang tidak mungkin dicapai dalam perangkat lunak saja.
Klaim Anda bahwa entah bagaimana tidak mungkin menghubungkan server ini ke UPS atau baterai ... sama sekali tidak dapat dipercaya.
sumber
My PHB won't let me hook this up to a UPS/battery
adalah hal yang sangat berbeda dariit is not possible to add a UPS, a battery, or a similar solution to the system.
Tidak menjadi terlalu berlebihan, tetapi ini merupakan perbedaan penting karena mengubah pendekatan dan solusi yang tersedia.Pasang seluruh sistem hanya-baca, kecuali untuk perangkat blok yang menyimpan semua data Anda. Gunakan perangkat blok itu secara langsung dan terapkan mekanisme penyimpanan data Anda sendiri menggunakan perangkat blok mentah itu.
sumber