Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

  1. Beranda
  2. Blog
  3. DevOps

DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Kedua strategi tersebut memungkinkan Anda melepaskan tanpa menghapus situs, namun keduanya mengelola risiko dengan cara yang berlawanan. Pelajari cara kerja masing-masing, berapa biaya sebenarnya, cara menangani database, dan mana yang cocok untuk tim Anda.

9 menit baca
Penerapan biru-hijau vs kenari: perbedaan, trade-off, dan cara memilih

Poin penting

  • Biru-hijau mempertahankan dua lingkungan penuh dan mengalihkan semua lalu lintas sekaligus.
  • Canary mengirimkan versi baru ke sebagian kecil pengguna terlebih dahulu, kemudian memperluasnya secara bertahap.
  • Biru-hijau menawarkan pengembalian yang sangat cepat. Canary membatasi berapa banyak pengguna yang dapat terpengaruh oleh rilis yang buruk.
  • Keduanya bergantung pada perubahan database yang kompatibel dan pemantauan yang baik.

Merilis perangkat lunak biasanya berarti jendela pemeliharaan dan semoga saja. Tim modern menggunakan strategi yang membuat rilis menjadi rutin, dan pilihan penerapan biru-hijau vs kenari adalah salah satu pilihan pertama yang akan Anda hadapi. Keduanya mengurangi risiko, namun melakukannya dengan cara yang berlawanan: yang satu menyiapkan pengganti penuh, sementara yang lain menguji dengan pengguna sebenarnya sedikit demi sedikit.

Panduan ini menjelaskan cara kerja masing-masing dan berapa biaya praktiknya. Kami menjalankan contoh kecil perutean pengguna dan rollback di Python 3.13, dan hasilnya berasal dari proses tersebut. Sampel Kubernetes hanya bersifat ilustratif, dan kami tidak menjalankannya. Perlakukan persentase dan ambang batas sebagai contoh awal untuk beradaptasi.

Jawaban singkatnya

Dengan penerapan biru-hijau, Anda menjalankan dua lingkungan produksi yang identik. Yang satu melayani pengguna saat Anda menerapkan dan menguji versi baru di versi lainnya, lalu Anda mengalihkan semua lalu lintas dalam satu gerakan.

Dengan penerapan canary, versi baru berjalan di samping versi lama. Anda mengirimkannya sebagian kecil dari lalu lintas nyata, membandingkan hasilnya, dan meningkatkan pembagiannya selangkah demi selangkah hingga dapat melayani semua orang. Nama burung kenari ini berasal dari nama burung kenari penambang yang pernah digunakan sebagai peringatan dini akan adanya bahaya.

Biru-hijau vs kenari berdampingan

Aspek Biru-hijau kenari
Pergeseran lalu lintas Sekaligus Bertahap
Pengguna terkena rilis yang buruk Semuanya, sampai Anda beralih kembali Hanya bagian kenari saja
Kembalikan Alihkan lalu lintas kembali Atur bagian kenari ke nol
Kecepatan rilis Peralihan cepat Lebih lambat, secara bertahap
Biaya infrastruktur Hingga dua kali lipat selama rilis Bagian ekstra kecil
Perutean lalu lintas diperlukan Peralihan sederhana Perutean berdasarkan persentase
Diperlukan pemantauan Bagus Luar biasa, dengan metrik per versi
Versi hidup bersama Secara singkat, jika ada Untuk keseluruhan peluncuran
Masukan pengguna nyata sebelum rilis penuh Tidak Ya

Cara kerja penerapan biru-hijau

  1. Biru aktif dan melayani semua lalu lintas.
  2. Terapkan versi baru ke hijau, yang tidak menerima lalu lintas pengguna.
  3. Uji hijau secara menyeluruh, di lingkungan produksi nyata, menggunakan uji asap dan pengguna internal.
  4. Ganti router, penyeimbang beban, atau DNS untuk mengirim lalu lintas ke warna hijau.
  5. Perhatikan baik-baik, dengan warna biru masih berjalan dan siap.
  6. Jika ada yang salah, beralih kembali. Jika semuanya baik-baik saja, warna biru menjadi lingkungan menganggur berikutnya.

Di Kubernetes, Anda dapat melakukan peralihan dengan mengubah pemilih Layanan, sehingga lalu lintas berpindah ke Pod yang diberi label berbeda:

apiVersion: v1
kind: Service
metadata:
  name: shop
spec:
  selector:
    app: shop
    version: green   # was: blue
  ports:
    - port: 80
      targetPort: 8000

Kelebihan: Konsepnya sederhana, Anda dapat menguji penyiapan produksi yang tepat sebelum pengguna melihatnya, dan rollback hampir seketika. Kelemahan: Infrastruktur duplikat bisa memakan biaya yang mahal, bug yang lolos dari pengujian Anda dapat menjangkau semua orang sekaligus, dan sesi terbuka serta pekerjaan dalam penerbangan memerlukan perhatian selama peralihan. Jika Anda menggunakan DNS untuk peralihan, catatan cache dapat menundanya. Baru mengenal konsepnya? Lihat Tutorial Kubernetes untuk pemula kami.

Cara kerja penerapan canary

  1. Terapkan versi baru bersama versi stabil.
  2. Rutekan sebagian kecil lalu lintas, misalnya 5%, ke canary.
  3. Bandingkan tingkat kesalahan, latensi, dan metrik bisnis dengan versi stabil.
  4. Kalau sehat naikkan jadi 25%, lalu 50%, lalu 100%.
  5. Jika ada yang menurun, kembalikan semua lalu lintas ke versi stabil.

Banyak tim memulai proyek dengan staf internal, kemudian wilayah berisiko rendah, dan baru kemudian masyarakat luas.

Kelebihan: Rilis yang buruk hanya memengaruhi sekelompok kecil, dan Anda belajar dari lalu lintas nyata bahwa tidak ada lingkungan pengujian yang dapat direproduksi sepenuhnya. Kelemahan: Anda memerlukan perutean berbasis persentase dan metrik per versi, peluncuran membutuhkan waktu lebih lama, dan dua versi dijalankan bersamaan untuk sementara waktu. Burung kenari kecil juga bisa menjadi terlalu sunyi untuk memberikan sinyal yang berarti, terutama pada saat lalu lintas sepi.

Perutean pengguna yang stabil

Memilih versi secara acak pada setiap permintaan memberikan pengalaman yang membingungkan bagi pengguna, karena mereka mungkin beralih antara versi lama dan baru. Solusi umum adalah dengan meng-hash ID pengguna yang stabil ke dalam keranjang, sehingga setiap pengguna selalu mendapatkan jawaban yang sama:

import hashlib

def bucket(user_id):
    digest = hashlib.sha256(user_id.encode()).hexdigest()
    return int(digest, 16) % 100

def version_for(user_id, canary_percent):
    return "v2" if bucket(user_id) < canary_percent else "v1"

users = [f"user-{i}" for i in range(10000)]
for percent in (5, 25, 50, 100):
    share = sum(version_for(u, percent) == "v2" for u in users) / len(users)
    print(percent, round(share * 100, 1))

# 5 5.0
# 25 24.5
# 50 49.9
# 100 100.0

Proporsi sebenarnya sudah sesuai dengan target. Metode ini memiliki dua properti yang lebih berguna, dan proses kami mengonfirmasi keduanya. Pengguna yang sama selalu menerima versi yang sama. Dan semua orang di kelompok 5% masih termasuk dalam 25%, jadi tidak ada orang yang sudah memiliki versi baru yang dipindahkan kembali seiring dengan berkembangnya peluncuran.

Dalam sistem nyata, mesh layanan, penyeimbang beban, atau alat seperti Argo Rollouts atau Flagger biasanya menangani perutean ini, jadi Anda tidak perlu menulisnya sendiri. Memahami apa yang mereka lakukan masih bermanfaat.

Mengotomatiskan keputusan

Canary hanya berfungsi jika seseorang benar-benar membandingkan versinya. Pemeriksaan otomatis lebih dapat diandalkan dibandingkan seseorang yang mengamati grafik. Inilah ide intinya, membandingkan tingkat kesalahan canary dengan versi stabil:

def should_rollback(canary_errors, canary_total, base_errors, base_total,
                    tolerance=1.5, min_requests=500):
    if canary_total < min_requests:
        return False   # not enough data to decide
    return (canary_errors / canary_total) > (base_errors / base_total) * tolerance

should_rollback(3, 100, 10, 5000)        # False: too few requests
should_rollback(30, 1000, 100, 10000)    # True:  3% against 1%
should_rollback(12, 1000, 100, 10000)    # False: 1.2% is within tolerance

Perhatikan kasus pertama. Tingkat kesalahannya terlihat tinggi, namun dengan hanya 100 permintaan, itu belum cukup bukti. Alat nyata menerapkan statistik yang lebih cermat, dan alat tersebut melihat beberapa sinyal secara bersamaan:

Sinyal Contoh
Kesalahan Rasio 5xx tanggapan
Latensi p95 dan p99, seperti yang dijelaskan dalam uji beban vs pengujian stres
Saturasi CPU, memori, kumpulan koneksi
Bisnis Pendaftaran, pembayaran, pembayaran berhasil

Kiat: Bandingkan kenari dengan versi stabil dalam jangka waktu yang sama, bukan dengan angka minggu lalu. Lalu lintas dan perilaku berubah setiap jamnya, sehingga perbandingan secara berdampingan memberi Anda sinyal yang lebih adil.

Masalah basis data

Kode aplikasi dapat ditukar dalam hitungan detik, namun data tidak. Kedua strategi tersebut biasanya berbagi satu database, jadi selama peluncuran dan setelah rollback, versi lama dan baru harus bekerja dengan skema yang sama.

Jawaban standarnya adalah pola perluas dan kontrak. Misalkan Anda ingin mengganti nama name menjadi full_name:

  1. Perluas: tambahkan kolom baru. Kode lama tidak terpengaruh.
  2. Migrasi: kode rilis yang menulis ke kedua kolom, dan mengisi ulang baris lama.
  3. Beralih: kode rilis yang dibaca dari kolom baru.
  4. Kontrak: setelah tidak ada yang menggunakan kolom lama, hapus kolom tersebut di rilis selanjutnya.

Ini memerlukan beberapa rilis, namun setiap langkah dapat dibatalkan dengan aman. Menjalankan RENAME COLUMN sekaligus akan merusak versi mana pun yang diharapkan dari nama lainnya. Berhati-hatilah dengan perubahan skema yang berjalan lama, karena perubahan tersebut dapat mengunci. Untuk mengetahui lebih lanjut mengenai hal ini, baca tentang transaksi SQL.

Bergulir dan strategi lainnya

Strategi Bagaimana cara kerjanya Bagus untuk
Buat ulang Hentikan yang lama, lalu mulai yang baru, dengan waktu henti Alat internal, sistem batch
Bergulir Ganti instance beberapa per satu Default yang umum, termasuk di Kubernetes
Biru-hijau Beralih di antara dua lingkungan Peralihan dan pengembalian cepat
kenari Perluas sebagian kecil secara bertahap Lalu lintas tinggi, risiko tinggi
Bayangan Salin lalu lintas ke versi baru, dan buang tanggapannya Menguji dengan beban nyata, tanpa dampak pada pengguna

Deployment Kubernetes melakukan pembaruan berkelanjutan secara default, yang cocok untuk banyak layanan. Pembaruan berkelanjutan juga bergeser secara bertahap, namun bagiannya terkait dengan jumlah contoh, dan tidak dengan sendirinya menganalisis hasil atau berhenti pada metrik yang buruk.

Bagaimana dengan tanda fitur?

Deployment menempatkan kode di server, dan rilis membuat fitur tersedia bagi pengguna. Tanda fitur memisahkannya, dengan memungkinkan Anda mengaktifkan fitur untuk pengguna yang dipilih tanpa menerapkan apa pun. Mereka bekerja sangat baik dengan kedua strategi tersebut: terapkan tanpa tanda, lalu aktifkan secara bertahap. Mereka tidak menggantikan strategi ini, karena sebuah flag tidak dapat melindungi Anda dari rilis yang crash saat startup. Ingatlah untuk menghapus tanda-tanda lama, karena hal itu akan menumpuk sebagai utang teknis.

Bagaimana memilih

Situasi Anda Pilihan yang masuk akal
Aplikasi sederhana, dan sedikit pengguna Pembaruan bergulir
Perlu peralihan dan pengembalian yang sangat cepat Biru-hijau
Ingin menguji dalam produksi sebelum peralihan Biru-hijau
Lalu lintas tinggi dan biaya kegagalan yang tinggi kenari
Pemantauan yang kuat, dan metrik per versi kenari
Lalu lintas rendah Biru-hijau, karena sinyal kenari terlalu lemah
Anggaran infrastruktur yang ketat Kenari atau bergulir

Mereka juga bisa digabungkan. Beberapa tim menerapkan lingkungan hijau, dan kemudian mengalihkan lalu lintas ke sana secara bertahap, mendapatkan lingkungan yang bersih dan radius ledakan terbatas. Apa pun yang Anda pilih, otomatiskan melalui pipa CI/CD Anda, seperti yang dijelaskan dalam panduan Tindakan GitHub kami.

Kesalahan umum

  • Membuat perubahan skema yang dapat menyebabkan gangguan. Rollback tidak membantu jika kode lama tidak dapat membaca data.
  • Tidak memiliki kriteria rollback. Putuskan apa yang dimaksud dengan “buruk” sebelum rilis dimulai, bukan saat terjadi insiden.
  • Membiarkan lingkungan melayang. Jika warna hijau berbeda dengan biru, pengujian Anda kurang membuktikannya. Definisikan keduanya dengan infrastruktur sebagai kode.
  • Hanya mengukur metrik teknis. Rilis bisa bebas kesalahan dan tetap membatalkan proses pembayaran.
  • Jangan pernah berlatih rollback. Latihlah, agar berhasil saat Anda berada di bawah tekanan.
  • Melupakan pekerjaan latar belakang. Pekerja dan tugas terjadwal juga memerlukan rencana selama peralihan.

Penutup

Biru-hijau memberi Anda peralihan yang bersih dan cepat. Canary memberi Anda eksposur kecil dan terukur. Jika pemantauan Anda masih dasar, mulailah dengan pembaruan berkelanjutan atau biru-hijau, dan berinvestasilah pada metrik per versi sebelum Anda mencoba canaries. Kemudian latih rollback pada rilis berikutnya, termasuk database. Latihan tunggal tersebut cenderung mengungkapkan apa yang sebenarnya perlu diperbaiki.

Pertanyaan yang sering diajukan

Apa perbedaan antara penerapan biru-hijau dan kenari?

Biru-hijau mengalihkan semua lalu lintas dari satu lingkungan penuh ke lingkungan lainnya sekaligus. Canary mengirimkan sebagian kecil lalu lintas ke versi baru dan mengembangkannya secara bertahap.

Mana yang lebih aman, biru-hijau atau kenari?

Canary membatasi berapa banyak pengguna yang terkena dampak rilis buruk, dan biru-hijau menawarkan pengembalian yang sangat cepat. Pilihan yang lebih aman bergantung pada lalu lintas, peralatan, dan pemantauan Anda.

Apakah penerapan biru-hijau mahal?

Bisa jadi, karena Anda mungkin menjalankan dua lingkungan penuh selama rilis. Penskalaan otomatis cloud dan mematikan lingkungan yang tidak aktif dapat mengurangi biaya.

Berapa persentase burung kenari yang harus dimulai?

Tim biasanya memulai dengan sekitar 1 hingga 5 persen, selama itu memberikan lalu lintas yang cukup untuk menghasilkan sinyal yang berarti. Sistem dengan lalu lintas rendah mungkin memerlukan bagian yang lebih besar.

Bagaimana canary dan blue-green menangani perubahan database?

Biasanya dengan perubahan yang kompatibel dengan versi sebelumnya seperti perluasan dan kontrak, karena kedua versi mungkin berbagi satu database dan keduanya harus berfungsi selama peluncuran.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengujian perangkat lunak

User Acceptance Testing (UAT): Proses, Checklist dan Contoh Nyata

Pengujian penerimaan pengguna menjelaskan: siapa yang menjalankannya, perbedaannya dengan QA, proses tujuh langkah, templat kasus uji UAT, daftar pe…

Baca artikel →
Basis data & SQL

Penjelasan Nilai NULL SQL: IS NULL, COALESCE, NULLIF dan Jebakan yang Harus Dihindari

Nilai SQL NULL dijelaskan dengan kueri yang kami jalankan: logika tiga nilai, IS NULL, COALESCE, NULLIF, cara agregat, penggabungan, dan pengurutan …

Baca artikel →
Basis data & SQL

Pernyataan SQL CASE WHEN: Sintaks, Contoh Nyata dan Kesalahan Umum

SQL CASE KETIKA dijelaskan dengan kueri yang kami jalankan: formulir sederhana dan dicari, urutan kondisi, pivot dengan SUM, trik COUNT, pengurutan …

Baca artikel →
Pengembangan perangkat lunak

Apa itu JWT? Token Web JSON Dijelaskan Dengan Contoh Kerja

Apa itu JWT? JSON Web Tokens menjelaskan: tiga bagian, token yang dibuat dan dirusak dalam kode yang kami jalankan, sesi JWT vs, penyimpanan, token …

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Loop Acara JavaScript: Call Stack, Microtasks, dan Timer Dengan Contoh

Perulangan peristiwa JavaScript dijelaskan dengan kode yang kami jalankan: tumpukan panggilan, antrian tugas dan tugas mikro, mengapa setTimeout 0 t…

Baca artikel →
Pengembangan perangkat lunak

Generator Python dan Penjelasan Hasil: Menghemat Memori Dengan Contoh Nyata

Generator dan hasil Python dijelaskan dengan kode yang kami jalankan: bagaimana mereka menjeda dan melanjutkan, mengukur penghematan memori, saluran…

Baca artikel →
Kecerdasan buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Apa itu embeddings? Panduan bahasa sederhana tentang vektor, kesamaan kosinus, dan penelusuran semantik, dengan contoh kecil yang kami jalankan, pen…

Baca artikel →
DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Penjelasan penerapan blue-green vs canary: cara kerja masing-masing, biaya, risiko dan rollback, pengelompokan pengguna stabil yang kami uji, migras…

Baca artikel →
Otomatisasi pengujian

Tes Tidak Stabil: Apa Penyebabnya dan Cara Memperbaikinya untuk Kebaikan

Pengujian yang tidak stabil dijelaskan dengan demo yang kami jalankan: penyebab utama, cara mengonfirmasi dan mendiagnosisnya, perbaikan waktu yang …

Baca artikel →
Pengujian perangkat lunak

Load Testing vs Stress Testing: Perbedaan, Metrik dan Contoh k6

Penjelasan pengujian beban vs pengujian stres: apa yang dibuktikan masing-masing, pengujian lonjakan dan rendam, metrik yang penting, mengapa rata-r…

Baca artikel →
Pengujian perangkat lunak

Kasus Uji vs Skenario Uji: Perbedaan Utama, Contoh, dan Kapan Menggunakan Masing-masing

Penjelasan kasus uji vs skenario pengujian: definisi yang jelas, tabel berdampingan, satu fitur pengaturan ulang kata sandi yang diambil dari skenar…

Baca artikel →
Basis data & SQL

Optimasi Kueri SQL: Baca Rencana Eksekusi dan Perbaiki Kueri Lambat, Dengan Pengaturan Waktu

Pengoptimalan kueri SQL diuji pada sejuta baris: membaca rencana eksekusi, menambahkan indeks yang tepat, memperbaiki filter yang tidak dapat disarg…

Baca artikel →
Basis data & SQL

SQL UNION vs UNION ALL: Perbedaan, Contoh dan Kinerja Diuji

SQL UNION vs UNION ALL dijelaskan dengan kueri yang kami jalankan: duplikat, aturan yang diikuti keduanya, bug data nyata, kinerja terukur, INTERSEC…

Baca artikel →
Pengembangan perangkat lunak

Tutorial API Pengambilan JavaScript: GET, POST, Penanganan Kesalahan, dan Batas Waktu

Tutorial JavaScript Fetch API diuji pada server lokal: GET dan POST, mengapa 404 tidak muncul, bantuan yang dapat digunakan kembali, string kueri, b…

Baca artikel →
Pengembangan perangkat lunak

Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

Penanganan file Python dijelaskan dengan kode yang kami jalankan: mode terbuka, dengan, membaca file besar, CSV, JSON, pathlib, file biner, penulisa…

Baca artikel →
Pengembangan perangkat lunak

Kelas dan Objek Python: Tutorial OOP Dengan Contoh Nyata

Kelas dan objek Python dijelaskan dengan kode yang kami jalankan: __init__, metode, atribut kelas vs instance, warisan, properti, metode dunder, kel…

Baca artikel →
Kecerdasan buatan

Apa Itu Model Bahasa Besar? Bagaimana LLM Bekerja, Dijelaskan Tanpa Hype

Apa yang dimaksud dengan model bahasa besar? LLM dijelaskan dalam bahasa sederhana: token, penyematan, perhatian, pelatihan, jendela suhu dan kontek…

Baca artikel →
DevOps

Perintah Linux untuk Pemula: Panduan Terminal Penting Dengan Contoh

Perintah Linux untuk pemula, dikelompokkan berdasarkan tugas: navigasi, file, melihat log, grep, pipa, izin, proses dan arsip, dengan contoh analisi…

Baca artikel →
Otomatisasi pengujian

Selenium vs Penulis Drama: Perbedaan Utama, Perbandingan Kode, dan Mana yang Harus Dipilih

Selenium vs Playwright dibandingkan: arsitektur, menunggu, dukungan browser dan bahasa, debugging, pengujian yang sama di kedua alat, saran migrasi …

Baca artikel →
Pengujian perangkat lunak

Partisi Ekivalensi: Teknik Desain Tes Dijelaskan Dengan Contoh yang Dikerjakan

Penjelasan partisi ekivalensi: cara menemukan partisi yang valid dan tidak valid, contoh yang berfungsi untuk usia, kata sandi dan kupon, pengujian …

Baca artikel →
Pengujian perangkat lunak

Severity vs Priority dalam Pengujian Perangkat Lunak: Perbedaan, Matriks dan Contoh Nyata

Keparahan vs prioritas dalam pengujian perangkat lunak dijelaskan: definisi yang jelas, matriks empat arah dengan contoh, skala level, siapa yang me…

Baca artikel →
Basis data & SQL

Tutorial Subkueri SQL: Jenis, Subkueri yang Berkorelasi, dan ADA Dengan Contoh

Tutorial subkueri SQL dengan kueri yang kami jalankan: subkueri skalar, IN, FROM dan SELECT, subkueri yang berkorelasi, EXISTS, jebakan NOT IN NULL …

Baca artikel →
Basis data & SQL

Penjelasan Transaksi SQL dan ACID: COMMIT, ROLLBACK dan Tingkat Isolasi

Transaksi SQL dan ACID dijelaskan dengan transfer bank yang kami jalankan: COMMIT, ROLLBACK, savepoint, kunci, tingkat isolasi, pembacaan kotor, keb…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →