Pengujian performa dan antipattern untuk aplikasi cloud

Antipattern performa, seperti pola desain, adalah proses dan penerapan yang rusak umum dalam organisasi. Ini adalah praktik umum yang cenderung menyebabkan masalah skalabilitas saat aplikasi berada di bawah tekanan. Kesadaran akan praktik ini dapat membantu menyederhanakan komunikasi konsep tingkat tinggi di antara praktisi perangkat lunak, dan pengetahuan tentang antipattern dapat membantu saat meninjau kode atau mendiagnosis masalah performa.

Berikut adalah skenario umum: Aplikasi berperilaku baik selama pengujian performa. Ini akan dirilis ke produksi, dan mulai menangani beban kerja nyata. Pada saat itu, ia mulai berperforma buruk—menolak permintaan pengguna, mengulur-ulur, atau menampilkan pengecualian. Tim pengembangan lalu akan dihadapkan dengan dua pertanyaan:

  • Mengapa perilaku ini tidak muncul selama pengujian?
  • Bagaimana kita memperbaikinya?

Jawaban atas pertanyaan pertama sangatlah mudah. Sulit untuk mensimulasikan pengguna nyata dalam lingkungan pengujian, bersama dengan pola perilaku mereka dan volume pekerjaan yang mungkin mereka lakukan. Satu-satunya cara yang benar-benar pasti untuk memahami perilaku sistem di bawah beban adalah dengan mengamatinya dalam produksi. Agar jelas, sebaiknya Anda tidak melewatkan pengujian performa. Pengujian performa sangat penting untuk mendapatkan metrik performa dasar. Tetapi Anda harus siap untuk mengamati dan memperbaiki masalah performa saat masalah muncul dalam sistem langsung.

Jawaban atas pertanyaan kedua, cara memperbaiki masalah, lebih sulit. Sejumlah faktor mungkin berkontribusi, dan terkadang masalah hanya muncul dalam keadaan tertentu. Instrumentasi dan pengelogan adalah kunci untuk menemukan akar masalahnya, tetapi Anda juga harus tahu apa yang harus dicari.

Berdasarkan interaksi kami dengan pelanggan Microsoft Azure, kami telah mengidentifikasi beberapa masalah performa paling umum yang dilihat pelanggan dalam produksi. Untuk setiap antipattern, kami menjelaskan mengapa antipattern biasanya terjadi, gejala antipattern, dan teknik untuk menyelesaikan masalah. Kami juga memberikan kode sampel yang menggambarkan solusi skalabilitas antipattern dan yang disarankan.

Beberapa antipattern ini mungkin tampak jelas ketika Anda membaca deskripsi, tetapi itu terjadi lebih sering daripada yang Anda pikirkan. Terkadang aplikasi mewarisi desain yang berfungsi di lokal, tetapi tidak diskalakan di cloud. Atau aplikasi mungkin dimulai dengan desain yang sangat bersih, tetapi saat fitur baru ditambahkan, satu atau beberapa antipattern ini akan masuk. Apa pun itu, panduan ini akan membantu Anda mengidentifikasi dan memperbaiki antipattern ini.

Katalog antipattern

Berikut adalah daftar antipattern yang telah kami identifikasi:

Antipattern Deskripsi
Database Sibuk Memindahkan terlalu banyak pemrosesan ke penyimpanan data.
Front End Sibuk Memindahkan tugas intensif sumber daya ke utas latar belakang.
Obrolan I/O Terus mengirim banyak permintaan jaringan kecil.
Pengambilan Asing Mengambil lebih banyak data daripada yang dibutuhkan, menghasilkan I/O yang tidak perlu.
Instantiasi yang Tidak Tepat Berulang kali membuat dan menghancurkan objek yang dirancang untuk dibagikan dan digunakan kembali.
Persistensi Monolitik Menggunakan penyimpanan data yang sama untuk data dengan pola penggunaan yang sangat berbeda.
Tidak Ada Penembolokan Gagal melakukan cache data.
Tetangga yang Berisik Satu penyewa menggunakan jumlah sumber daya yang tidak proporsional.
Storm Coba Lagi Terlalu sering mencoba ulang permintaan yang gagal ke server.
I/O Sinkron Memblokir utas panggilan saat I/O selesai.

Langkah berikutnya

Untuk informasi selengkapnya tentang penyetelan performa, lihat Penyetelan performa aplikasi terdistribusi