Rekomendasi untuk mengoptimalkan kode dan infrastruktur

Berlaku untuk rekomendasi daftar periksa Efisiensi Performa Azure Well-Architected Framework ini:

PE:07 Optimalkan kode dan infrastruktur. Gunakan kode yang berkinerja, dan pastikan bahwa kode tersebut membongkar tanggung jawab ke platform. Gunakan kode dan infrastruktur hanya untuk tujuan intinya dan hanya jika perlu.

Panduan ini menjelaskan rekomendasi untuk mengoptimalkan kode dan performa infrastruktur. Untuk mengoptimalkan kode dan infrastruktur, Anda harus menggunakan komponen Anda hanya untuk tujuan intinya dan hanya jika perlu. Ketika Anda menggunakan kode dan infrastruktur secara berlebihan, kode dan infrastruktur membuat konsumsi sumber daya, penyempitan, dan respons lambat yang tidak perlu. Untuk mengimbangi inefisiensi tersebut, Anda harus menambahkan lebih banyak sumber daya untuk menyelesaikan tugas yang sama.

Definisi

Istilah Definisi
Konkurensi Ketika beberapa tugas atau proses dilakukan sekaligus tetapi tidak harus pada waktu yang sama persis.
Arsitektur CPU Komponen dan prinsip yang memengaruhi cara kerja komputer.
Pemadatan data Tindakan mengurangi ukuran file dengan meminimalkan data yang berlebihan.
Tumpukan Area dalam memori yang digunakan untuk alokasi memori runtime.
Kebocoran memori Ketika beban kerja gagal melepaskan memori yang dialokasikan setelah memori tidak lagi diperlukan.
Paralelisme Ketika beberapa tugas atau proses dilakukan secara bersamaan.

Strategi desain utama

Mengoptimalkan kode dan infrastruktur memerlukan penyempurnaan kode dan infrastruktur pendukung untuk meningkatkan efisiensi performa. Ini membutuhkan kode berkinerja yang menjalankan tugas dengan cepat dan tidak membuang-buang sumber daya. Ini membutuhkan infrastruktur yang dirancang dengan baik yang disederhanakan untuk menghindari kompleksitas yang tidak perlu. Beban kerja harus menggunakan kemampuan platform yang melekat. Ini adalah pendekatan yang membantu memastikan kode dan infrastruktur digunakan terutama untuk tujuan inti mereka dan hanya jika perlu.

Optimalkan performa kode

Untuk mengoptimalkan performa kode, ubah kode untuk mengurangi penggunaan sumber daya, meminimalkan runtime, dan meningkatkan performa. Anda dapat memodifikasi kode untuk meningkatkan efisiensi dan kecepatan program perangkat lunak. Jangan menutupi masalah performa dengan brute force. Brute force berarti menambahkan sumber daya komputasi untuk mengimbangi performa kode, seperti menambahkan kapasitas tambahan alih-alih mengatasi sumbernya. Anda perlu memperbaiki masalah performa dengan pengoptimalan. Saat Anda mengoptimalkan performa kode, ini membantu memaksimalkan pemanfaatan sumber daya sistem, meningkatkan waktu respons, mengurangi latensi, dan meningkatkan pengalaman pengguna.

Instrumen kode Anda

Kode instrumentasi mengacu pada praktik penambahan cuplikan kode atau pustaka ke kode yang mengumpulkan data dan memantau performa kode selama runtime. Instrumentasi kode memungkinkan pengembang untuk mengumpulkan informasi tentang metrik utama seperti konsumsi sumber daya (CPU, penggunaan memori) dan waktu eksekusi. Dengan kode instrumentasi, pengembang dapat memperoleh wawasan tentang jalur panas kode, mengidentifikasi penyempitan performa, dan mengoptimalkan kode untuk efisiensi performa yang lebih baik.

Dalam lingkungan yang ideal, Anda harus melakukan analisis kode di awal siklus hidup pengembangan perangkat lunak. Semakin awal Anda menangkap masalah kode, semakin murah untuk memperbaikinya. Anda ingin mengotomatiskan sebanyak mungkin analisis kode ini. Gunakan alat analisis kode dinamis dan statis untuk mengurangi upaya manual. Namun, perlu diingat bahwa pengujian ini masih merupakan simulasi produksi. Produksi memberikan pemahaman yang paling jelas tentang pengoptimalan kode.

Tradeoff: Alat pemantauan kode kemungkinan akan meningkatkan biaya.

Mengidentifikasi jalur panas

Dengan melengkapi kode, Anda dapat mengukur konsumsi sumber daya untuk jalur kode yang berbeda. Pengukuran ini membantu Anda mengidentifikasi jalur panas. Jalur panas memiliki efek signifikan pada performa dan penggunaan sumber daya. Mereka adalah bagian penting atau sering dijalankan dari program yang memerlukan performa tinggi dan latensi rendah. Untuk mengidentifikasi jalur panas kode, pertimbangkan langkah-langkah berikut:

  • Menganalisis data runtime: Mengumpulkan data runtime dan menganalisisnya untuk mengidentifikasi area kode yang menggunakan sumber daya signifikan, seperti operasi CPU, memori, atau I/O. Cari pola atau bagian kode yang sering dijalankan atau membutuhkan waktu lama untuk diselesaikan.

  • Mengukur performa: Gunakan alat pembuatan profil atau kerangka kerja pengujian performa untuk mengukur waktu eksekusi dan konsumsi sumber daya dari jalur kode yang berbeda. Ini membantu mengidentifikasi hambatan dan area untuk perbaikan.

  • Pertimbangkan logika bisnis dan efek pengguna: Mengevaluasi pentingnya jalur kode yang berbeda berdasarkan relevansinya dengan fungsionalitas aplikasi atau operasi bisnis penting. Tentukan jalur kode mana yang sangat penting untuk memberikan nilai kepada pengguna atau memenuhi persyaratan performa.

Optimalkan logika kode

Mengoptimalkan logika kode adalah tentang menyempurnakan struktur dan desain kode untuk melakukan tugas dengan lebih sedikit sumber daya. Logika yang ditingkatkan mengurangi operasi yang tidak perlu. Ini menciptakan eksekusi yang lebih cepat dengan konsumsi sumber daya yang lebih sedikit. Anda harus menghapus operasi yang tidak perlu dalam jalur kode yang mungkin memengaruhi performa. Prioritaskan pengoptimalan jalur panas untuk melihat perolehan efisiensi performa terbesar. Untuk mengoptimalkan logika kode, pertimbangkan strategi berikut:

  • Menghapus panggilan fungsi yang tidak perlu: Tinjau kode Anda dan identifikasi fungsi apa pun yang tidak penting untuk fungsionalitas yang diinginkan dan dapat memengaruhi performa secara negatif. Misalnya, jika panggilan fungsi melakukan validasi yang diselesaikan sebelumnya dalam kode, Anda dapat menghapus panggilan fungsi validasi yang tidak perlu.

  • Meminimalkan operasi pengelogan: Pengelogan dapat membantu untuk penelusuran kesalahan dan analisis, tetapi pengelogan yang berlebihan dapat memengaruhi performa. Evaluasi kebutuhan setiap operasi pengelogan dan hapus panggilan pengelogan yang tidak perlu yang tidak penting untuk analisis performa.

  • Optimalkan perulangan dan kondisional: Analisis perulangan dan kondisional dalam kode Anda dan identifikasi perulangan atau kondisi yang tidak perlu yang dapat dihilangkan. Menyederhanakan dan mengoptimalkan struktur ini dapat meningkatkan performa kode Anda. Minimalkan panggilan fungsi dalam perulangan, dan hilangkan perhitungan redundan. Pertimbangkan untuk memindahkan komputasi di luar perulangan atau menggunakan unrolling perulangan.

  • Mengurangi pemrosesan data yang tidak perlu: Tinjau kode Anda untuk setiap operasi pemrosesan data yang tidak perlu, seperti perhitungan atau transformasi yang berlebihan. Hilangkan operasi yang tidak perlu ini untuk meningkatkan efisiensi kode Anda.

  • Optimalkan struktur data. Untuk menyimpan dan mengambil data secara efisien, pilih struktur data yang sesuai, seperti array, daftar tertaut, pohon, dan tabel hash. Pilih struktur data terbaik untuk masalah tertentu. Struktur data yang sesuai meningkatkan performa aplikasi.

  • Minimalkan permintaan jaringan: Jika kode Anda melibatkan pembuatan permintaan jaringan, minimalkan jumlah permintaan dan optimalkan penggunaannya. Permintaan batch jika memungkinkan dan hindari perjalanan pulang pergi yang tidak perlu untuk meningkatkan performa.

  • Meminimalkan alokasi: Identifikasi area tempat terjadinya alokasi memori yang berlebihan. Optimalkan kode dengan mengurangi alokasi yang tidak perlu dan menggunakan kembali sumber daya yang ada jika memungkinkan. Dengan meminimalkan alokasi, Anda dapat meningkatkan efisiensi memori dan performa keseluruhan. Gunakan strategi manajemen memori dan pengumpulan sampah yang sesuai untuk bahasa pemrograman Anda.

  • Mengurangi ukuran struktur data: Menilai ukuran struktur data Anda, seperti kelas, dan mengidentifikasi area di mana pengurangan dimungkinkan. Tinjau persyaratan data dan hilangkan bidang atau properti yang tidak perlu. Optimalkan penggunaan memori dengan memilih jenis data dan pengemasan data yang sesuai secara efisien.

  • Gunakan SDK dan pustaka yang dioptimalkan performa. Gunakan SDK asli atau pustaka yang dioptimalkan performa. SDK asli dirancang untuk berinteraksi dengan layanan dan sumber daya pada platform atau dalam kerangka kerja. Misalnya, SDK cloud-native bekerja lebih baik dengan bidang data layanan cloud daripada dengan akses API kustom. SDK unggul dalam menangani permintaan jaringan dan mengoptimalkan interaksi. Pustaka yang dioptimalkan performa, seperti Math.NET, berisi fungsi yang dioptimalkan performa. Saat menerapkan fungsi dengan tepat, Anda dapat meningkatkan performa beban kerja Anda.

  • Implementasi pemotongan silang: Pertimbangkan efek implementasi lintas pemotongan, seperti middleware atau pemeriksaan token, dan menilai apakah itu berdampak negatif pada performa.

Tinjau rekomendasi performa khusus untuk bahasa pemrograman yang sedang Anda kerjakan. Evaluasi kode Anda terhadap rekomendasi ini untuk mengidentifikasi area untuk peningkatan.

Pertukaran:

  • Mengoptimalkan kode dan jalur panas memerlukan keahlian pengembang dalam mengidentifikasi inefisiensi kode bersifat subjektif dan mungkin diperlukan individu yang sangat terampil untuk tugas lain.
  • SDK memberikan kemudahan dan menghilangkan kompleksitas berinteraksi dengan API. Tetapi SDK mungkin membatasi opsi kontrol dan kustomisasi Anda untuk kode kustom.

Optimalkan manajemen memori

Mengoptimalkan manajemen memori melibatkan penyempurnaan cara beban kerja menggunakan, mengalokasikan, dan melepaskan sumber daya memori untuk meningkatkan efisiensi. Manajemen memori yang tepat meningkatkan performa kode karena mengurangi overhead operasi memori. Penggunaan memori yang efisien mengurangi latensi, mencegah perlambatan atau crash sistem, dan memaksimalkan throughput tugas komputasi. Pertimbangkan strategi berikut untuk mengoptimalkan manajemen memori.

Men-debug masalah memori. Cadangan memori adalah rekam jepret memori aplikasi. Mereka menangkap status memori aplikasi pada titik waktu tertentu. Cadangan memori memungkinkan analisis retrospektif masalah terkait memori. Pilih jenis cadangan memori yang sesuai berdasarkan sifat masalah yang coba Anda diagnosis dan sumber daya yang tersedia. Anda harus menggunakan cadangan miniatur untuk penelusuran kesalahan rutin dan cadangan penuh untuk masalah yang kompleks dan kritis. Strategi ini memberikan keseimbangan antara penggunaan sumber daya dan kemampuan diagnostik. Banyak layanan hosting kode mendukung penelusuran kesalahan memori. Anda harus lebih memilih layanan yang mendukung analisis memori daripada layanan yang tidak. Berikut adalah langkah-langkah dasar untuk men-debug masalah memori:

  1. Mengambil cadangan memori: Mulailah dengan menyiapkan mekanisme untuk menangkap cadangan memori selama runtime aplikasi Anda. Pengambilan dapat dipicu secara manual, otomatis, atau ketika kondisi tertentu (seperti konsumsi memori yang berlebihan) terpenuhi. Beberapa layanan cloud mungkin sudah menawarkan proses ini.

  2. Menganalisis cadangan memori: Setelah Anda mengumpulkan cadangan memori, analisis cadangan memori. Banyak alat dapat membantu Anda dalam memeriksa cadangan ini, seperti WinDbg untuk aplikasi Windows atau GDB untuk sistem berbasis Unix.

  3. Mengidentifikasi kebocoran memori: Fokus pada identifikasi kebocoran memori selama analisis. Kebocoran memori muncul ketika aplikasi Anda mengalokasikan memori tetapi gagal melepaskannya ketika memori tidak lagi diperlukan. Cari objek atau struktur data yang tetap berada dalam memori bahkan ketika objek tersebut harus dibatalkan alokasinya.

  4. Perbaikan dan pengujian: Setelah mengidentifikasi kode yang bermasalah, konsentrasilah untuk menyelesaikan masalah memori. Resolusi mungkin melibatkan melepaskan memori dengan benar, mengoptimalkan struktur data, atau mengevaluasi kembali praktik manajemen memori. Konfirmasikan bahwa solusi Anda menjalani pengujian ketat untuk memastikan kemanjurannya.

  5. Iterasi dan pantau: Manajemen memori adalah proses berkelanjutan. Pantau penggunaan memori aplikasi Anda secara rutin dan bertahan dalam mengumpulkan cadangan memori dalam produksi. Secara teratur mengunjungi kembali tahap analisis dan pengoptimalan untuk memastikan masalah memori tidak muncul kembali dengan modifikasi kode berikutnya.

Dengan menggabungkan analisis cadangan memori ke dalam siklus hidup pengembangan perangkat lunak Anda, Anda dapat memperkuat keandalan dan efisiensi aplikasi Anda. Ini membantu mengurangi kemungkinan masalah terkait memori dalam produksi.

Mengurangi alokasi memori. Minimalkan alokasi memori untuk mengurangi jejak memori kode secara keseluruhan. Beban kerja Anda dapat menggunakan memori yang tersedia secara efisien. Ada lebih sedikit kebutuhan bagi pengumpul sampah untuk mengklaim kembali memori yang tidak digunakan, dan mengurangi frekuensi dan durasi siklus pengumpulan sampah. Alokasi memori bisa mahal, terutama jika Anda sering melakukannya. Minimalkan alokasi memori, sehingga kode dapat berjalan dengan cepat dan efisien.

Cache menyimpan data yang sering diakses dekat dengan prosesor, yang meningkatkan performa. Ketika Anda meminimalkan alokasi memori, ada lebih sedikit ketidakcocokan untuk ruang cache, sehingga Anda dapat menggunakan cache secara efektif. Sejumlah besar alokasi memori dapat menurunkan performa aplikasi dan menghasilkan kesalahan. Cara lain untuk meminimalkan alokasi memori meliputi:

  • Variabel lokal: Gunakan variabel lokal alih-alih variabel global untuk meminimalkan konsumsi memori.

  • Inisialisasi malas: Terapkan inisialisasi malas untuk menunda pembuatan objek atau sumber daya hingga diperlukan.

  • Buffer: Kelola buffer secara efektif untuk menghindari alokasi buffer memori besar.

  • Pengumpulan objek: Pertimbangkan pengumpulan objek untuk menggunakan kembali objek besar alih-alih mengalokasikan dan membatalkan alokasinya.

Untuk informasi selengkapnya, lihat Mengurangi alokasi memori dan Timbunan objek besar pada sistem Windows.

Menggunakan konkurensi dan paralelisme

Menggunakan konkurensi dan paralelisme melibatkan pelaksanaan beberapa tugas atau proses baik secara bersamaan atau tumpang tindih untuk memanfaatkan sumber daya komputasi secara efisien. Teknik-teknik ini meningkatkan throughput keseluruhan dan jumlah tugas yang dapat diproses oleh beban kerja. Saat Anda menjalankan tugas secara bersamaan atau paralel, itu mengurangi runtime aplikasi dan mengurangi latensi dan meningkatkan waktu respons. Konkurensi dan paralelisme memungkinkan pemanfaatan sumber daya komputasi yang efisien, seperti inti CPU atau sistem terdistribusi. Konkurensi dan paralelisme secara efektif mendistribusikan beban kerja di antara sumber daya komputasi.

Gunakan paralelisme. Paralelisme adalah kemampuan sistem untuk secara bersamaan memicu beberapa tugas atau proses pada beberapa sumber daya komputasi. Paralelisme membagi beban kerja menjadi tugas yang lebih kecil yang dijalankan secara paralel. Anda dapat mencapai paralelisme dengan menggunakan teknik seperti multiproscessing atau komputasi terdistribusi. Distribusikan tugas di seluruh prosesor multicore untuk mengoptimalkan manajemen beban kerja. Optimalkan kode untuk memanfaatkan arsitektur CPU, model utas, dan prosesor multicore. Saat Anda menjalankan kode secara paralel, performa meningkat karena beban kerja didistribusikan di beberapa inti.

Gunakan konkurensi. Konkurensi adalah kemampuan sistem untuk menjalankan beberapa tugas atau proses. Konkurensi memungkinkan berbagai bagian program untuk membuat kemajuan secara independen, yang dapat meningkatkan performa keseluruhan. Anda dapat menerapkan konkurensi dengan menggunakan teknik seperti multithreading, di mana beberapa utas berjalan bersamaan dalam satu proses. Anda juga dapat menggunakan pemrograman asinkron, di mana tugas dipicu secara bersamaan.

  • Pemrograman asinkron: Pemrograman asinkron adalah pendekatan untuk memicu tugas tanpa memblokir utas utama. Pemrograman asinkron memungkinkan program memicu tugas sambil menunggu operasi jangka panjang selesai. Dengan pemrograman asinkron, program dapat memulai beberapa tugas dan menunggunya selesai secara asinkron. Program tidak perlu menunggu setiap tugas selesai sebelum melanjutkan ke tugas berikutnya.

    Ada banyak teknik dan pola pemrograman asinkron, tergantung pada bahasa dan platform pemrograman. Salah satu pendekatan umum adalah menggunakan kata kunci dan konstruksi asinkron, seperti async dan await, dalam bahasa seperti C#. Dengan kata kunci ini, Anda dapat menentukan metode asinkron. Untuk lalu lintas HTTP, pertimbangkan untuk menggunakan pola Request-Reply Asinkron.

    Banyak kerangka kerja dan pustaka memberikan dukungan bawaan untuk pemrograman asinkron. Misalnya, di platform .NET, Anda dapat menerapkan operasi asinkron dengan menggunakan pola seperti pola Asinkron Berbasis Tugas dan pola Asinkron Berbasis Peristiwa. Implementasi spesifik pemrograman asinkron bervariasi tergantung pada bahasa pemrograman, platform, dan persyaratan aplikasi.

  • Antrean: Antrean adalah buffer penyimpanan yang terletak antara komponen yang meminta (produsen) dan komponen pemrosesan (konsumen) beban kerja. Mungkin ada beberapa konsumen untuk satu antrean. Ketika tugas meningkat, Anda harus menskalakan konsumen untuk memenuhi permintaan. Produsen menempatkan tugas dalam antrean. Antrean menyimpan tugas hingga konsumen memiliki kapasitas. Antrean sering kali merupakan cara terbaik untuk menyerahkan pekerjaan ke layanan pemrosesan yang mengalami puncak permintaan. Untuk informasi selengkapnya, lihat Pola Load Leveling Berbasis Antrean dan antrean Storage dan antrean Azure Service Bus.

Gunakan pengumpulan koneksi

Pengumpulan koneksi adalah praktik menggunakan kembali Penghubungan Database yang dibuat alih-alih membuat koneksi baru untuk setiap permintaan. Mungkin mahal untuk membuat koneksi ke database. Anda harus membuat koneksi jaringan terautentikasi ke server database jarak jauh. Koneksi database sangat mahal untuk aplikasi yang sering membuka koneksi baru. Pengumpulan koneksi menggunakan kembali koneksi yang ada dan menghilangkan pengeluaran membuka koneksi baru untuk setiap permintaan. Pengumpulan koneksi mengurangi latensi koneksi dan memungkinkan throughput database tinggi (transaksi per detik) di server. Anda harus memilih ukuran kumpulan yang dapat menangani lebih banyak koneksi daripada yang Anda miliki saat ini. Tujuannya adalah agar kumpulan koneksi dengan cepat menangani permintaan masuk baru.

Memahami batas pengumpulan koneksi. Beberapa layanan membatasi jumlah koneksi jaringan. Ketika Anda melebihi batas ini, koneksi mungkin melambat atau berakhir. Anda dapat menggunakan pengumpulan koneksi untuk membuat sekumpulan koneksi tetap pada waktu mulai lalu mempertahankan koneksi tersebut. Dalam banyak kasus, ukuran kumpulan default mungkin hanya terdiri dari beberapa koneksi yang bekerja dengan cepat dalam skenario pengujian dasar. Aplikasi Anda mungkin menghabiskan ukuran kumpulan default dalam skala besar dan membuat hambatan. Anda harus menetapkan ukuran kumpulan yang memetakan ke jumlah transaksi bersamaan yang didukung pada setiap instans aplikasi.

Uji kumpulan koneksi. Setiap database dan platform aplikasi memiliki persyaratan yang sedikit berbeda untuk menyiapkan dan menggunakan kumpulan. Uji kumpulan koneksi Anda untuk memastikannya berfungsi secara efisien di bawah beban.

Risiko: Pengumpulan koneksi dapat membuat fragmentasi kumpulan dan menurunkan performa.

Mengoptimalkan pekerjaan latar belakang

Banyak aplikasi memerlukan tugas latar belakang yang berjalan secara independen dari UI. Aplikasi dapat memulai pekerjaan dan terus memproses permintaan interaktif dari pengguna. Contoh pekerjaan latar belakang termasuk pekerjaan batch, tugas intensif prosesor, dan proses yang berjalan lama, seperti alur kerja. Tugas latar belakang tidak boleh memblokir aplikasi atau menyebabkan inkonsistensi karena operasi yang tertunda ketika sistem di bawah beban. Untuk meningkatkan performa, Anda dapat menskalakan instans komputasi yang menghosting tugas latar belakang. Untuk informasi selengkapnya, lihat Pekerjaan latar belakang dan Penskalaan dan pertimbangan performa.

Mengoptimalkan performa infrastruktur

Mengoptimalkan performa infrastruktur berarti meningkatkan dan menyesuaikan elemen infrastruktur untuk memastikan operasi puncak dan penggunaan sumber daya terbaik untuk beban kerja. Dengan menyempurnakan infrastruktur, Anda dapat meminimalkan limbah, mengurangi jeda, dan mencapai lebih banyak dengan sumber daya yang tersedia. Ini memastikan bahwa beban kerja berjalan dengan andal dan cepat, yang mengarah ke peningkatan pengalaman pengguna dan penghematan biaya. Untuk mengoptimalkan performa infrastruktur, pertimbangkan strategi berikut:

Tambahkan batas penggunaan. Anda dapat menerapkan batas penggunaan pada beberapa komponen beban kerja. Misalnya, untuk menghapus pod yang tidak stabil, Anda dapat menentukan batas CPU pod dan memori dalam Azure Kubernetes Service (AKS). Untuk mengoptimalkan performa, Anda dapat menentukan batas memori di komputer virtual (VM) Java.

Menyederhanakan infrastruktur. Sederhanakan beban kerja Anda untuk mengurangi potensi masalah interaksi, dependensi, dan kompatibilitas. Saat menyederhanakan beban kerja, Anda mengoptimalkan pemanfaatan sumber daya memori, daya pemrosesan, dan penyimpanan.

Kurangi beban. Untuk mengurangi beban kerja, minimalkan permintaan yang ditempatkan pada aplikasi dan aktifkan sumber daya untuk melakukan tugas utamanya. Misalnya, praktik umum untuk menghindari menjalankan solusi keamanan dalam kode Anda atau pada instans komputasi individual. Sebagai gantinya, server web harus melayani permintaan HTTP. Firewall aplikasi web dan sumber daya gateway dapat menangani pemeriksaan keamanan. Strategi berikut membantu mengurangi beban pada beban kerja Anda:

  • Konsistensi akhir: Mengadopsi model konsistensi akhir untuk meningkatkan performa dengan memungkinkan data sedikit tertanggal. Konsistensi akhirnya mengurangi permintaan langsung pada siklus CPU dan bandwidth jaringan untuk pembaruan data konstan.

  • Mendelegasikan tugas: Mendelegasikan tugas server ke klien atau perantara, seperti indeks pencarian dan cache. Mendelegasikan tugas seperti mengurutkan data, memfilter data, atau tampilan penyajian. Saat Anda membongkar tugas-tugas ini, Anda mengurangi beban kerja di server Anda dan meningkatkan performa.

Optimalkan jaringan. Untuk mengoptimalkan jaringan beban kerja untuk performa, konfigurasikan dan sesuaikan infrastruktur jaringan. Pastikan bahwa beban kerja dapat beroperasi pada tingkat efisiensi tertinggi.

  • Protokol jaringan: Tingkatkan ke protokol modern seperti HTTP/2, yang memungkinkan beberapa permintaan dikirim melalui satu koneksi. Protokol modern mengurangi overhead pembuatan koneksi baru.

    Tradeoff: Protokol modern mungkin mengecualikan klien yang lebih lama.

  • Obrolan jaringan: Permintaan jaringan batch bersama-sama untuk mengurangi jumlah permintaan. Alih-alih membuat beberapa permintaan kecil, gabungkan menjadi permintaan yang lebih besar untuk mengurangi overhead jaringan.

  • Kueri database: Pastikan kueri database hanya mengambil informasi yang diperlukan. Hindari mengambil sejumlah besar data yang tidak perlu, yang dapat menyebabkan peningkatan lalu lintas jaringan dan performa lambat.

  • Data statis: Menggunakan jaringan pengiriman konten untuk menyimpan konten statis yang sering diakses yang dekat dengan pengguna. Saat Anda menyimpan data, data tersebut tidak harus melakukan perjalanan jarak jauh. Penembolokan meningkatkan waktu respons dan mengurangi lalu lintas jaringan.

  • Pengumpulan log: Kumpulkan dan simpan hanya data log yang diperlukan untuk mendukung kebutuhan Anda. Konfigurasikan aturan pengumpulan data dan terapkan pertimbangan desain untuk mengoptimalkan biaya Analitik Log Anda.

  • Kompresi data: Kompres dan bundel konten HTTP dan data file untuk memungkinkan transmisi cepat antara klien dan server. Pemadatan menyusutkan data yang dikembalikan halaman atau API dan dikirim kembali ke browser atau aplikasi klien. Pemadatan mengoptimalkan lalu lintas jaringan, yang dapat mempercepat komunikasi aplikasi.

    Tradeoff: Pemadatan menambahkan pemrosesan sisi server dan sisi klien. Aplikasi harus mengompresi, mengirim, dan mendekompresi data. Komunikasi multicast, atau komunikasi ke beberapa penerima, dapat membuat overhead dekompresi. Anda perlu menguji dan mengukur variasi performa sebelum dan sesudah menerapkan kompresi data untuk menentukan apakah itu cocok untuk beban kerja Anda. Untuk informasi selengkapnya, lihat Kompresi respons di ASP.NET Core.

Fasilitasi Azure

Kode instrumentasi: Azure Monitor Application Insights mendukung instrumentasi otomatis (autoinstrumentasi) dan instrumentasi manual kode aplikasi. Autoinstrumentasi memungkinkan pengumpulan telemetri tanpa menyentuh kode aplikasi. Instrumentasi manual memerlukan perubahan kode untuk mengimplementasikan Application Insights atau OpenTelemetry API. Anda dapat menggunakan Application Insights Profiler untuk membantu mengoptimalkan jalur panas.

Mengoptimalkan logika kode: Azure menawarkan SDK dan pustaka untuk berbagai bahasa pemrograman untuk berinteraksi dengan layanan Azure. Gunakan SDK untuk menyederhanakan interaksi antara aplikasi dan sumber daya Azure. SDK menyediakan interaksi optimal dengan layanan Azure, yang mengurangi latensi dan meningkatkan efisiensi.

Mengoptimalkan manajemen memori: Gunakan fitur deteksi cerdas Application Insights untuk menganalisis konsumsi memori dan membantu mengidentifikasi dan mengatasi kebocoran memori.

Azure App Service memiliki fitur pengumpulan dan analisis pembuatan profiler dan cadangan memori. Fitur App Service autohealing dapat secara otomatis mengambil cadangan memori dan jejak profil aplikasi .NET dan Java.

Menggunakan konkurensi dan paralelisme: Layanan Azure yang berbeda memberikan dukungan unik untuk konkurensi, seperti Azure Cosmos DB, Azure Functions dan penyimpanan Blob. Untuk paralelisme, layanan AKS mendukung penyebaran aplikasi dalam kontainer, yang meningkatkan pemrosesan paralel.

Azure Batch adalah layanan penjadwalan pekerjaan berbasis cloud yang dapat Anda gunakan untuk mengaktifkan komputasi paralel dan performa tinggi tanpa perlu penyiapan infrastruktur. Untuk informasi selengkapnya, lihat Pekerjaan latar belakang.

Mengoptimalkan performa infrastruktur: Menerapkan templat Azure Resource Manager untuk menentukan dan menyebarkan infrastruktur dengan menggunakan kode. Gunakan templat ini untuk menerapkan penyebaran sumber daya yang efisien, dapat diulang, dan konsisten. Azure Policy menyediakan kemampuan tata kelola untuk memastikan bahwa penyebaran sumber daya mematuhi praktik dan standar terbaik organisasi.

Untuk pemrograman asinkron, gunakan layanan antrean yang dapat diskalakan, seperti Azure Queue Storage dan Azure Service Bus, untuk memfasilitasi pemrograman asinkron. Anda dapat mengantre tugas dan memprosesnya secara independen. Untuk mendukung operasi asinkron, Marketplace Azure menawarkan antrean dan alat pihak ketiga yang dapat Anda integrasikan dengan layanan Azure.

Daftar periksa Efisiensi Performa

Lihat serangkaian rekomendasi lengkap.