Bagaimana cara merapikan server yang kelebihan beban?

Materi, terjemahan yang kami terbitkan hari ini, didedikasikan untuk menemukan hambatan dalam kinerja server, memperbaiki masalah, meningkatkan kinerja sistem dan mencegah penurunan kinerja. Di sini, dalam perjalanan untuk memecahkan masalah server yang kelebihan beban, diusulkan untuk mengambil 4 langkah berikut:

  1. Penilaian situasi: penentuan bottleneck kinerja server.
  2. Stabilisasi server: penerapan langkah-langkah mendesak untuk memperbaiki situasi.
  3. Peningkatan Sistem: memperluas dan mengoptimalkan kemampuan sistem.
  4. Pemantauan server: menggunakan alat otomatis untuk mencegah terjadinya masalah.



1. Penilaian situasi


Ketika lalu lintas membebani server, prosesor, jaringan, memori, dan disk I / O dapat menjadi hambatan kinerja. Menentukan apa yang sebenarnya menyebabkan masalah memungkinkan Anda untuk fokus pada yang paling penting. Pertimbangkan beberapa fitur analisis subsistem server yang paling penting.

  • . , 80%, , . , 80-90%. 100%, . , , . , , , «» . , , , , .
  • . , , , , . , -, , . , , .
  • . , . , . . , (Out Of Memory, OOM). , , , .
  • /. , , , , . , , , (, ). — , .

Apa yang akan kita diskusikan di bawah ini bertujuan untuk menyelesaikan masalah dengan prosesor dan jaringan. Faktanya adalah bahwa sebagian besar proyek menderita, selama periode lalu lintas puncak, justru dari masalah seperti itu.

Anda dapat mulai memecahkan masalah server dengan menggunakan perintah atas . Jika ada peluang seperti itu, di sini Anda dapat menggunakan data historis penyedia hosting dan data yang dikumpulkan oleh sistem pemantauan.

2. Stabilisasi server


Memiliki server yang kelebihan beban dalam sistem dapat dengan cepat menyebabkan kegagalan berjenjang di bagian lain sistem. Akibatnya, penting, setelah diketahui bahwa server kelebihan beban, untuk menstabilkannya, dan hanya kemudian menyelidiki situasi dengan maksud untuk memperkenalkan beberapa perbaikan serius ke dalam sistem.

▍ Batasi kecepatan pemrosesan kueri


Membatasi kecepatan pemrosesan permintaan memungkinkan Anda melindungi infrastruktur dengan membatasi jumlah permintaan yang masuk. Ini sangat penting ketika kinerja server turun. Ketika waktu respons server bertambah, pengguna cenderung menyegarkan halaman secara agresif, yang selanjutnya menambah beban server.

Meskipun menolak untuk memproses permintaan adalah langkah yang sederhana dan efektif, yang terbaik adalah mengurangi beban di server dengan membatasi jumlah permintaan yang datang menggunakan beberapa sistem eksternal. Ini bisa, misalnya, penyeimbang beban, server proxy terbalik atau CDN. Di bawah ini adalah tautan ke instruksi untuk bekerja dengan beberapa sistem semacam ini:


Berikut adalah bahan untuk mengurangi beban server menggunakan berbagai pendekatan untuk membatasi kecepatan pemrosesan permintaan.

Caching TPHTTP


Cari cara untuk meningkatkan caching konten. Jika sumber daya dapat diberikan kepada pengguna dari cache HTTP (dari cache browser atau dari CDN), maka itu tidak perlu diminta dari server, yang mengurangi beban di server.

Tajuk HTTP seperti Kontrol Tembolok , Kedaluwarsa, dan ETag menunjukkan bagaimana sumber daya tertentu harus di-cache. Mengaudit dan memperbaiki tajuk ini dapat membantu meningkatkan caching.

Meskipun Anda dapat menggunakan kemampuan pekerja layanan untuk melakukan caching , mereka menggunakan cache yang terpisah . Ini adalah bantuan untuk sistem caching browser inti, bukan pengganti untuk itu. Oleh karena itu, ketika memperbaiki masalah server yang kelebihan beban, upaya harus difokuskan pada pengoptimalan caching HTTP.

Diagnostik


Luncurkan Mercusuar dan lihat di Sajikan aset statis dengan metrik kebijakan cache yang efisien untuk melihat daftar sumber daya dengan waktu caching pendek dan menengah ( Time To Live , TTL). Tinjau sumber daya yang terdaftar dan pertimbangkan untuk meningkatkan TTL mereka. Berikut adalah perkiraan persyaratan caching yang berlaku untuk berbagai sumber.

  • Sumber daya statis perlu di-cache untuk jangka waktu yang lama (1 tahun).
  • Sumber daya dinamis perlu di-cache untuk waktu yang singkat (3 jam).

Pengaturan cache


Adalah perlu untuk menulis waktu cache cache yang diperlukan, dinyatakan dalam detik, ke dalam arahan max-ageheader Cache-Control . Berikut adalah petunjuk untuk mengatur tajuk ini pada sistem yang berbeda:


Perhatikan bahwa arahan max-agehanyalah salah satu dari banyak arahan yang memengaruhi caching. Ada arahan lain dan header lain yang memengaruhi fitur cache. Untuk lebih memahami masalah ini, Anda disarankan untuk membaca panduan caching HTTP ini .

Reduction Pengurangan kemampuan sistem secara bertahap


Pengurangan kemampuan sistem secara bertahap adalah strategi untuk membatasi fungsionalitas sementara yang bertujuan menghilangkan beban berlebihan dari server. Konsep ini dapat diterapkan dalam berbagai cara. Misalnya, memberi pelanggan halaman teks statis alih-alih aplikasi lengkap, menonaktifkan pencarian, atau mengembalikan hasil pencarian yang kurang dari biasanya. Ini termasuk menonaktifkan kemampuan proyek yang intensif sumber daya yang tidak memengaruhi fungsionalitas dasarnya. Perhatian utama di sini harus dibayar untuk menonaktifkan fungsionalitas, yang dapat ditinggalkan tanpa mempengaruhi fitur utama aplikasi terlalu banyak.

3. Perbaikan sistem


▍Gunakan CDN


Tugas menyajikan sumber daya statis dapat ditransfer dari server ke Jaringan Pengiriman Konten (CDN). Ini akan mengurangi beban di server.

Fungsi utama CDN adalah untuk mengirimkan materi dengan cepat kepada pengguna melalui penggunaan jaringan server besar yang terletak di dekat pengguna. Selain itu, beberapa CDN menawarkan fitur terkait kinerja tambahan. Diantaranya - kompresi data, penyeimbangan beban, optimalisasi file media.

Pengaturan CDN


Keuntungan CDN diungkapkan jika perusahaan yang memiliki jaringan memiliki kelompok besar server yang didistribusikan di seluruh dunia. Karenanya, mendukung layanan CDN Anda sendiri jarang masuk akal. Pengaturan CDN yang khas adalah prosedur yang cukup cepat yang memakan waktu sekitar setengah jam. Ini terdiri dari memperbarui catatan DNS sehingga mereka akan menunjuk ke CDN.

Optimasi CDN: Studi Kasus


Untuk mengidentifikasi sumber daya yang tidak dilayani menggunakan CDN (tetapi harus dikeluarkan untuk pengguna dengan CDN), Anda dapat menggunakan WebPageTest . Pada halaman hasil, klik pada persegi panjang yang ditandatangani sebagai Effective use of CDNdan lihat daftar sumber daya yang harus dilayani oleh CDN.


Hasil WebPageTest

Penyelesaian masalah


Jika sumber daya tidak di-cache menggunakan CDN, cari tahu apakah kondisi berikut ini benar:


▍ Menskalakan sumber daya komputasi


Keputusan untuk menskala sumber daya komputasi harus dilakukan dengan hati-hati. Meskipun sering kali mungkin untuk menyelesaikan masalah tertentu dengan menggunakan penskalaan, setelah melakukan hal ini secara tidak tepat, adalah mungkin untuk memperumit sistem secara tidak perlu dan secara tidak masuk akal meningkatkan biaya dukungannya.

Diagnostik


Indikator waktu yang tinggi ke byte pertama ( Time To First Byte , TTFB) mungkin merupakan tanda bahwa server mendekati batasnya. Anda dapat menemukan informasi TTFB di bagian Mengurangi waktu respons server (TTFB) dari laporan Lighthouse.

Untuk mempelajari situasi lebih dalam, Anda perlu menggunakan beberapa alat pemantauan dan menganalisis penggunaan prosesor. Jika nilai beban prosesor saat ini atau yang diperkirakan melebihi 80% - ini berarti Anda harus memikirkan untuk meningkatkan kapasitas server.

Penyelesaian masalah


Menambahkan load balancer ke sistem memungkinkan Anda untuk mendistribusikan lalu lintas antara beberapa server. Penyeimbang beban terletak di depan kumpulan server dan mendistribusikan lalu lintas ke server yang sesuai. Penyedia cloud menawarkan pengguna load balancers ( GCP , AWS , Azure ), tetapi Anda juga dapat menggunakan penyeimbang Anda sendiri menggunakan HAProxy atau NGINX . Setelah load balancer siap bekerja, server tambahan dapat ditambahkan ke sistem.

Selain load balancing, sebagian besar penyedia cloud menawarkan penskalaan otomatis daya komputasi ( GCP , AWS ,Azure ). Penskalaan otomatis dikaitkan dengan penyeimbangan beban. Yaitu, dengan penskalaan sumber daya secara otomatis pada waktu beban tinggi, sumber daya tambahan dialokasikan, dan selama periode beban rendah, sumber daya yang tidak perlu dinonaktifkan. Tetapi, bahkan mempertimbangkan hal ini, perlu dicatat bahwa penskalaan otomatis juga bukan solusi universal. Butuh waktu untuk memulai server secara otomatis. Konfigurasi penskalaan otomatis memerlukan konfigurasi serius. Oleh karena itu, sebelum menerapkan sistem penskalaan otomatis yang kompleks, ada baiknya mencoba konfigurasi yang relatif sederhana dengan load balancer.

▍Menggunakan kompresi data


Sumber daya teks harus dikompres menggunakan algoritma gzip atau brotli. Dalam beberapa kasus, kompresi dapat membantu mengurangi ukuran sumber daya sebesar 70%.

Diagnostik


Untuk menemukan sumber daya yang memerlukan kompresi, Anda dapat menggunakan indikator Aktifkan kompresi teks dari laporan Lighthouse.

Penyelesaian masalah


Untuk mengaktifkan kompresi, Anda perlu mengedit pengaturan server. Berikut detailnya:


▍Optimasi gambar dan bahan media lainnya


Pada gambar jatuh sebagian besar bahan sebagian besar situs web. Optimalisasi gambar dapat menyebabkan pengurangan signifikan dalam ukuran bahan situs. Apalagi optimasi seperti ini dilakukan dengan cukup cepat.

Diagnostik


Ada berbagai indikator dalam laporan Mercusuar yang mengindikasikan opsi optimasi gambar yang potensial. Untuk mencari gambar besar yang perlu dioptimalkan, Anda dapat menggunakan alat pengembang browser biasa. Gambar seperti itu mungkin menjadi kandidat yang baik untuk optimisasi.

Berikut adalah daftar metrik laporan LightHouse yang harus Anda perhatikan ketika menjelajahi kemungkinan pengoptimalan gambar:


Jika Anda menggunakan alat pengembang Chrome untuk membantu Anda mengoptimalkan gambar, Anda dapat mengikuti langkah-langkah ini:

  • Catat aktivitas jaringan halaman.
  • Klik Imguntuk memfilter sumber daya non-gambar.
  • Klik pada kolom Sizeuntuk mengurutkan file gambar berdasarkan ukuran.

Penyelesaian masalah


Pertama, mari kita bicara tentang apa yang harus dilakukan jika Anda punya sedikit waktu.

Dalam situasi seperti itu, Anda harus memperhatikan gambar besar, dan gambar yang diunduh lebih sering daripada yang lain. Setelah menemukannya, mereka harus mengalami optimasi manual, menggunakan alat seperti Squoosh . Foto besar biasanya adalah kandidat yang bagus untuk optimisasi. Misalnya, diambil dari sumber daya seperti Gambar Pahlawan .

Inilah yang perlu Anda perhatikan saat mengoptimalkan gambar:

  • Ukuran: Gambar tidak boleh lebih besar dari yang diperlukan.
  • : , 80-85 , 30-40% .
  • : JPEG, PNG. MP4, GIF.

Sekarang beberapa kata tentang cara mendekati pengoptimalan gambar untuk mereka yang memiliki lebih banyak waktu.

Jika gambar merupakan bagian penting dari materi situs, pertimbangkan untuk menggunakan layanan CDN khusus yang dirancang untuk bekerja dengan gambar untuk pemeliharaannya. Layanan semacam itu memungkinkan Anda menghapus beban bekerja dengan gambar dari server utama. Menyiapkan proyek untuk menggunakan layanan CDN itu sederhana, tetapi membutuhkan pembaruan tautan yang ada ke gambar sehingga mereka menunjuk ke sumber daya CDN. Berikut adalah materi tentang penggunaan layanan CDN khusus yang dirancang untuk gambar.

▍Minifikasi JavaScript dan CSS


Minifikasi kode memungkinkan Anda mengurangi ukurannya dengan menghapus karakter yang tidak perlu.

Diagnostik


Lihatlah metrik Minify CSS dan Perkecil JavaScript dalam laporan Mercusuar untuk mengidentifikasi sumber daya yang memerlukan minifikasi.

Penyelesaian masalah


Jika Anda tidak punya banyak waktu, fokuslah pada mengecilkan kode JavaScript. Di sebagian besar situs, jumlah kode JavaScript melebihi jumlah kode CSS, sehingga langkah ini akan memberikan hasil yang lebih baik. Inilah hal - hal tentang meminimalkan JavaScript, dan inilah hal-hal tentang meminimalkan CSS.

4. Pemantauan server


Alat pemantauan server mendukung pengumpulan dan visualisasi data menggunakan panel kontrol. Mereka dapat memberi tahu pengguna tentang berbagai peristiwa yang terkait dengan kinerja server. Menggunakan alat-alat ini dapat membantu mencegah dan mengurangi masalah kinerja server.

Saat membuat sistem pemantauan, Anda harus berusaha untuk kesederhanaan semaksimal mungkin. Pengumpulan data yang berlebihan dan pemberitahuan yang terlalu sering dapat menyebabkan efek negatif. Semakin luas rentang data yang dikumpulkan dan semakin sering dikumpulkan, semakin mahal pengumpulan dan penyimpanannya. Dan jika orang yang bertanggung jawab atas keadaan server akan dibombardir dengan pesan tentang peristiwa kecil, maka ia, sebagai akibatnya, akan mengabaikan pesan-pesan ini.

Pemberitahuan harus berisi metrik yang secara konsisten dan akurat menjelaskan masalah. Misalnya, waktu respons server (latensi) adalah metrik yang sangat baik untuk ini: ini memungkinkan Anda untuk mengidentifikasi sejumlah besar situasi masalah dan secara langsung terkait dengan bagaimana server dirasakan oleh pengguna. Pemberitahuan berdasarkan metrik tingkat rendah, seperti tingkat pemanfaatan prosesor, dapat memainkan peran sebagai add-on yang bermanfaat, tetapi mereka hanya dapat menunjukkan sebagian kecil dari kemungkinan masalah. Selain itu, notifikasi tidak boleh didasarkan pada indikator rata-rata, tetapi pada indikator yang sesuai dengan 95-99 persen. Kalau tidak, menganalisis rata-rata dapat dengan mudah menyebabkan melewatkan masalah yang tidak mempengaruhi semua pengguna.

Pengaturan pemantauan


Semua penyedia cloud utama menyediakan alat pemantauan sendiri kepada pelanggan ( GCP , AWS , Azure ). Selain itu, alat Netdata dapat dicatat di sini - alternatif sumber terbuka gratis yang sangat baik untuk alat penyedia. Apa pun yang Anda gunakan, Anda harus memasang aplikasi agen di setiap server yang ingin Anda pantau. Setelah menyelesaikan pengaturan sistem, pastikan untuk mengatur notifikasi. Berikut adalah petunjuk untuk menyiapkan berbagai alat pemantauan:


Ringkasan


Hari ini kami berbicara tentang cara mengidentifikasi dan memperbaiki masalah kinerja server. Saya ingin percaya bahwa server Anda akan bekerja secara stabil dan saran dari materi ini tidak akan berguna bagi Anda. Dan jika terjadi kesalahan - kami harap Anda menemukan sesuatu di sini yang akan membantu Anda mengatasi masalah secepat mungkin.

Pembaca yang budiman! Apa yang Anda lakukan dalam situasi di mana server tempat proyek Anda berjalan mulai melambat?


All Articles