Strangler: CI3 dan Astro berdampingan
Menulis ulang portal berita dalam satu peluncuran adalah taruhan besar dengan trafik dan pendapatanmu. Cloudflare memungkinkan memindahkannya sepotong demi sepotong.
Intisari
- Origin Rules di Cloudflare mengarahkan jalur tertentu ke origin berbeda β tanpa perubahan DNS.
- Satu domain, satu sertifikat, satu WAF. Pembaca tidak pernah tahu ada dua sistem.
- Rollback = ubah satu aturan. Berlaku dalam hitungan detik, bukan menit.
- Urutan yang benar: login dulu (supaya sesi bersama hidup), lalu halaman baca, lalu redaksi.
- Selama transisi, dua sistem berbagi satu database β semua aturan kompatibilitas skema dari Fase 2 berlaku.
Bentuknya
ββ /masuk, /daftar, /akun β Astro (ECS)
ββ /berita/* β Astro
Pembaca β Cloudflareβ€
ββ /perusahaan/* β CI3 (server lama)
ββ semua sisanya β CI3
β
ββ satu MySQL, dipakai keduanya
Cloudflare β Rules β Origin Rules
Aturan 1:
Ekspresi : (starts_with(http.request.uri.path, "/berita")
or starts_with(http.request.uri.path, "/masuk")
or starts_with(http.request.uri.path, "/daftar")
or starts_with(http.request.uri.path, "/akun")
or starts_with(http.request.uri.path, "/_actions")
or starts_with(http.request.uri.path, "/_server-islands")
or starts_with(http.request.uri.path, "/_astro"))
Origin : astro-origin.portal.contoh.id
(Tanpa aturan yang cocok, trafik menuju origin default: CI3.)
Origin Rules mengubah ke mana request dikirim, bukan URL-nya. Pembaca tetap melihat
portal.contoh.id/berita/rupiah-menguat; hanya server yang melayaninya yang berbeda. Tidak
ada redirect, tidak ada perubahan URL, tidak ada dampak SEO β inilah yang membedakannya dari memindahkan
bagian situs ke subdomain.
Urutan pemindahan
| Tahap | Yang dipindah | Risiko | Kenapa urutan ini |
|---|---|---|---|
| 1 | Halaman statis: tentang, S&K, kebijakan | Sangat rendah | Membuktikan pipeline deploy bekerja |
| 2 | Login, daftar, akun | Sedang | Sesi bersama harus hidup sebelum yang lain |
| 3 | Halaman artikel | Sedang | Volume terbesar; di sini keuntungan cache muncul |
| 4 | Beranda & kategori | Sedang | Setelah halaman artikel terbukti stabil |
| 5 | Data perusahaan | Rendah | Trafik lebih kecil |
| 6 | Langganan & pembayaran | Tinggi | Menyentuh uang; pindahkan setelah semua stabil |
| 7 | Panel redaksi | Sedang | Penggunanya sedikit dan bisa diberi tahu |
| 8 | Matikan CI3 | β | Setelah beberapa minggu tanpa trafik ke sana |
Tahap 2 sebelum tahap 3 itu wajib, bukan preferensi. Kalau halaman artikel pindah lebih dulu sementara login masih di CI3, maka paywall di Astro tidak bisa membaca sesi yang dibuat CI3 β dan setiap member yang membayar akan melihat paywall. Pindahkan yang membuat sesi lebih dulu, lalu yang membacanya. Mekanismenya di Fase 5.
Menguji tanpa mempengaruhi pembaca
Aturan uji β hanya untuk yang punya cookie khusus:
Ekspresi : (starts_with(http.request.uri.path, "/berita")
and http.cookie contains "uji-astro=1")
Origin : astro-origin.portal.contoh.id
Setel cookie itu di peramban tim lewat konsol, dan seluruh tim bisa memakai versi Astro di domain produksi, dengan data produksi, sementara pembaca tetap dilayani CI3. Ini cara termurah menguji dengan kondisi sungguhan.
// Jalankan di konsol peramban
document.cookie = "uji-astro=1; path=/; max-age=86400; secure";
Peluncuran bertahap per persentase
Ekspresi : (starts_with(http.request.uri.path, "/berita")
and cf.random_seed lt 0.05)
Origin : astro-origin.portal.contoh.id
Lima persen dulu, pantau semalaman, naikkan ke 25%, 50%, 100%. Yang dipantau di tiap tahap:
| Metrik | Sumber | Batal kalau |
|---|---|---|
| Tingkat error 5xx | Cloudflare Analytics | Naik dibanding CI3 |
| Latensi p95 | Analytics | Lebih buruk dari CI3 |
| Error perayapan | Search Console | Naik sama sekali |
| Konversi langganan | Aplikasi | Turun |
| Cache hit ratio | Analytics | Tidak naik seperti yang diharapkan |
Peringatan tentang cf.random_seed: ia acak per request, bukan per pembaca.
Artinya satu pembaca bisa mendapat Astro untuk satu artikel dan CI3 untuk artikel berikutnya. Untuk
halaman baca yang tampilannya mirip, itu bisa diterima. Untuk alur yang berkelanjutan β pendaftaran,
pembayaran β tidak: pakai cookie yang disetel sekali, atau jangan pakai peluncuran
bertahap sama sekali untuk jalur itu.
Yang harus konsisten di kedua sistem
| Hal | Cara menjaganya |
|---|---|
| Sesi | Tabel sesi bersama (Fase 5) |
| Bentuk URL | Astro memakai pola URL yang sama persis; kalau berubah, redirect (materi berikutnya) |
| Tampilan | CSS bersama, atau terima perbedaan kecil selama transisi |
| Analitik | ID properti yang sama, supaya laporannya tidak terpecah |
| Skema database | Kompatibel dua arah β semua aturan Fase 2 berlaku |
| Slot iklan | ID unit yang sama, supaya pendapatannya bisa dibandingkan |
Header untuk membedakan
// Di middleware Astro
res.headers.set("X-Dilayani", "astro");
// Di CI3
header('X-Dilayani: ci3');
for p in / /berita/uji /perusahaan/BBCA /akun /langganan; do
printf '%-20s %s\n' "$p" "$(curl -sI "https://portal.contoh.id$p" | grep -i x-dilayani)"
done
Satu perintah memberi peta jelas tentang bagian mana yang sudah pindah. Selama migrasi berbulan-bulan, ini menghapus banyak kebingungan β termasuk saat menelusuri bug dan tidak yakin sistem mana yang menghasilkannya.
Rollback
Nonaktifkan Origin Rule β trafik kembali ke CI3 dalam hitungan detik.
| Prasyarat rollback yang bekerja | Catatan |
|---|---|
| CI3 tetap berjalan dan ter-deploy | Jangan matikan sampai berminggu-minggu setelah 100% |
| Skema database tetap kompatibel | Migrasi yang menghapus kolom membuat rollback mustahil |
| Sesi tetap bisa dibaca keduanya | β |
| Tidak ada data yang hanya dipahami Astro | Kolom baru harus opsional bagi CI3 |
Baris kedua adalah yang paling sering merusak rencana rollback. Setelah dua bulan berjalan dengan Astro, seseorang menjalankan migrasi yang membersihkan kolom lama β dan sejak saat itu rollback bukan lagi "ubah satu aturan" melainkan "pulihkan database". Tunda semua migrasi yang merusak kompatibilitas sampai CI3 benar-benar dimatikan.
Latihan: siapkan subdomain astro-origin yang menunjuk ke ALB atau Tunnel-mu
(abu-abu, tidak di-proxy), lalu buat Origin Rule berbasis cookie uji-astro=1 untuk satu
jalur. Verifikasi dengan header X-Dilayani bahwa kamu mendapat Astro sementara jendela
penyamaran mendapat CI3. Lalu latih rollback-nya: matikan aturannya dan ukur berapa detik sampai
X-Dilayani berubah.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.