Bagikan melalui


Rekomendasi untuk mengoptimalkan biaya kode

Berlaku untuk rekomendasi daftar periksa Pengoptimalan Biaya Azure Well-Architected Framework ini:

CO:11 Optimalkan biaya kode. Evaluasi dan ubah kode untuk memenuhi persyaratan fungsional dan nonfungsi dengan sumber daya yang lebih sedikit atau lebih murah.

Panduan ini menjelaskan rekomendasi untuk mengoptimalkan biaya kode. Pengoptimalan kode adalah proses meningkatkan efisiensi, performa, dan efektivitas biaya kode aplikasi. Pengoptimalan kode yang efektif melibatkan pembuatan perubahan pada kode untuk mengurangi konsumsi sumber daya, meminimalkan waktu eksekusi, dan meningkatkan performa keseluruhan.

Dengan mengoptimalkan kode, Anda dapat mengidentifikasi dan menghilangkan inefisiensi yang dapat menyebabkan peningkatan konsumsi sumber daya dan biaya yang lebih tinggi. Anda dapat mengurangi waktu pemrosesan, penggunaan memori, dan overhead jaringan, yang dapat menyebabkan aplikasi yang lebih cepat dan lebih responsif. Peningkatan performa meningkatkan pengalaman pengguna dan memungkinkan sistem Anda menangani beban kerja yang lebih besar secara efisien.

Definisi

Istilah Definisi
Instrumentasi kode Praktik menambahkan cuplikan kode atau pustaka ke kode yang mengumpulkan data dan memantau performa kode selama runtime.
Konkurensi Eksekusi beberapa proses secara bersamaan.
Serialisasi data Proses konversi objek data menjadi format yang dapat disimpan atau ditransmisikan lalu rekonstruksi kembali ke bentuk aslinya saat diperlukan.
Jalur panas Bagian penting atau sering menjalankan program yang membutuhkan performa tinggi dan latensi rendah.

Strategi desain utama

Kode pengoptimalan biaya berarti meningkatkan kode untuk mencapai fungsionalitas yang sama dengan lebih sedikit sumber daya per instans, seperti siklus CPU, memori, dan penyimpanan. Dengan mengurangi konsumsi sumber daya, Anda dapat menghemat uang saat aplikasi menangani data dalam volume besar atau mengalami beban lalu lintas yang tinggi.

Peningkatan kode paling efektif ketika Anda mengikuti upaya pengoptimalan biaya lainnya sekeliling penskalaan, rightsizing, redundansi, dan pembatasan. Setelah Anda mengurus elemen dasar ini, Anda dapat mempertimbangkan pengoptimalan kode.

Anda mungkin tidak tahu apakah Anda memiliki kode yang tidak efisien. Fitur tanpa server, skala otomatis, dan keandalan dapat menutupi inefisiensi kode. Strategi berikut dapat membantu Anda mengidentifikasi dan memperbaiki kode aplikasi yang biayanya lebih dari yang seharusnya.

Instrumen kode Anda

Kode instrumenting adalah praktik menambahkan cuplikan kode atau pustaka yang mengumpulkan data dan memantau performa kode selama runtime. Ini memungkinkan pengembang untuk mengumpulkan informasi tentang metrik utama, seperti konsumsi sumber daya (penggunaan CPU atau memori) dan waktu eksekusi. Dengan kode instrumenting, pengembang dapat memperoleh wawasan tentang jalur panas kode, mengidentifikasi hambatan performa, dan mengoptimalkan kode untuk efisiensi dan efektivitas biaya 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.

Mengotomatiskan sebanyak mungkin analisis kode ini. Gunakan alat dinamis dan statis untuk analisis kode 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 dan mengoptimalkan jalur panas

Dengan melengkapi kode, Anda dapat mengukur konsumsi sumber daya jalur kode. Pengukuran ini membantu Anda mengidentifikasi jalur panas. Jalur panas memiliki efek signifikan pada performa dan penggunaan sumber daya. Mereka adalah bagian penting atau sering menjalankan program yang membutuhkan performa tinggi dan latensi rendah.

Untuk mengidentifikasi jalur panas, pertimbangkan tugas-tugas ini:

  • Menganalisis data runtime: Mengumpulkan dan menganalisis data runtime 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 jalur kode. Pengukuran ini membantu mengidentifikasi hambatan dan area untuk perbaikan.

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

    Tinjau rekomendasi performa yang khusus untuk bahasa pemrograman yang sedang Anda kerjakan. Evaluasi kode Anda terhadap rekomendasi ini untuk mengidentifikasi area untuk peningkatan. Hapus operasi yang tidak perlu dalam jalur kode yang mungkin memengaruhi performa.

  • Menghapus panggilan fungsi yang tidak perlu: Tinjau kode Anda. Identifikasi fungsi apa pun yang tidak penting untuk fungsionalitas yang diinginkan dan mungkin berdampak negatif pada performa. Misalnya, jika panggilan fungsi melakukan validasi yang terjadi sebelumnya dalam kode, Anda dapat menghapus panggilan fungsi yang tidak perlu tersebut.

  • 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 kondisi: Menganalisis perulangan dan kondisi dalam kode Anda. Identifikasi perulangan atau kondisi yang tidak perlu yang dapat Anda hilangkan. Menyederhanakan dan mengoptimalkan struktur ini dapat meningkatkan performa kode Anda.

  • 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.

  • Minimalkan permintaan jaringan: Jika kode Anda membuat 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 alokasi memori yang berlebihan terjadi. 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 yang sesuai dan mengemas data secara efisien.

  • Menilai implementasi lintas pemotongan: Pertimbangkan efek implementasi lintas pemotongan, seperti middleware atau pemeriksaan token. Menilai apakah mereka berdampak negatif pada performa.

Tradeoff: Mengoptimalkan kode dan jalur panas memerlukan keahlian pengembang dalam mengidentifikasi inefisiensi kode. Individu yang sangat terampil ini mungkin perlu menghabiskan waktu untuk tugas lain.

Mengevaluasi penggunaan konkurensi

Mengevaluasi penggunaan konkurensi melibatkan penilaian apakah pemrosesan asinkron, multithreading, atau multiproses dapat memaksimalkan pemanfaatan sumber daya dan mengurangi pengeluaran. Dengan menggunakan pemrosesan asinkron, multithreading, atau multiproses, Anda dapat menangani lebih banyak tugas dengan sumber daya yang sama. Namun, sangat penting untuk memastikan implementasi yang tepat untuk menghindari lebih banyak overhead dan untuk menjaga efektivitas biaya.

Untuk mengevaluasi apakah menggunakan konkurensi cocok, Anda dapat mengikuti panduan berikut:

  • Pemrosesan asinkron: Pemrosesan asinkron memungkinkan eksekusi nonblocking. Misalnya, Anda dapat memulai proses lalu menjedanya untuk memungkinkan proses kedua selesai.

    Tentukan komponen kode atau operasi yang dapat Anda jalankan secara asinkron. Identifikasi bahasa pemrograman atau kerangka kerja yang Anda gunakan dan pahami model pemrograman asinkron yang didukungnya, seperti async/await di .NET atau janji di JavaScript.

    Restrukturisasi kode Anda untuk menggunakan konstruksi pemrograman asinkron dengan mengaktifkan eksekusi tugas nonblocking. Memisahkan operasi jangka panjang atau intensif I/O dari utas eksekusi utama dengan menggunakan metode asinkron atau panggilan balik. Gunakan API atau pustaka asinkron yang disediakan bahasa atau kerangka kerja pemrograman Anda untuk menangani alur kerja asinkron.

  • Multithreading: Dalam multithreading, Anda menjalankan beberapa utas dari satu proses secara bersamaan.

    Identifikasi bagian kode yang dapat Anda jalankan secara bersamaan dan independen. Baca dokumentasi atau panduan yang khusus untuk bahasa pemrograman atau kerangka kerja yang Anda gunakan untuk praktik terbaik multithreading. Buat beberapa utas atau kumpulan utas untuk menangani eksekusi tugas paralel.

    Terapkan mekanisme sinkronisasi, seperti kunci, mutex, atau semaphore, untuk memastikan keamanan utas dan mencegah kondisi balapan saat kode mengakses sumber daya bersama. Pertimbangkan untuk menggunakan abstraksi tingkat yang lebih tinggi, seperti kumpulan utas atau pustaka paralelisme berbasis tugas, untuk menyederhanakan pengelolaan beberapa utas dan menyederhanakan kontrol konkurensi.

  • Multiproses: Multiproses dapat membuat proses berjalan secara paralel. Ini dapat memberikan pemanfaatan yang lebih baik dari beberapa inti CPU daripada multithreading.

    Tentukan apakah beban kerja atau operasi dalam kode Anda meminjamkan diri untuk pemrosesan paralel. Identifikasi bahasa pemrograman atau kerangka kerja yang Anda gunakan dan jelajahi kemampuan multiproscessing-nya. Misalnya, pertimbangkan modul multiproscessing di Python atau aliran paralel di Java. Rancang kode Anda untuk membagi beban kerja menjadi beberapa tugas independen yang dapat diproses secara bersamaan.

    Gunakan API atau pustaka multiproses untuk membuat dan mengelola proses paralel. Distribusikan beban kerja di antara API atau pustaka ini. Untuk mengaktifkan koordinasi dan berbagi data di antara beberapa proses, terapkan mekanisme komunikasi seperti komunikasi antarproses (IPC), memori bersama, atau pengiriman pesan, tergantung pada bahasa atau kerangka kerja pemrograman Anda.

Menggunakan SDK yang tepat

Untuk pengoptimalan biaya, pilih SDK yang dirancang untuk mengoptimalkan penggunaan sumber daya dan meningkatkan performa. Penting untuk mengevaluasi fitur dan kemampuan setiap SDK. Pertimbangkan kompatibilitasnya dengan bahasa pemrograman dan lingkungan pengembangan Anda.

Berikut panduan untuk membantu memilih SDK terbaik untuk beban kerja Anda:

  • Melakukan pengujian performa: Bandingkan penggunaan sumber daya dan performa SDK melalui pengujian performa. Pilih SDK yang paling sesuai dengan kebutuhan Anda dalam hal pengoptimalan sumber daya dan peningkatan performa. Integrasikan SDK yang dipilih ke dalam basis kode Anda dengan mengikuti dokumentasi dan panduan yang disediakan.

  • Memantau penggunaan sumber daya dan mengoptimalkan kode: Memantau penggunaan sumber daya dengan SDK yang diimplementasikan. Kumpulkan wawasan dari pemantauan dan analisis untuk mengoptimalkan kode Anda.

Pilih sistem operasi yang tepat

Sebagian besar bahasa pengkodian dapat berjalan pada berbagai sistem operasi, jadi penting untuk mengevaluasi sistem operasi Anda terhadap alternatif yang lebih murah. Jika sistem operasi alternatif mendukung fungsionalitas yang sama atau serupa dengan biaya yang lebih murah, ada baiknya dipertimbangkan. Dengan memilih sistem operasi yang lebih murah, Anda berpotensi mengurangi biaya lisensi dan biaya infrastruktur.

Sistem operasi yang tepat dapat berkontribusi pada pengoptimalan biaya keseluruhan untuk beban kerja Anda. Untuk memilih sistem operasi yang tepat untuk beban kerja Anda, coba aktivitas berikut:

  • Mengevaluasi kebutuhan Anda: Pahami kebutuhan spesifik beban kerja Anda, termasuk bahasa dan kerangka kerja pengkodian yang Anda gunakan. Pertimbangkan dependensi atau integrasi apa pun dengan sistem lain.

  • Pertimbangkan kompatibilitas: Pastikan sistem operasi yang Anda pilih kompatibel dengan bahasa pengodean, kerangka kerja, dan pustaka atau alat pihak ketiga apa pun yang Anda gunakan. Periksa dokumentasi dan dukungan komunitas untuk sistem operasi untuk memastikan bahwa ia memiliki kompatibilitas yang baik dengan tumpukan teknologi Anda.

  • Menilai fungsionalitas: Tentukan apakah sistem operasi alternatif mendukung fungsionalitas yang sama atau serupa dengan sistem operasi Anda saat ini. Evaluasi apakah ia menyediakan fitur dan kemampuan yang diperlukan beban kerja Anda.

  • Membandingkan biaya: Bandingkan biaya yang terkait dengan sistem operasi. Pertimbangkan faktor-faktor seperti biaya lisensi, biaya dukungan, dan persyaratan infrastruktur. Cari alternatif yang lebih murah yang dapat memenuhi persyaratan beban kerja Anda tanpa mengorbankan fungsionalitas.

  • Pertimbangkan performa dan pengoptimalan: Mengevaluasi kemampuan performa dan pengoptimalan sistem operasi alternatif. Cari tolok ukur, studi kasus, atau perbandingan performa untuk memahami performanya dalam skenario dunia nyata.

  • Tinjau keamanan dan stabilitas: Menilai keamanan dan stabilitas sistem operasi alternatif. Cari pembaruan keamanan, patch, dan dukungan komunitas untuk memastikan bahwa sistem operasi secara aktif dipertahankan dan secara keseluruhan aman dan stabil.

  • Pertimbangkan dukungan vendor: Mengevaluasi tingkat dukungan vendor yang tersedia untuk sistem operasi alternatif. Periksa apakah ada saluran dukungan resmi, dokumentasi, dan komunitas pengguna yang dapat memberikan bantuan jika Anda membutuhkannya.

Mengoptimalkan traversal jaringan

Mengoptimalkan traversal jaringan adalah tentang meminimalkan lalu lintas jaringan antar komponen beban kerja. Transfer data sering kali memiliki biaya terkait. Dengan meminimalkan lalu lintas jaringan, Anda dapat mengurangi jumlah data yang perlu ditransfer sambil menurunkan biaya.

Analisis beban kerja Anda dan identifikasi transfer data yang tidak perlu antar komponen. Hindari mentransfer data yang berlebihan atau duplikat, dan hanya mengirimkan informasi penting. Misalnya, jika komponen berulang kali meminta data yang sama dari komponen lain, komponen tersebut adalah kandidat untuk pengoptimalan. Anda dapat merefaktor kode Anda untuk mengurangi panggilan yang tidak perlu atau ke permintaan batch, meminimalkan data yang ditransfer. Aplikasi mungkin mengirim seluruh objek atau struktur data ketika hanya beberapa bidang yang diperlukan. Dengan mengoptimalkan kode untuk hanya mengirim data yang diperlukan, Anda meminimalkan ukuran setiap transfer data.

Mengoptimalkan protokol jaringan

Protokol jaringan memainkan peran penting dalam efisiensi komunikasi jaringan. Dengan mengoptimalkan protokol jaringan, Anda dapat meningkatkan efisiensi transfer data secara keseluruhan dan mengurangi konsumsi sumber daya.

Pertimbangkan saran ini:

  • Memilih protokol yang efisien: Pilih protokol yang dikenal karena efisiensinya dalam hal kecepatan transfer data dan meminimalkan overhead. Misalnya, pertimbangkan untuk menggunakan protokol seperti HTTP/2 melalui HTTP/1.1. Protokol ini dirancang untuk meningkatkan performa dengan mengurangi latensi dan mengoptimalkan transfer data. Gunakan pustaka dan kerangka kerja di aplikasi Anda untuk menggunakan protokol ini.

  • Pemadatan dukungan: Terapkan mekanisme kompresi dalam protokol jaringan Anda untuk mengurangi ukuran data yang ditransfer. Pemadatan dapat secara signifikan mengurangi jumlah data yang dikirimkan melalui jaringan, yang mengarah ke peningkatan performa dan pengurangan penggunaan bandwidth. Kompresi sisi server biasanya diaktifkan dalam kode aplikasi atau konfigurasi server.

  • Menggunakan pengumpulan koneksi: Pengumpulan koneksi memungkinkan penggunaan kembali koneksi jaringan yang dibuat untuk mengurangi overhead pembuatan koneksi baru untuk setiap permintaan. Pengumpulan koneksi dapat meningkatkan efisiensi komunikasi jaringan dengan menghindari overhead pengaturan koneksi dan teardown. Pilih pustaka atau kerangka kerja kumpulan koneksi dan konfigurasikan untuk memenuhi kebutuhan beban kerja.

  • Menerapkan pengoptimalan lainnya: Jelajahi pengoptimalan lain yang khusus untuk beban kerja dan lingkungan jaringan Anda. Misalnya, Anda dapat menggunakan penembolokan konten, penyeimbangan beban, dan pembentukan lalu lintas untuk lebih mengoptimalkan traversal jaringan.

Meminimalkan overhead jaringan

Minimalkan jumlah lalu lintas jaringan dan transfer data antar komponen beban kerja Anda. Dengan mengurangi overhead jaringan, Anda dapat menurunkan biaya yang terkait dengan keluar dan masuknya data serta meningkatkan performa jaringan secara keseluruhan.

Pertimbangkan teknik-teknik ini:

  • Mengurangi permintaan redundan: Analisis kode untuk mengidentifikasi permintaan duplikat atau yang tidak perlu. Alih-alih membuat beberapa permintaan untuk data yang sama, Anda dapat memodifikasi kode untuk mengambil data sekali dan menggunakannya kembali sesuai kebutuhan.

  • Optimalkan ukuran data: Tinjau data yang dikirimkan antar komponen atau sistem, dan cari peluang untuk meminimalkan ukurannya. Pertimbangkan teknik seperti mengompresi data sebelum transmisi atau menggunakan format data yang lebih efisien. Dengan mengurangi ukuran data, Anda dapat mengurangi penggunaan bandwidth jaringan dan meningkatkan efisiensi keseluruhan.

  • Permintaan batch: Jika berlaku, pertimbangkan untuk mengumpulkan beberapa permintaan yang lebih kecil ke dalam satu permintaan yang lebih besar. Batching mengurangi overhead pembuatan beberapa koneksi dan mengurangi transmisi data secara keseluruhan.

  • Gunakan serialisasi data: Serialisasi data adalah proses mengonversi struktur atau objek data kompleks menjadi format yang dapat dengan mudah dikirimkan melalui jaringan atau disimpan dalam sistem penyimpanan persisten. Strategi ini melibatkan mewakili data dalam format standar, sehingga data dapat ditransmisikan, diproses, dan direkonstruksi secara efisien di ujung penerima.

    Pilih format serialisasi yang ringkas, cepat, dan cocok untuk persyaratan beban kerja Anda.

    Format serialisasi Deskripsi
    Protocol Buffers (protobuf) Format serialisasi biner yang menawarkan pengodean dan pendekodean data terstruktur yang efisien. Ini menggunakan file definisi yang ditik untuk menentukan struktur pesan.
    MessagePack Format serialisasi biner untuk transmisi ringkas melalui kawat. Ini mendukung berbagai jenis data dan memberikan performa serialisasi dan deserialisasi yang cepat.
    JavaScript Object Notation (JSON) Format serialisasi data yang banyak digunakan yang dapat dibaca manusia dan mudah dikerjakan. JSON berbasis teks dan memiliki dukungan lintas platform yang luas.
    Biner JSON (BSON) Format serialisasi biner yang mirip dengan JSON tetapi dirancang untuk serialisasi dan deserialisasi yang efisien. BSON menyertakan jenis data tambahan yang tidak tersedia di JSON.

    Bergantung pada format serialisasi, Anda perlu menerapkan logika untuk membuat serialisasi objek atau struktur data ke dalam format yang dipilih dan mendeserialisasinya kembali ke bentuk aslinya. Anda dapat menerapkan logika ini dengan menggunakan pustaka atau kerangka kerja yang menyediakan kemampuan serialisasi untuk format tersebut.

Mengoptimalkan akses data

Mengoptimalkan akses data mengacu pada penyederhanaan pola dan teknik untuk mengambil dan menyimpan data, untuk meminimalkan operasi yang tidak perlu. Saat mengoptimalkan akses data, Anda dapat menghemat biaya dengan mengurangi penggunaan sumber daya, mengurangi pengambilan data, dan meningkatkan efisiensi pemrosesan data. Pertimbangkan teknik seperti penembolokan data, kueri data yang efisien, dan pemadatan data.

Menggunakan mekanisme penembolokan

Penembolokan melibatkan penyimpanan data yang sering diakses lebih dekat ke komponen yang memerlukannya. Teknik ini mengurangi kebutuhan akan traversal jaringan dengan melayani data dari cache alih-alih mengambilnya melalui jaringan.

Pertimbangkan mekanisme penembolokan ini:

  • Gunakan cache eksternal: Salah satu solusi penembolokan populer adalah jaringan pengiriman konten. Ini membantu meminimalkan latensi dan mengurangi traversal jaringan dengan penembolokan konten statis lebih dekat dengan konsumen.

  • Menyetel parameter penembolokan: Mengonfigurasi parameter penembolokan, seperti time to live (TTL), untuk mengoptimalkan manfaat penembolokan sambil meminimalkan potensi kelemahan. Mengatur TTL yang sesuai memastikan bahwa data cache tetap segar dan relevan.

  • Gunakan penembolokan dalam memori: Selain solusi penembolokan eksternal, pertimbangkan untuk menerapkan penembolokan dalam memori di aplikasi Anda. Penembolokan dalam memori dapat membantu menggunakan sumber daya komputasi diam dan meningkatkan kepadatan komputasi sumber daya yang dialokasikan.

Mengoptimalkan lalu lintas database

Anda dapat meningkatkan efisiensi komunikasi aplikasi ke database. Berikut adalah beberapa pertimbangan dan teknik utama untuk mengoptimalkan lalu lintas database:

  • Membuat indeks: Pengindeksan adalah proses pembuatan struktur data yang meningkatkan kecepatan pengambilan data. Dengan membuat indeks pada kolom yang sering dikueri, Anda dapat secara signifikan mengurangi waktu yang diperlukan untuk menjalankan kueri. Misalnya, jika Anda memiliki tabel pengguna dengan kolom untuk nama pengguna, Anda dapat membuat indeks pada kolom nama pengguna untuk mempercepat kueri yang mencari nama pengguna tertentu.

    Identifikasi kolom yang paling sering diakses dan buat indeks pada kolom tersebut untuk mempercepat pengambilan data. Analisis dan optimalkan indeks yang ada secara teratur untuk memastikan bahwa indeks tersebut masih efektif. Hindari pengindeksan berlebihan karena dapat berdampak negatif pada operasi penyisipan dan pembaruan.

  • Optimalkan kueri: Desain kueri yang efisien dengan mempertimbangkan persyaratan data tertentu dan meminimalkan pengambilan data yang tidak perlu. Mulailah dengan menggunakan jenis gabungan yang sesuai (misalnya, gabungan dalam dan gabungan kiri), berdasarkan hubungan antar tabel. Gunakan teknik pengoptimalan kueri seperti petunjuk kueri, analisis rencana kueri, dan penulisan ulang kueri untuk meningkatkan performa.

  • Hasil kueri cache: Anda dapat menyimpan hasil kueri yang sering dijalankan dalam memori atau cache. Eksekusi berikutnya dari kueri yang sama kemudian dapat dilayani dari cache, yang menghilangkan kebutuhan akan operasi database yang mahal.

  • Gunakan kerangka kerja pemetaan relasional objek (ORM): Gunakan fitur ORM seperti pemuatan malas, penembolokan, dan pemrosesan batch untuk mengoptimalkan pengambilan data dan meminimalkan perjalanan pulang pergi database. Gunakan kerangka kerja ORM seperti Entity Framework untuk C# atau Hibernasi untuk Java.

  • Optimalkan prosedur tersimpan: Menganalisis dan mengoptimalkan logika dan performa prosedur tersimpan. Tujuannya adalah untuk menghindari komputasi yang tidak perlu atau kueri berlebihan dalam prosedur tersimpan. Optimalkan penggunaan tabel sementara, variabel, dan kursor untuk meminimalkan konsumsi sumber daya.

Menata data

Mengatur data untuk akses dan pengambilan yang efisien melibatkan penataan dan penyimpanan data dengan cara yang memaksimalkan performa dan meminimalkan konsumsi sumber daya. Ini dapat meningkatkan waktu respons kueri, mengurangi biaya transfer data, dan mengoptimalkan pemanfaatan penyimpanan.

Berikut adalah beberapa teknik untuk mengatur data secara efisien:

  • Partisi: Partisi melibatkan pembagian himpunan data besar menjadi subset yang lebih kecil dan lebih mudah dikelola yang disebut partisi. Anda dapat menyimpan setiap partisi secara terpisah untuk memungkinkan pemrosesan paralel dan peningkatan performa kueri. Misalnya, Anda dapat mempartisi data berdasarkan rentang nilai tertentu atau dengan mendistribusikan data di seluruh server. Teknik ini dapat meningkatkan skalabilitas, mengurangi ketidakcocokan, dan mengoptimalkan pemanfaatan sumber daya.

  • Shard: Sharding adalah teknik membalurkan data secara horizontal di beberapa instans atau server database. Setiap pecahan berisi subset data, dan kueri dapat diproses secara paralel di seluruh pecahan ini. Pemecahan dapat meningkatkan performa kueri dengan mendistribusikan beban kerja dan mengurangi jumlah data yang diakses setiap kueri.

  • Pemadatan: Kompresi data melibatkan pengurangan ukuran data untuk meminimalkan persyaratan penyimpanan dan meningkatkan efisiensi transfer data. Karena data terkompresi membutuhkan lebih sedikit ruang disk, data tersebut memungkinkan penghematan biaya penyimpanan. Data terkompresi juga dapat ditransfer lebih cepat melalui jaringan dan mengurangi biaya transfer data.

Misalnya, pertimbangkan skenario di mana Anda memiliki himpunan data informasi pelanggan yang besar. Dengan mempartisi data berdasarkan wilayah pelanggan atau demografi, Anda dapat mendistribusikan beban kerja di beberapa server dan meningkatkan performa kueri. Anda juga dapat memadatkan data untuk mengurangi biaya penyimpanan dan meningkatkan efisiensi transfer data.

Optimalkan arsitektur

Evaluasi arsitektur beban kerja Anda untuk mengidentifikasi peluang pengoptimalan sumber daya. Tujuannya adalah untuk menggunakan layanan yang tepat untuk pekerjaan yang tepat.

Untuk mencapai tujuan ini, Anda mungkin perlu mendesain ulang bagian arsitektur untuk menggunakan lebih sedikit sumber daya. Pertimbangkan layanan tanpa server atau terkelola, dan optimalkan alokasi sumber daya. Dengan mengoptimalkan arsitektur, Anda dapat memenuhi persyaratan fungsional dan nonfungsi sambil mengonsumsi lebih sedikit sumber daya per instans.

Menggunakan pola desain

Pola desain adalah solusi yang dapat digunakan kembali yang membantu pengembang menyelesaikan masalah desain berulang. Mereka menyediakan pendekatan terstruktur untuk merancang kode yang efisien, dapat dipertahankan, dan dapat diskalakan.

Pola desain membantu mengoptimalkan penggunaan sumber daya sistem dengan memberikan pedoman untuk alokasi dan manajemen sumber daya yang efisien. Misalnya, pola Circuit Breaker membantu mencegah konsumsi sumber daya yang tidak perlu dengan menyediakan mekanisme untuk menangani dan memulihkan dari kegagalan dengan cara yang terkontrol.

Pola desain dapat membantu mengoptimalkan kode biaya dengan cara berikut:

  • Pengurangan waktu pengembangan: Pola desain memberikan solusi yang terbukti untuk masalah desain umum, yang dapat menghemat waktu pengembangan. Dengan mengikuti pola yang ditetapkan, pengembang dapat menghindari pekerjaan berulang dan fokus pada penerapan persyaratan spesifik aplikasi mereka.

  • Peningkatan pemeliharaan: Pola desain mempromosikan kode modular dan terstruktur yang lebih mudah dipahami, dimodifikasi, dan dipertahankan. Mereka dapat menyebabkan penghematan biaya dalam hal pengurangan penelusuran kesalahan dan upaya pemeliharaan.

  • Skalabilitas dan performa: Pola desain membantu dalam merancang sistem yang dapat diskalakan dan berkinerja. Pola seperti pola Cache-Aside dapat meningkatkan performa dengan penembolokan data yang sering diakses untuk mengurangi kebutuhan akan komputasi yang mahal atau panggilan eksternal.

Untuk menerapkan pola desain, pengembang perlu memahami prinsip dan pedoman setiap pola dan menerapkannya dalam kode. Pertimbangkan untuk mengidentifikasi pola yang sesuai untuk masalah, memahami struktur dan komponennya, dan mengintegrasikan pola ke dalam desain keseluruhan.

Berbagai sumber daya tersedia, seperti dokumentasi, tutorial, dan kode sampel. Sumber daya ini dapat membantu pengembang mempelajari dan menerapkan pola desain secara efektif.

Mengubah konfigurasi

Tinjau dan perbarui konfigurasi beban kerja Anda secara teratur untuk memastikan bahwa konfigurasi tersebut selaras dengan persyaratan Anda saat ini. Pertimbangkan untuk menyesuaikan ukuran sumber daya dan pengaturan konfigurasi berdasarkan tuntutan beban kerja. Dengan mengoptimalkan konfigurasi, Anda dapat mengalokasikan sumber daya secara efektif dan menghindari provisi berlebih untuk menghemat biaya.

Arsitektur refaktor

Evaluasi arsitektur beban kerja Anda dan identifikasi peluang untuk merefaktor atau mendesain ulang komponen untuk mengoptimalkan konsumsi sumber daya. Pertimbangkan teknik seperti mengadopsi arsitektur layanan mikro, menerapkan pola Circuit Breaker, dan menggunakan komputasi tanpa server. Dengan mengoptimalkan arsitektur, Anda dapat mencapai pemanfaatan sumber daya dan efisiensi biaya yang lebih baik.

Mengubah ukuran sumber daya

Terus memantau dan menganalisis pemanfaatan sumber daya beban kerja Anda. Berdasarkan pola dan tren yang diamati, sesuaikan ukuran sumber daya dan pengaturan konfigurasi untuk mengoptimalkan konsumsi sumber daya.

Pertimbangkan untuk menyesuaikan komputer virtual, menyesuaikan alokasi memori, dan mengoptimalkan kapasitas penyimpanan. Dengan menyesuaikan sumber daya, Anda dapat menghindari biaya yang tidak perlu yang terkait dengan kurangnya penggunaan atau provisi berlebih.

Tradeoff: Pengerjaan ulang kode dan arsitektur mungkin tidak sesuai dengan jadwal proyek saat ini dan dapat menyebabkan jadwal dan slippage biaya.

Fasilitasi Azure

Kode instrumenting: Azure menyediakan alat pemantauan dan pengelogan seperti Azure Monitor, Application Insights, dan Log Analytics. Anda dapat menggunakan alat-alat ini untuk melacak dan menganalisis performa dan perilaku kode Anda secara real time.

Mengidentifikasi jalur panas dan optimalkan: Application Insights dan Application Insights Profiler membantu mengidentifikasi dan mengoptimalkan jalur panas dalam kode Anda dengan menganalisis waktu eksekusi dan penggunaan sumber daya. Anda dapat meminimalkan alokasi memori yang tidak perlu dan mengoptimalkan penggunaan memori dengan Profiler.

Menggunakan SDK yang tepat: Azure menawarkan SDK dalam beberapa bahasa pemrograman, dioptimalkan untuk performa dan kemudahan penggunaan. SDK ini menyediakan fungsi dan pustaka bawaan yang berinteraksi dengan layanan Azure untuk mengurangi kebutuhan implementasi kustom.

Mengoptimalkan traversal jaringan: Berbagai layanan Azure mendukung protokol jaringan berkecepatan tinggi seperti HTTP/2 dan QUIC untuk komunikasi yang efisien antara layanan dan aplikasi.

Layanan Azure, seperti Azure Database for PostgreSQL - Server Fleksibel, mendukung pengumpulan koneksi.

Azure mendukung pemrosesan batch di berbagai layanan, sehingga Anda dapat mengelompokkan beberapa operasi bersama-sama dan menjalankannya dalam satu permintaan. Pemrosesan batch dapat secara signifikan meningkatkan efisiensi dan mengurangi overhead jaringan.

Mengenai serialisasi data, Azure mendukung berbagai format serialisasi, termasuk JSON dan XML. Pilih format serialisasi yang sesuai berdasarkan ukuran data, persyaratan performa, dan kebutuhan interoperabilitas.

Mengoptimalkan akses data: Azure menyediakan layanan penembolokan seperti Azure Cache for Redis. Anda dapat menggunakan penembolokan untuk menyimpan data yang sering diakses lebih dekat ke aplikasi, yang menghasilkan pengambilan yang lebih cepat dan mengurangi beban back-end.

  • Pengindeksan dan pengoptimalan kueri: Layanan Azure seperti Azure SQL Database dan Azure Cosmos DB menyediakan kemampuan pengindeksan untuk mengoptimalkan performa kueri. Dengan memilih strategi pengindeksan yang tepat dan mengoptimalkan kueri, Anda dapat meningkatkan efisiensi pengambilan data secara keseluruhan.

  • Pemetaan relasional objek (ORM): Azure mendukung kerangka kerja ORM seperti Entity Framework. Kerangka kerja ini menyederhanakan akses data dan pemetaan antara kode berorientasi objek dan database relasional atau NoSQL.

  • Mengoptimalkan prosedur tersimpan: Anda dapat menggunakan layanan Azure seperti Azure SQL Database untuk membuat dan mengoptimalkan prosedur tersimpan. Prosedur tersimpan dapat meningkatkan performa dengan mengurangi perjalanan pulang pergi jaringan dan pernyataan SQL yang telah dikompilasi sebelumnya.

  • Pemartisian dan pemecahan: Azure menawarkan kemampuan pemartisian dan pemecahan dalam layanan seperti Azure Cosmos DB dan Azure SQL Database. Anda dapat menggunakan partisi untuk mendistribusikan data di beberapa simpul untuk skalabilitas dan pengoptimalan performa.

  • Memadatkan data: Layanan Azure mendukung teknik kompresi data seperti GZIP dan DEFLATE.

Mengoptimalkan arsitektur: Azure menyediakan panduan arsitektur dan pola desain untuk merancang aplikasi yang dapat diskalakan, tangguh, dan berkinerja. Untuk informasi selengkapnya, lihat Pola desain.

Daftar periksa Pengoptimalan Biaya

Lihat kumpulan rekomendasi lengkap.