pengembangan-web-mp.com

Potensi masalah apa yang perlu saya perhatikan di lingkungan multi server / clustered?

Saya telah mengerjakan sebuah situs web dengan klien untuk beberapa waktu sekarang dan situs itu sendiri telah semakin populer. Kami sekarang berada pada tahap di mana mesin tunggal yang kami hosting situs berjuang untuk memenuhi permintaan dan kami telah mengoptimalkan situs itu sendiri sejauh yang kami bisa (caching dll).

Kita sekarang berada pada tahap di mana kita perlu menambahkan server lain untuk mengambil ketegangan tambahan yang mengarah ke pertanyaan saya - potensi jebakan dan peringatan apa yang perlu saya ketahui atau uji situs ketika pindah ke pertanian web atau hosting berkerumun lingkungan Hidup?

3
Wolfwyrd

Ada beberapa kemungkinan peringatan:

Sesi

Jika sesi disimpan di sisi server, (mis. PHP), keduanya server akan memerlukan akses ke jalur penyimpanan sesi bersama. Jika tidak, Anda akan kehilangan sesi karena penyeimbang beban mengirimkan permintaan dari satu server ke server lain, atau mungkin (terkesiap) memiliki satu pengguna dengan dua sesi unik. Ini bisa membuat frustasi dengan AJAX. Sesi 'Lengket' juga dimungkinkan, tergantung pada penyeimbang beban Anda.

File Sementara

Kedua server harus berbagi direktori/tmp yang sama, jika memang Anda menggunakan semua jenis file sementara saat bekerja untuk melayani permintaan. Ini bisa berupa arsip sementara yang dikompres untuk unduhan, DB file flat yang melacak sesuatu, apa pun.

Penguncian SQLite

Jika Anda menggunakan SQLite3, Anda mungkin melihat beberapa kebiasaan yang tidak pernah muncul sebelumnya, terutama jika Anda menggunakan sesuatu seperti NFS untuk berbagi file database antara server. NFS lambat dengan ini, jadi saya sarankan menggunakan sesuatu yang lain. Sistem file yang didistribusikan seperti Lustre mudah diatur, atau Anda dapat menggunakan GFS/OCFS2.

SSL

Anda mungkin ingin penyeimbang beban menjadi yang menangani handshake SSL, yang kemudian membuat permintaan ke server back end menggunakan sertifikat lama yang ditandatangani sendiri.

Beberapa catatan umum:

  • Seperti dicatat, gunakan sistem file kinerja tinggi untuk berbagi direktori. Semua file yang dibagikan harus hidup di penyimpanan jaringan, bukan salah satu server web. Kalau tidak, jika seseorang jatuh, keduanya tidak berguna, agak mengalahkan tujuannya.

  • Jika situs menggunakan RDBMS, Anda memiliki dua opsi. Jalankan di kedua node dan gunakan sinkronisasi master-master, atau letakkan server DB di rumahnya sendiri. Saya merekomendasikan yang kedua karena itu memberi server web Anda lebih banyak ruang siku untuk beroperasi.

  • Load balancers juga perlu redundansi.

Dalam sebagian besar kasus, Anda dapat beralih dari satu server ke sebuah tambak yang seimbang dengan sedikit atau tanpa perubahan ke situs/aplikasi itu sendiri, tetapi Anda harus memastikan bahwa semua node dapat membaca dan menulis ke file yang sama. Ini mungkin mengharuskan Anda untuk menambahkan beberapa logika untuk mengunci aplikasi itu sendiri.

1
Tim Post

Status sesi (jika itu masalah) adalah masalah potensial. Sebagian besar peralatan penyeimbang beban dapat menggunakan sesi lengket, yang berarti bahwa pengguna yang memulai SERVER1 untuk memulai akan tetap menggunakan SERVER1, biasanya melalui penggunaan cookie yang disimpan dalam memori browser. Satu-satunya peringatan dengan ini adalah bahwa ketika SERVER1 offline karena alasan apa pun, pengguna harus masuk lagi di server lain.

Saya sudah mulai melewati ini pada aplikasi saya (mereka adalah aplikasi CF) dengan berbagi sesi di server farm. Jadi satu mesin turun tidak akan berdampak pada pengalaman pengguna.

Satu-satunya tantangan lain yang saya hadapi dalam mereplikasi konten dengan benar ke semua server di peternakan. Ada perangkat lunak di luar sana untuk melakukan ini (robocopy, Fling dari perangkat lunak NCH adalah dua yang saya gunakan), tapi saya masih punya contoh di mana sinkronisasi tidak bekerja 100% dari waktu.

0
Milner

Apakah aplikasi Anda peduli dengan keadaan? Jika seorang pengguna memiliki satu permintaan yang dilayani oleh satu mesin dan kemudian yang lainnya dilayani oleh yang lain, apakah itu penting? Jika Anda perlu mempertahankan beberapa bentuk keadaan di antara permintaan, maka semuanya lebih rumit dan ada berbagai cara untuk mengatasi masalah tersebut.

Jika Anda tidak perlu khawatir tentang keadaan, maka pekerjaan yang baik membangun situs Anda, dan Anda hal-hal yang seharusnya relatif ok dengan proxy dan beberapa server backend.

Jika Anda harus tetap menyatakan, ada berbagai cara untuk membuat sesi lengket melalui proxy sehingga server backend yang sama menangani semua permintaan dari satu pengguna, tetapi ada juga banyak hal yang membuat sesi-sesi itu sulit untuk tetap lengket .

Anda juga bisa mempertahankan status dalam media umum di backend, sehingga setiap server akan memuat status yang sama untuk pengguna yang sama. Anda dapat melakukan ini dengan database (mungkin terlalu lambat) atau sesuatu seperti memcached .

Apakah Anda meningkatkan jumlah server basis data juga? Itu akan membawa banyak masalah untuk dikhawatirkan.

Beberapa masalah sesi dibahas dalam Stack Overflow Podcast Nomor 6

Untuk pengujian, pastikan Anda menekan kelompok uji yang sama dengan keras sehingga Anda dapat melihat bagaimana permintaan Anda dilakukan ketika diarahkan di banyak server, karena banyak permintaan dari klien yang sama ke backend yang berbeda adalah tempat Anda kemungkinan memiliki masalah, jadi pastikan sesuatu dalam rencana pengujian Anda menyebabkan hal itu terjadi.

Anda mungkin juga ingin membaca tentang Stack Overflow's konfigurasi jaringan

0
danivovich