Lompat ke kandungan utama

Kajian kes

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.

Lihat portfolio Perkhidmatan