Penghitung tampilan yang mengubah katalog kami menjadi 502
Pengiriman
Halaman yang mencantumkan setiap Paket Kit yang kami jual menjawab setiap pengunjung dengan 502 Bad Gateway selama sekitar 41 jam setelah peluncuran. Halaman masing-masing Paket Kit berfungsi, halaman beranda berfungsi, checkout berfungsi. Bagian yang rusak adalah beberapa baris yang menghitung jumlah tampilan halaman.
Bug tersebut
Server toko kami menghitung kunjungan ke halaman Paket Kit. Untuk mengetahui Paket Kit mana yang diminta, ia mengambil bagian kedua dari path:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
Untuk /kits/studio/, itu adalah studio. Untuk katalog itu sendiri, /kits/, path memiliki dua garis miring, sehingga Pengaman membolehkannya lewat, tetapi setelah menghapus garis miring hanya ada satu bagian, dan [1] memunculkan IndexError. Handler adalah http.server standar Python: sebuah exception di do_GET menutup koneksi tanpa jawaban, dan Cloudflare menampilkan 502 kepada pengunjung.
Perbaikannya adalah satu fungsi kecil yang mengembalikan string kosong ketika bagian tersebut hilang. Penghitung tampilan hanya pernah membutuhkan nama Paket Kit; ia tidak pernah perlu bisa merusak halaman yang sedang dihitungnya.
Mengapa tidak ada pemeriksaan kami yang melihatnya
- Pemantauan uptime hanya membuka halaman beranda. Halaman beranda baik-baik saja.
- Langkah rilis memeriksa setiap Paket Kit yang dikirim: halamannya, pengalihan checkout-nya, jalur berbayar dari awal hingga akhir. Ia tidak pernah membuka daftar semua Paket Kit.
- Analitik tidak dapat menunjukkannya. Kode yang seharusnya menghitung pengunjung katalog adalah kode yang crash. Log server sudah memiliki jawabannya sejak awal: 17 tracebacks dalam 41 jam tersebut, masing-masing adalah permintaan, dari orang atau crawler, yang mendapat error alih-alih halaman.
Apa yang berubah
- Setiap halaman, dari luar, setiap jam. Sebuah job kecil membaca sitemap dan membuka setiap halaman dalam bahasa Inggris dan, secara bergantian, satu dari 42 bahasa lainnya, melalui Cloudflare seperti pengunjung. Dua kegagalan berturut-turut mengirim email; pemulihan mengirim email lain.
- Langkah rilis membuka setiap halaman dalam bahasa Inggris setelah ia membangun ulang situs, dan menolak untuk selesai jika satu halaman tidak menjawab 200.
- Halaman indeks dihitung sebagai halaman. Halaman yang mencantumkan halaman lain adalah halaman yang pertama kali dikunjungi, dan itulah halaman yang tidak diuji oleh siapa pun.
Kesimpulan
Pekerjaan sampingan dalam request handler, seperti menghitung, mencatat, atau melacak, tidak boleh sampai membuat request gagal, dan pemeriksaan halaman yang hanya mencakup halaman yang baru Anda ubah akan melewatkan halaman-halaman yang menautkan ke sana. Watch di Night Watch menerima daftar halaman apa pun, masing-masing dengan teks yang harus terkandung di dalamnya, tidak hanya halaman beranda.