Penulis asli: Adam Charnock
Tautan asli: Panduan Hitchhikers untuk Load Balancing PHP
Terjemahan: Koda
dulu berarti menjalankan server web besar ketika menjalankan aplikasi web besar. Karena aplikasi Anda menarik banyak pengguna, Anda harus menambahkan lebih banyak memori dan prosesor ke server Anda.
Saat ini, model 'server besar' sudah tidak ada, digantikan oleh sejumlah besar server kecil, yang menggunakan berbagai teknik penyeimbangan beban. Ini adalah pendekatan yang lebih layak yang akan meminimalkan biaya perangkat keras.
Keuntungan dari 'server yang lebih kecil' dibandingkan model 'server besar' di masa lalu tercermin dalam dua aspek:
jika server mati, sistem penyeimbangan beban akan berhenti membuat permintaan ke server yang mati dan sebagai gantinya mendistribusikan beban ke server lain yang berjalan normal. .lebih unggul.
Menskalakan server Anda lebih mudah. Yang harus Anda lakukan adalah menambahkan server baru ke sistem penyeimbangan beban. Tidak perlu mengganggu aplikasi Anda.
Jadi, manfaatkan kesempatan ini :). Tentu saja, trade-offnya adalah memerlukan sedikit lebih banyak kerumitan dalam pengembangan aplikasi Anda. Itulah yang akan dibahas dalam artikel ini.
Pada titik ini Anda mungkin berkata pada diri sendiri: 'Tetapi bagaimana saya tahu saya menggunakan penyeimbangan beban? '. Jawaban paling jujur, jika Anda menanyakan pertanyaan ini, adalah Anda mungkin tidak menggunakan sistem penyeimbangan beban dan sistem Anda tidak perlu mempertimbangkannya. Dalam kebanyakan kasus, ketika aplikasi tumbuh cukup besar, penyeimbangan beban perlu diusulkan dan disiapkan secara eksplisit. Namun, saya terkadang melihat perusahaan web hosting melakukan penyeimbangan beban ini untuk aplikasi pelanggan, atau melakukannya sendiri seperti dijelaskan di bawah.
Sebelum melanjutkan ke bawah, saya ingin menunjukkan bahwa artikel ini terutama menjelaskan penyeimbangan beban di PHP. Saya mungkin akan menulis tentang penyeimbangan beban data di masa mendatang, tetapi untuk saat ini Anda harus menunggu.
Perhatikan bahwa saya terus menyebutkan "aplikasi web" daripada situs web. Hal ini untuk membedakan bahwa 'aplikasi web' adalah situs kompleks yang sering kali melibatkan pemrograman dan database sisi server, bukan situs web yang hanya menampilkan konten statis sederhana.
1. File PHP Pertanyaan pertama adalah, jika Anda memiliki server kecil dalam jumlah besar, bagaimana cara mengunggah file php Anda ke semua server? Ada metode berikut untuk referensi Anda:
unggah semua file ke setiap server secara terpisah. Masalah dengan metode ini adalah: bayangkan Anda memiliki 20 server, maka ini akan dengan mudah menyebabkan kesalahan selama proses pengunggahan, dan waktu pembaruan akan sangat lama. cepat. Dimungkinkan untuk memiliki versi file yang berbeda di server yang berbeda.
Gunakan 'rsync' (atau perangkat lunak serupa). Alat tersebut dapat menyinkronkan file pada direktori lokal dan direktori pada beberapa host jarak jauh.
Gunakan perangkat lunak pengontrol versi (seperti subversi). Ini memungkinkan saya untuk memelihara kode saya dengan sangat baik, dan ketika saya menerbitkan aplikasi saya, saya dapat menjalankan perintah svn update di setiap server untuk menyinkronkannya. Pendekatan ini juga mempermudah peralihan server ke versi kode sebelumnya.
Gunakan server file (Anda mungkin menemukan bahwa NFS bagus untuk ini). Pendekatan ini adalah dengan menggunakan server file untuk menghosting aplikasi web Anda. Tentu saja, jika server file Anda mati, semua situs Anda tidak akan dapat digunakan. Saat ini, Anda perlu mengeluarkan lebih banyak uang untuk memulihkannya.
Metode mana yang Anda pilih bergantung pada kebutuhan dan keterampilan yang Anda miliki. Jika Anda menggunakan sistem kontrol versi, Anda mungkin ingin merencanakan cara untuk memperbarui kode di semua server dengan menjalankan perintah pembaruan secara bersamaan. Namun, jika Anda menggunakan server file, Anda perlu menerapkan beberapa mekanisme pemulihan kegagalan untuk mencegah kegagalan permintaan jika server mati.
2. Upload file Jika hanya ada satu server, upload file tidak menjadi masalah. Namun jika kita memiliki banyak server, bagaimana seharusnya file yang diunggah disimpan? Masalah upload file mirip dengan penyimpanan file PHP lintas server. Berikut beberapa solusi yang mungkin:
Simpan file dalam database. Sebagian besar data memungkinkan data biner disimpan. Saat Anda meminta pengunduhan file, data akses akan mengeluarkan data biner serta nama dan jenis file yang sesuai untuk pengguna. Anda harus mempertimbangkan bagaimana database akan menyimpan file Anda sebelum menggunakan solusi ini. Masalah dengan pendekatan ini adalah jika server database mati maka file tidak tersedia.
Simpan file yang diunggah di server file.Seperti pada pendahuluan sebelumnya, Anda perlu menginstal server file untuk dibagikan oleh semua server web.Unggah semua file yang diunggah di sini. Namun, jika server file sedang down, gangguan pengunduhan file gambar mungkin terjadi.
Rancang mekanisme unggahan Anda sendiri untuk mentransfer file ke setiap server. Pendekatan ini tidak memiliki kelemahan dari solusi server file atau database tunggal, namun akan meningkatkan kompleksitas kode Anda. Misalnya, jika server mati saat mengunggah ke beberapa server, apa yang akan Anda lakukan?
Menggunakan database untuk menyimpan file yang diunggah tetapi merancang mekanisme cache file adalah solusi yang baik. Ketika server menerima permintaan pengunduhan file, server terlebih dahulu memeriksa apakah file tersebut ada di sistem cache. Jika ditemukan, server akan mendownloadnya dari sistem cache.
3. Sesi
Jika Anda terbiasa dengan penanganan sesi PHP, Anda mungkin tahu bahwa secara default, PHP menyimpan data sesi dalam file sementara di server. Selain itu, file ini hanya ada di server tempat Anda memintanya, namun permintaan selanjutnya mungkin diproses oleh server lain, yang akan menghasilkan sesi baru di server lain. Hal ini menyebabkan sesi sering tidak dikenali, seperti pengguna yang login selalu diminta untuk login kembali.
Solusi yang saya rekomendasikan adalah membangun kembali mekanisme pemrosesan sesi bawaan PHP untuk menyimpan data sesi dalam database, atau menerapkan mekanisme Anda sendiri untuk memastikan bahwa permintaan pengguna dikirim ke server yang sama.
4. Konfigurasi
Meskipun topik ini tidak secara khusus berhubungan dengan PHP, saya merasa perlu untuk menyebutkannya. Saat menjalankan server berkerumun, ada baiknya untuk memiliki cara untuk menjaga file konfigurasi tetap sinkron antar server. Jika file konfigurasi tidak konsisten, hal ini dapat mengakibatkan perilaku terputus-putus yang sangat aneh sehingga sulit untuk dipecahkan.
Saya sarankan mengelolanya satu per satu menggunakan sistem kontrol versi. Dengan cara ini Anda dapat menyimpan file konfigurasi php yang berbeda untuk instalasi proyek yang berbeda, dan juga menjaga semua file konfigurasi server tetap sinkron.
5. Pencatatan
Seperti masalah konfigurasi, logging tidak hanya terkait dengan PHP. Namun tetap sangat penting untuk menjaga server Anda tetap berjalan sehat. Tanpa sistem logging yang tepat, bagaimana Anda tahu jika kode PHP Anda mulai menghasilkan kesalahan (Anda selalu mematikan pengaturan display_errors saat sistem hidup, bukan?)
Ada beberapa cara untuk menerapkan logging:
Masuk setiap server. Ini adalah cara termudah. Setiap mesin hanya mencatat satu file. Keuntungannya adalah sederhana dan memerlukan sedikit konfigurasi. Namun, seiring bertambahnya jumlah server, pemantauan file log di setiap server menjadi sangat sulit.
Masuk ke berbagi Pendekatan ini masih memiliki file log di setiap server, namun disimpan di server file pusat melalui mekanisme berbagi, yang membuat pemantauan log lebih mudah. Masalah dengan solusi ini adalah jika server file tidak tersedia, masalah penulisan log sederhana pada akhirnya akan menyebabkan seluruh aplikasi mogok.
Masuk ke server logging Anda dapat menggunakan perangkat lunak logging seperti syslog untuk menulis semua log ke server pusat. Meskipun metode ini memerlukan lebih banyak konfigurasi, metode ini juga memberikan solusi paling tangguh.
phpv menambahkan: Poin penting lainnya adalah manajemen database, yang mungkin melibatkan banyak konten.