Penyimpanan Persisten dengan Docker dalam Produksi - Solusi Apa dan Mengapa?

8

Saya baru-baru ini mulai bekerja untuk sebuah perusahaan yang ingin memecah aplikasi SaaS monolitik mereka menjadi microservices kemas. Saya mengalami kesulitan memahami bagian mendasar dari penyimpanan persisten. Mengapa ada begitu banyak platform yang bersaing? Portworx, Rexray, StorageOS, Flocker, Inifint, dll.

Pertanyaan saya

  1. Mengapa seseorang tidak hanya memutar server NFS dan menggunakan struktur folder hierarkis di sana sebagai cadangan penyimpanan mereka? Keuntungan apa yang Anda dapatkan saat menggunakan salah satu alat ini?

  2. Seberapa berbahaya menggunakan sesuatu seperti ini dengan Docker? Apa penyebab umum hilangnya data bencana di lingkungan berbasis buruh pelabuhan?

  3. Solusi penyimpanan persisten apa yang akan Anda rekomendasikan dan mengapa? Perusahaan saya mengoperasikan platform SaaS. Payload data berukuran kecil (5kb-100kb). Pemrosesan data kecil-menengah dalam konsumsi sumber daya. Volume keseluruhan sedang, tetapi terus tumbuh. Kami berharap untuk sepenuhnya memindahkan aplikasi monolitik kami ke cloud sebagai layanan microser yang terpisah. Termasuk gudang data kami.

  4. Agak tidak berhubungan, tetapi ada hubungannya. Apa kekuatan menggunakan Kubernet sebagai orkestrator sebagai lawan Rancher / Cattle? Bukankah Kubernetes direkayasa berlebihan untuk platform berukuran kecil-menengah? Apakah ada kekuatan untuk menggunakan Kubernetes di Rancher selain dari instalasi satu-klik?

Terima kasih untuk wawasan. Maaf untuk kenaifan. Saya menyambut semua dokumentasi dan bahan bacaan tambahan.

EDIT: Untuk konteks kami menggunakan Azure sebagai platform Cloud kami yang mendasarinya.

TJ Zimmerman
sumber
1
Untuk 4: Kubernet bermain bagus dengan biru untuk membuat Volume Persisten sebagai Azure Disk . NFS memiliki sejarah mekanisme penguncian yang buruk, jika terjadi kesalahan dalam orkestrator Anda dapat merusak file Anda dengan mudah.
Tensibai
1
tim saya telah bekerja dengan dalam konteks ini memiliki pengalaman yang baik dengan Cassandra sebagai backend penyimpanan untuk satu set layanan mucroservice tetapi fokusnya adalah pada membaca daripada menulis data
Peter Muryshkin
1
Apa jenis data? Data basis data? Foto-foto? File teks?
James Shewey
1
Kemungkinan terkait: devops.stackexchange.com/questions/742/…
James Shewey

Jawaban:

4

Saya bisa menjawab poin 2:

Docker paling cocok dalam arsitektur berbasis layanan mikro ketika aplikasi berjalan di dalam wadah tetapi penyimpanan atau sesi langsung lainnya dikelola dalam RAM bersama atau database.

Pada dasarnya Anda tidak perlu menyimpan apa pun di dalam wadah buruh pelabuhan. Ada banyak alasan untuk itu:

  1. Pertimbangkan peningkatan: Seseorang dari tim Anda telah membuat gambar aplikasi yang lebih baru dan Anda membutuhkan wadah yang berjalan dengan gambar terbaru. Buruh pelabuhan saat ini dan cara populer untuk melakukan ini adalah untuk membawa wadah yang ada turun dan memutar wadah baru dengan parameter run time yang sama dengan wadah yang lebih tua tetapi dengan gambar yang lebih baru. Ini adalah salah satu alasan terbesar mengapa kontainer harus selalu stateless dan tidak mengandung data apa pun. Anda dapat memasang semua data Anda ke suatu tempat dan sesi disimpan di dalam db atau sesuatu seperti memchached dll.

  2. Salah satu kasus penggunaan besar dari buruh pelabuhan adalah untuk membangun cluster. Jika Anda mulai menyimpan data di dalam wadah Anda, maka ini merupakan biaya overhead untuk menjaga data tersebut tetap sinkron antara wadah aplikasi.

  3. Komunitas buruh pelabuhan pada umumnya tidak merekomendasikan untuk menyimpan data dalam wadah dan karenanya tidak ada yang mencoba mengambil risiko ini dalam produksi dan tidak ada yang ingin menjadi pendongeng pertama tentang bagaimana mereka mengacaukan produksi :)

lakshayk
sumber