Empat masalah, dan apa yang benar-benar menyelesaikannya
Kajian kes ini ditulis daripada log, ujian dan data sebenar. Saya sengaja memasukkan satu
insiden yang berlaku pada laman ini sendiri, kerana cara seseorang bertindak apabila sistemnya
rosak lebih berguna daripada senarai kejayaan.
Kajian kes 1
Portal komuniti yang tidak boleh diakses dengan www
Masalah
Portal komuniti Lucee Malaysia sudah berjalan, tetapi alamat www gagal sepenuhnya: tiada
hos maya dan tiada sijil. Pelawat yang menaip www melihat ralat pelayar, bukan laman.
Apa yang dibuat
Audit sebagai pelawat awam: 71 URL sitemap dijelajah satu demi satu, termasuk ujian mudah alih dan konsol pelayar.
Router www ditambah dengan sijil Let's Encrypt sendiri, dan setiap laluan dilencongkan 301 ke alamat tanpa www sambil mengekalkan laluan asal.
Halaman 404 yang memakai tajuk halaman utama dibetulkan: laluan ralat menetapkan tajuk kosong, jadi semua halaman ralat mewarisi tajuk utama.
Halaman ahli yang nipis ditandakan noindex dan dikeluarkan daripada sitemap, jadi 71 URL menjadi 70 yang benar-benar berguna.
Titik merah menu komuniti hanya muncul untuk ahli yang log masuk, bukan untuk setiap pelawat.
Bukti
www menjawab 301 ke alamat utama dengan sijil sah, semua halaman utama menjawab 200, dan
setiap URL dalam sitemap disahkan boleh dibuka. Satu perkara yang saya tidak selesaikan dan
tidak sembunyikan: log masuk ahli melalui OAuth belum diaktifkan kerana pemiliknya menangguhkan
pendaftaran ahli.
Kajian kes 2
Sandaran yang tidak pernah diuji bukan sandaran
Masalah
Fail sandaran wujud setiap hari. Tetapi tiada siapa pernah mencuba memulihkannya, jadi tiada
yang tahu sama ada fail itu benar-benar boleh digunakan pada hari ia diperlukan.
Apa yang dibuat
Lima pangkalan data dihantar keluar setiap hari, dan fail tapak mingguan, disulitkan dengan GPG AES-256 sebelum meninggalkan pelayan.
Fail diletakkan dalam folder berasingan mengikut pelayan, dan hanya fail hari itu dimuat naik supaya tiada pendua berulang.
Simpanan 30 hari, dengan bendera kegagalan dan satu amaran sahaja, bukan amaran setiap jam.
Bukti
Sandaran dimuat turun semula daripada storan luar, dinyahsulit dengan kunci simpanan, dan
dimasukkan ke pangkalan data sementara: 47 jadual dan 41,601 baris pulih. Ujian yang sama pada
pangkalan data utama memberi 47 jadual dan 39,004 baris. Tanpa ujian ini, angka itu hanya
andaian.
Kajian kes 3
801 ralat 500 dalam 97 minit, ketika pelayan sihat
Masalah
Tiga pemantau bebas melaporkan laman tidak dapat dicapai. Tetapi beban pelayan rendah, cakera
tenang dan tiada perkhidmatan dimulakan semula. Pada mulanya saya menyangka pemantau tersilap.
Pemantau itu betul, dan saya salah.
Punca
Satu pos diterbitkan tanpa medan gambar. Kod yang membina kad halaman utama membaca medan
gambar kecil tanpa menyemak sama ada medan itu wujud, jadi setiap lawatan ke halaman utama
menghasilkan ralat 500. Halaman lain tidak terjejas, yang membuatkan ia kelihatan seperti
masalah pelayan.
Apa yang dibuat
Setiap medan yang dibaca templat diberi nilai lalai di lapisan data, bukan di setiap templat.
Semakan kewujudan medan ditambah pada kad halaman utama, dan keseluruhan gelung pos dibalut supaya satu pos rosak tidak menjatuhkan senarai.
Kerja penerbitan pos kini wajib mengesahkan fail gambar wujud sebelum menerbitkan.
Pemantau tempatan kini merekod kod HTTP, bukan hanya hidup atau mati, dan hanya memberi amaran selepas dua kegagalan berturut-turut.
Bukti
Halaman utama menjawab 200 dalam 0.04 saat selepas pembaikan, dan sifar ralat 500 sejak saat
itu. Angka 801 datang daripada log akses, bukan anggaran.
Kajian kes 4
Alat awam yang menyuruh pelayan awak membuka pautan orang lain
Masalah
Alat semak laman membolehkan sesiapa memasukkan URL, dan pelayan saya yang akan mengambil
halaman itu. Itu bermakna orang luar boleh cuba menyuruh pelayan saya membuka alamat dalaman,
termasuk pangkalan data dan panel pentadbir.
Apa yang dibuat
Setiap hos disemak sebelum diminta, dan setiap lencongan disemak semula satu demi satu, bukan diikuti secara automatik.
Alamat dalaman, gelung setempat, julat persendirian dan alamat metadata awan ditolak. Hanya port 80 dan 443 dibenarkan.
Saiz muat turun dihadkan supaya respons besar tidak menghabiskan memori pelayan.
Had kadar setiap IP dan belanjawan harian, dengan laporan ditandakan noindex supaya URL pelawat tidak diindeks di bawah domain saya.
Bukti
Ujian lencongan ke alamat dalaman ditolak, dan alat itu berjalan percuma tanpa pendaftaran.
Kalau awak mahu mengujinya sendiri, ia ada di halaman alat.
Pelajaran yang berulang dalam semua empat
Ukur dahulu. Log dan ujian mengalahkan tekaan, termasuk tekaan saya sendiri.
Baiki di tempat yang betul. Nilai lalai di lapisan data menyelesaikan masalah yang menampal templat tidak selesaikan.
Uji perkara yang mudah diuji. Sandaran diuji dengan memulihkannya, bukan dengan melihat saiz fail.
Tulis apa yang tidak diselesaikan. Senarai kejayaan tanpa had lebih sukar dipercayai daripada senarai yang jujur.