Mengembangkan software hemat energi

Last reviewed 2026-01-28 UTC

Prinsip dalam pilar keberlanjutan Google Cloud Framework yang Dirancang dengan Baik ini memberikan rekomendasi untuk menulis software yang meminimalkan konsumsi energi dan beban server.

Ringkasan prinsip

Jika Anda mengikuti praktik terbaik untuk membangun aplikasi cloud, Anda akan mengoptimalkan energi yang digunakan oleh resource infrastruktur cloud: AI, komputasi, penyimpanan, dan jaringan. Anda juga membantu mengurangi kebutuhan air pusat data dan energi yang dikonsumsi perangkat pengguna akhir saat mengakses aplikasi Anda.

Untuk membangun software yang hemat energi, Anda perlu mengintegrasikan pertimbangan keberlanjutan di seluruh siklus proses software, mulai dari desain dan pengembangan hingga deployment, pemeliharaan, dan pengarsipan. Untuk panduan mendetail tentang penggunaan AI untuk membangun software yang meminimalkan dampak lingkungan dari beban kerja cloud, lihat ebook Membangun Software Secara Berkelanjutan. Google Cloud

Rekomendasi

Rekomendasi dalam bagian ini dikelompokkan ke dalam area fokus berikut:

  • Minimalkan pekerjaan komputasi: Lebih memilih kode yang ramping dan terfokus yang menghilangkan logika yang berlebihan dan menghindari komputasi yang tidak perlu atau penambahan fitur yang tidak perlu.
  • Gunakan algoritma dan struktur data yang efisien: Pilih algoritma yang efisien waktu dan efisien memori yang mengurangi beban CPU dan meminimalkan penggunaan memori.
  • Mengoptimalkan operasi komputasi dan data: Kembangkan dengan tujuan menggunakan semua resource yang tersedia secara efisien, termasuk CPU, memori, I/O disk, dan jaringan. Misalnya, saat mengganti loop sibuk dengan logika berbasis peristiwa, Anda akan menghindari polling yang tidak perlu.
  • Terapkan pengoptimalan frontend: Untuk mengurangi daya yang dikonsumsi oleh perangkat pengguna akhir, gunakan strategi seperti minimisasi, kompresi, dan pemuatan lambat untuk gambar dan aset.

Meminimalkan pekerjaan komputasi

Untuk menulis software yang hemat energi, Anda perlu meminimalkan total jumlah pekerjaan komputasi yang dilakukan aplikasi Anda. Setiap instruksi yang tidak perlu, loop yang berlebihan, dan fitur tambahan mengonsumsi energi, waktu, dan sumber daya. Gunakan rekomendasi berikut untuk membuat software yang melakukan komputasi minimal.

Menulis kode yang efisien dan terfokus

Untuk menulis kode minimal yang penting untuk mencapai hasil yang diperlukan, gunakan pendekatan berikut:

  • Hilangkan logika yang berlebihan dan penambahan fitur yang tidak perlu: Tulis kode yang hanya menjalankan fungsi penting. Hindari fitur yang meningkatkan overhead dan kompleksitas komputasi, tetapi tidak memberikan nilai yang terukur bagi pengguna Anda.
  • Refaktorisasi: Untuk meningkatkan efisiensi energi dari waktu ke waktu, audit aplikasi Anda secara rutin untuk mengidentifikasi fitur yang tidak digunakan. Lakukan tindakan untuk menghapus atau memfaktorkan ulang fitur tersebut sebagaimana mestinya.
  • Hindari operasi yang tidak perlu: Jangan menghitung nilai atau menjalankan tindakan hingga hasilnya diperlukan. Gunakan teknik seperti evaluasi lambat, yang menunda komputasi hingga komponen dependen dalam aplikasi memerlukan output.
  • Prioritaskan keterbacaan dan penggunaan ulang kode: Tulis kode yang mudah dibaca dan dapat digunakan kembali. Pendekatan ini meminimalkan duplikasi dan mengikuti prinsip jangan mengulangi diri sendiri (DRY), yang dapat membantu mengurangi emisi karbon dari pengembangan dan pemeliharaan software.

Menggunakan backend caching

Caching backend memastikan bahwa aplikasi tidak melakukan pekerjaan yang sama berulang kali. Rasio cache ditemukan yang tinggi akan menghasilkan pengurangan konsumsi energi per permintaan yang hampir linear. Untuk menerapkan caching backend, gunakan teknik berikut:

  • Cache data yang sering digunakan: Simpan data yang sering diakses di lokasi penyimpanan sementara berperforma tinggi. Misalnya, gunakan layanan penyimpanan cache dalam memori seperti Memorystore. Saat aplikasi mengambil data dari cache, volume kueri database dan operasi I/O disk akan berkurang. Akibatnya, beban pada database dan server di backend berkurang.
  • Respons API cache: Untuk menghindari panggilan jaringan yang berlebihan dan mahal, simpan cache hasil permintaan API yang sering.
  • Prioritaskan caching dalam memori: Untuk menghilangkan operasi I/O disk yang lambat dan kueri database yang kompleks, simpan data dalam memori berkecepatan tinggi (RAM).
  • Pilih strategi penulisan cache yang sesuai:
    • Strategi tulis-tembus memastikan bahwa data ditulis secara sinkron ke cache dan penyimpanan persisten. Strategi ini meningkatkan kemungkinan cache hit, sehingga penyimpanan persisten menerima lebih sedikit permintaan baca yang intensif energi.
    • Strategi tulis balik (tulis di belakang) meningkatkan performa aplikasi yang banyak melakukan operasi tulis. Data ditulis ke cache terlebih dahulu, dan database diperbarui secara asinkron nanti. Strategi ini mengurangi beban penulisan langsung pada database yang lebih lambat.
  • Gunakan kebijakan pengusiran cerdas: Jaga agar cache tetap ramping dan efisien. Untuk menghapus data yang sudah tidak berlaku atau data yang kurang berguna dan memaksimalkan ruang yang tersedia untuk data yang sering diminta, gunakan kebijakan seperti time to live (TTL), least recently used (LRU), dan least frequently used (LFU).

Menggunakan algoritma dan struktur data yang efisien

Algoritma dan struktur data yang Anda pilih menentukan kompleksitas komputasi mentah software Anda. Saat Anda memilih algoritma dan struktur data yang sesuai, Anda akan meminimalkan jumlah siklus CPU dan operasi memori yang diperlukan untuk menyelesaikan tugas. Siklus CPU dan operasi memori yang lebih sedikit akan menghasilkan konsumsi energi yang lebih rendah.

Pilih algoritma untuk kompleksitas waktu yang optimal

Prioritaskan algoritma yang mencapai hasil yang diperlukan dalam waktu paling singkat. Pendekatan ini membantu mengurangi durasi penggunaan resource. Untuk memilih algoritma yang mengoptimalkan penggunaan resource, gunakan pendekatan berikut:

  • Fokus pada pengurangan kompleksitas: Untuk mengevaluasi kompleksitas, jangan hanya melihat metrik runtime, tetapi juga pertimbangkan kompleksitas teoretis algoritma. Misalnya, jika dibandingkan dengan pengurutan gelembung, pengurutan gabungan secara signifikan mengurangi beban komputasi dan konsumsi energi untuk set data besar.
  • Hindari pekerjaan yang berlebihan: Gunakan fungsi bawaan yang dioptimalkan dalam bahasa atau framework pemrograman yang Anda pilih. Fungsi ini sering kali diimplementasikan dalam bahasa tingkat yang lebih rendah dan lebih hemat energi seperti C atau C++, sehingga lebih dioptimalkan untuk hardware yang mendasarinya dibandingkan dengan fungsi yang dikodekan secara kustom.

Memilih struktur data untuk efisiensi

Struktur data yang Anda pilih menentukan kecepatan pengambilan, penyisipan, atau pemrosesan data. Kecepatan ini memengaruhi penggunaan CPU dan memori. Untuk memilih struktur data yang efisien, gunakan pendekatan berikut:

  • Optimalkan untuk penelusuran dan pengambilan: Untuk operasi umum seperti memeriksa apakah item ada atau mengambil nilai tertentu, pilih struktur data yang dioptimalkan untuk kecepatan. Misalnya, peta hash atau set hash memungkinkan pencarian waktu yang hampir konstan, yang merupakan pendekatan yang lebih hemat energi daripada menelusuri array secara linear.
  • Minimalkan jejak memori: Struktur data yang efisien membantu mengurangi jejak memori keseluruhan aplikasi. Pengurangan akses dan pengelolaan memori menghasilkan konsumsi daya yang lebih rendah. Selain itu, profil memori yang lebih ramping memungkinkan proses berjalan lebih efisien, sehingga Anda dapat menunda upgrade resource.
  • Gunakan struktur khusus: Gunakan struktur data yang dibuat khusus untuk masalah tertentu. Misalnya, gunakan struktur data trie untuk penelusuran awalan string yang cepat, dan gunakan antrean prioritas saat Anda hanya perlu mengakses nilai tertinggi atau terendah secara efisien.

Mengoptimalkan operasi komputasi dan data

Saat Anda mengembangkan software, berfokuslah pada penggunaan resource yang efisien dan proporsional di seluruh stack teknologi. Perlakukan CPU, memori, disk, dan jaringan sebagai resource terbatas dan bersama. Menyadari bahwa penggunaan resource yang efisien akan menghasilkan pengurangan biaya dan konsumsi energi yang nyata.

Mengoptimalkan pemakaian CPU dan waktu tunggu

Untuk meminimalkan waktu yang dihabiskan CPU dalam status aktif yang mengonsumsi energi tanpa melakukan pekerjaan yang berarti, gunakan pendekatan berikut:

  • Lebih memilih logika berbasis peristiwa daripada polling: Ganti loop sibuk atau pemeriksaan konstan (polling) yang intensif sumber daya dengan logika berbasis peristiwa. Arsitektur berbasis peristiwa memastikan bahwa komponen aplikasi beroperasi hanya saat dipicu oleh peristiwa yang relevan. Pendekatan ini memungkinkan pemrosesan sesuai permintaan, sehingga tidak perlu melakukan polling yang intensif resource.
  • Mencegah frekuensi tinggi yang konstan: Tulis kode yang tidak memaksa CPU untuk terus beroperasi pada frekuensi tertinggi. Untuk meminimalkan konsumsi energi, sistem yang tidak aktif harus dapat memasuki status daya rendah atau mode tidur.
  • Gunakan pemrosesan asinkron: Untuk mencegah thread dikunci selama waktu tunggu tidak ada aktivitas, gunakan pemrosesan asinkron. Pendekatan ini membebaskan resource dan menghasilkan pemanfaatan resource secara keseluruhan yang lebih tinggi.

Mengelola I/O disk dan memori secara efisien

Penggunaan memori dan disk yang tidak efisien menyebabkan pemrosesan yang tidak perlu dan peningkatan konsumsi daya. Untuk mengelola memori dan I/O secara efisien, gunakan teknik berikut:

  • Pengelolaan memori yang ketat: Ambil tindakan untuk secara proaktif melepaskan resource memori yang tidak digunakan. Hindari menyimpan objek besar di memori dalam jangka waktu yang lebih lama dari yang diperlukan. Pendekatan ini mencegah bottleneck performa dan mengurangi daya yang digunakan untuk akses memori.
  • Mengoptimalkan I/O disk: Mengurangi frekuensi interaksi baca dan tulis aplikasi Anda dengan resource penyimpanan persisten. Misalnya, gunakan buffer memori perantara untuk menyimpan data. Tulis data ke penyimpanan persisten pada interval tetap atau saat buffer mencapai ukuran tertentu.
  • Operasi batch: Gabungkan operasi disk kecil yang sering dilakukan menjadi operasi batch yang lebih sedikit dan lebih besar. Operasi batch mengonsumsi lebih sedikit energi daripada banyak transaksi kecil individual.
  • Gunakan kompresi: Kurangi jumlah data yang ditulis ke atau dibaca dari disk dengan menerapkan teknik kompresi data yang sesuai. Misalnya, untuk mengompresi data yang Anda simpan di Cloud Storage, Anda dapat menggunakan transcoding dekompresif.

Meminimalkan traffic jaringan

Resource jaringan mengonsumsi energi yang signifikan selama operasi transfer data. Untuk mengoptimalkan komunikasi jaringan, gunakan teknik berikut:

  • Minimalkan ukuran payload: Desain API dan aplikasi Anda untuk mentransfer hanya data yang diperlukan untuk permintaan. Hindari pengambilan atau menampilkan struktur JSON atau XML besar jika hanya beberapa kolom yang diperlukan. Pastikan struktur data yang ditampilkan ringkas.
  • Kurangi perjalanan pulang pergi: Untuk mengurangi jumlah perjalanan pulang pergi jaringan yang diperlukan untuk menyelesaikan tindakan pengguna, gunakan protokol yang lebih cerdas. Misalnya, lebih memilih HTTP/3 daripada HTTP/1.1, memilih GraphQL daripada REST, menggunakan protokol biner, dan menggabungkan panggilan API. Saat Anda mengurangi volume panggilan jaringan, Anda mengurangi konsumsi energi untuk server dan perangkat pengguna akhir.

Menerapkan pengoptimalan frontend

Pengoptimalan frontend meminimalkan data yang harus didownload dan diproses pengguna akhir, yang membantu mengurangi beban pada resource perangkat pengguna akhir.

Meminimalkan kode dan aset

Saat pengguna akhir perlu mendownload dan memproses resource yang lebih kecil dan terstruktur secara lebih efisien, perangkat mereka akan mengonsumsi lebih sedikit daya. Untuk meminimalkan volume download dan beban pemrosesan di perangkat pengguna akhir, gunakan teknik berikut:

  • Minimisasi dan kompresi: Untuk file JavaScript, CSS, dan HTML, hapus karakter yang tidak perlu seperti spasi dan komentar menggunakan alat minimisasi yang sesuai. Pastikan file seperti gambar dikompresi dan dioptimalkan. Anda dapat mengotomatiskan minimisasi dan kompresi aset web menggunakan pipeline CI/CD.
  • Pemuatan lambat: Muat gambar, video, dan aset tidak penting hanya saat benar-benar diperlukan, seperti saat elemen ini di-scroll ke dalam area tampilan halaman web. Pendekatan ini mengurangi volume transfer data awal dan beban pemrosesan pada perangkat pengguna akhir.
  • Paket JavaScript yang lebih kecil: Hapus kode yang tidak digunakan dari paket JavaScript Anda dengan menggunakan pemaket modul modern dan teknik seperti tree shaking. Pendekatan ini menghasilkan file yang lebih kecil yang dimuat lebih cepat dan menggunakan lebih sedikit resource server.
  • Caching browser: Gunakan header caching HTTP untuk menginstruksikan browser pengguna agar menyimpan aset statis secara lokal. Penyimpanan ke cache browser membantu mencegah download berulang dan traffic jaringan yang tidak perlu pada kunjungan berikutnya.

Memprioritaskan pengalaman pengguna (UX) yang ringan

Desain antarmuka pengguna Anda dapat memberikan dampak signifikan pada kompleksitas komputasi untuk merender konten frontend. Untuk membuat antarmuka frontend yang memberikan UX ringan, gunakan teknik berikut:

  • Rendering yang efisien: Hindari manipulasi Document Object Model (DOM) yang sering dan intensif sumber daya. Tulis kode yang meminimalkan kompleksitas rendering dan menghilangkan rendering ulang yang tidak perlu.
  • Pola desain ringan: Jika sesuai, pilih situs statis atau progressive web app (PWA). Situs dan aplikasi tersebut dimuat lebih cepat dan memerlukan lebih sedikit resource server.
  • Aksesibilitas dan performa: Situs yang responsif dan dimuat dengan cepat sering kali lebih berkelanjutan dan mudah diakses. Desain yang dioptimalkan dan tidak berantakan mengurangi resource yang digunakan saat konten dirender. Situs yang dioptimalkan untuk performa dan kecepatan dapat membantu mendorong pendapatan yang lebih tinggi. Menurut studi penelitian oleh Deloitte dan Google, Milliseconds Make Millions, peningkatan kecepatan situs sebesar 0,1 detik (100 md) menghasilkan peningkatan konversi sebesar 8,4% untuk situs retail dan peningkatan nilai pesanan rata-rata sebesar 9,2%.