Bagaimana cara membagi aset di antara beberapa server web?


16

Saya memiliki beberapa server web Linux yang terpasang pada load balancer, dan saya suka berbagi aset (seperti gambar, video, dan hal-hal lain) di antara server-server ini. Apa cara terbaik untuk melakukan ini?

Saat ini, saya telah memasang pada server file ke semua server web, tetapi saya khawatir tentang hal itu akan turun di bawah lalu lintas yang padat. Bagaimana saya bisa menghindari ini terjadi?

Terima kasih sebelumnya.


Di sinilah hal-hal seperti Cassandra (database NoSQL) berguna.
Alexis Wilke

Dianggap menggunakan Varnish untuk meningkatkan kinerja di lalu lintas padat? en.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

Jawaban:


12

Ada beberapa cara untuk melakukan ini berdasarkan kebutuhan Anda.

  • Gunakan server file pusat yang dipasang dengan fx NFS di server web
  • Sama seperti di atas, tetapi berlebihan, jadi jika satu turun yang lain mengambil alih
  • Gunakan semacam alat sinkronisasi (misalnya rsync) dan host file secara lokal di webservers. Kemudian siapkan cronjob untuk menyinkronkan file antara server pada interval tertentu.
  • Gunakan CDN seperti Amazon S3, Akamai dll.

Dua yang pertama adalah yang terbaik jika Anda memiliki banyak file baru. Yang ketiga akan menjadi solusi ideal jika Anda tidak menambah atau mengubah file yang sering karena pengguna akan mendapatkan 404 pada konten statis yang belum disinkronkan ..

Opsi terakhir mungkin ideal dalam banyak hal, tetapi mungkin juga berubah menjadi yang paling mahal dari 4. Anda juga perlu menulis ulang situs web Anda untuk mendukung ini.


Masalah besar dengan rsync adalah Anda cenderung mendapat 404 jika Anda mengunggah data baru dan rsync tidak terjadi dengan sangat cepat ... Juga sistem seperti Cassandra (poin 4) gratis, walaupun tentu saja memiliki 10 server tidak gratis ... jadi, mungkin saya harus mengatakan tanpa biaya tambahan (walaupun perlu beberapa pemrograman untuk membuat semuanya berfungsi.)
Alexis Wilke

@AlexisWilke - Anda benar tentang rsync, dan saya juga menyebutkannya dalam jawaban. Saya sudah mengklarifikasi dalam jawaban sekarang.
Frederik Nielsen

Re: # 3, 'dead time' antara aset baru dikerahkan dan aset baru disinkronkan dapat diminimalkan jika Anda menggunakan pengamat sistem file (seperti penjaga Facebook ) dan alat sinkronisasi cepat (seperti csync2 ). Tidak, penundaan tidak akan pernah turun ke nol, tetapi sangat minimal dan mungkin lebih mudah untuk digunakan daripada alternatif lain.
pepoluan

2

Cara hebat lain untuk mengurangi beban pada server web dan melakukan penyeimbangan muatan adalah dengan squid (yaitu squid3) Atur sebagai proxy terbalik dengan caching. Ini akan men-cache konten statis seperti gambar dll ke HDD (default) atau ke RAM (lebih cepat dan terbaik) jika Anda mengaturnya seperti itu. Ia mampu membulatkan robin ke server squid lain juga jika salah satu node tertentu kelebihan beban.


1
Saya pikir caching semacam itu gagal jika Anda menginginkan situs web yang sangat dinamis. Karena dengan dinamisme yang berat, Anda masih perlu menekan satu server backend utama untuk banyak data. Saya pikir pengguna mencari pekerjaan backend sebagai gantinya.
Alexis Wilke

1
Jawaban Anda benar tentang kemungkinan mengurangi beban, tetapi tidak menjawab pertanyaan tentang berbagi file aset antara beberapa server.

@AlexisWilke tidak (gagal) jika Anda tidak memiliki setup squid dengan benar. Sesuaikan cara cache (atau jika cache) di pengaturan, tetapi Anda mungkin menemukan bahwa tidak ada halaman yang sepenuhnya dinamis. Selalu ada sesuatu yang bisa Anda cache. Juga Andre, ini sangat membantu dalam berbagi aset seperti yang dijelaskan judulnya, tetapi berbagi file tidak terlalu banyak. Pertanyaannya adalah bagaimana menjaga situs agar tidak turun di bawah beban berat. Squid sangat baik dalam melakukan ini.
Aihngel Tech

1

Karena biasanya kebutuhan akan lebih banyak server berasal dari sumber daya yang diperlukan untuk menjalankan situs web / aps yang dinamis, pertimbangkan hosting aset statis di subdomain / domain lain. (seperti static.domainAnda.com)

Anda kemudian dapat menggunakan server lain untuk meng-host mereka. Hosting file statis tidak menggunakan banyak sumber daya, jadi Anda akan membutuhkan server yang jauh lebih sedikit untuk konten statis Anda. Anda juga akan membebaskan beberapa sumber daya di server untuk konten dinamis Anda.

Tergantung pada penyeimbang beban Anda, Anda mungkin juga dapat melakukan ini pada domain yang sama dengan penyeimbang beban memutuskan server mana yang akan digunakan untuk permintaan mana, tetapi jika Anda menggunakan domain terpisah, Anda dapat menempatkan aset statis Anda ke CDN dengan cukup mudah, jika kebutuhan harus muncul!


1

Salah satu solusi untuk tantangan ini yang saya pakai adalah memiliki salinan baca / tulis utama file pada drive NFS yang dibagikan, tetapi juga tetap pada salinan read-only pada setiap server web sehingga kegagalan host NFS menempatkan akses file ke file dalam mode read-only daripada kehilangan mereka sepenuhnya.

  • File hidup di host pusat, dibagi dengan host web melalui NFS mount
  • rsync berjalan setiap 15 menit untuk menjaga salinan read-only di setiap host web tetap segar.
  • Sebuah check_linkbash script berjalan setiap menit untuk memastikan NFS gunung masih ada dan jika tidak swap symlink ke read-only copy.

Rincian lebih lanjut ditemukan dalam artikel ini sejak pertama kali saya mengatur sistem ini.

Kelebihan:

  • Membaca file sangat tersedia
  • Tidak ada ketentuan ras untuk penulisan file
  • File baru tersedia secara instan untuk semua host web.

Kerugian:

  • agak rumit.
  • jumlah salinan read-only skala dengan jumlah host web, yang mungkin berlebihan jika Anda memiliki lebih dari dua.
  • File menulis tidak tersedia.
  • Berpotensi hingga 1 menit downtime sebelum beralih ke salinan read-only.

0

Anda mungkin ingin mempertimbangkan basis data NoSQL. Mereka dirancang untuk bekerja pada cluster, memberikan konsistensi pada akhirnya. Tapi hati-hati mereka tidak ASAM.

Berikut ini adalah pengantar yang akan membantu Anda memutuskan jenis database NoSQL yang Anda inginkan untuk tujuan Anda.

Berikut adalah daftar sumber daya yang terkait dengan NoSQL yang tersedia.


4
Bagaimana jawaban ini membantu dalam masalah sinkronisasi file?
titus

@titus Di NoSQL, ketika ada tulisan di salah satu node, itu akan direplikasi di node lain di cluster. Cassandra menulis tingkat konsistensi mungkin membantu memperjelasnya
Azzy

jadi cara untuk pergi adalah menyimpan semua file dalam NoSQL db?
titus

@itus Anda bisa, tetapi database NoSQL dapat melakukan lebih banyak daripada menyimpan file, Itu semua tergantung pada kebutuhan Anda.
Azzy

2
OP meminta solusi untuk masalah khusus " beberapa server web Linux yang terpasang pada load balancer ... berbagi aset (seperti gambar, video, dan hal-hal lain) di antara server-server ini. " Jawaban Anda sangat umum, dapatkah Anda menyarankan dan jelaskan alat khusus (dan sebaiknya konfigurasi daripadanya) untuk mengatasi masalah?
kdbanman

0

Mengapa Anda tidak mencoba solusi DFS, mereka memberikan redundansi tingkat tinggi dan volume dapat dibagi antara sebanyak yang Anda inginkan. Gluster adalah favorit saya dan sangat mudah untuk menginstal dan mengkonfigurasi di distro Linux yang terkenal

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.