Dengan membangun sistem pengujian dan pemantauan performa otomatis, Tim Kecepatan Situs Lowe's menguji permintaan pull terhadap anggaran performa, dan mencegah regresi performa menjadi produksi.
Lowe's adalah retailer perbaikan rumah senilai hampir $90 miliar yang mengoperasikan sekitar 2.200 toko dan mempekerjakan lebih dari 300.000 karyawan. Dengan membangun sistem pengujian dan pemantauan otomatis yang mencegah regresi performa agar tidak di-deploy ke produksi, Tim Kecepatan Situs Lowe dapat meningkatkan performa situsnya, dan mendapatkan peringkat di antara situs retail teratas.
Masalah
Sasaran Tim Kecepatan Situs adalah menjadikan situs Lowe sebagai salah satu situs e-commerce tercepat dalam hal performa pemuatan halaman. Sebelum membangun sistem pengujian dan pemantauan otomatis, developer situs Lowe tidak dapat mengukur performa secara otomatis di lingkungan praproduksi. Alat yang ada hanya melakukan pengujian di lingkungan produksi. Akibatnya, build yang lebih rendah beralih ke tahap produksi, sehingga memberikan pengalaman pengguna yang buruk. Build inferior ini akan tetap diproduksi hingga terdeteksi oleh Tim Kecepatan Situs dan dikembalikan oleh penulis.
Solusi
Tim Kecepatan Situs menggunakan alat open source untuk membangun sistem pengujian dan pemantauan performa otomatis untuk lingkungan praproduksi. Sistem mengukur performa setiap permintaan pull (PR) dan membatasi PR dari pengiriman ke produksi jika tidak memenuhi anggaran performa dan kriteria metrik Tim Kecepatan Situs. Sistem ini juga mengukur kepatuhan SEO dan ADA.
Dampak
Dari sampel 1 tim selama 16 minggu yang men-deploy 102 build, sistem pengujian dan pemantauan performa otomatis mencegah 32 build dengan performa di bawah standar masuk ke produksi.
Jika biasanya Tim Kecepatan Situs memerlukan waktu tiga hingga lima hari untuk memberi tahu developer bahwa mereka telah mengirimkan regresi performa ke tahap produksi, sistem kini akan otomatis menginformasikan masalah performa kepada developer lima menit setelah mengirimkan permintaan pull di lingkungan praproduksi.
Kualitas kode meningkat seiring waktu, yang diukur berdasarkan fakta bahwa lebih sedikit permintaan pull yang ditandai untuk regresi performa. Tim Kecepatan Situs juga secara bertahap memperketat anggaran tata kelola untuk terus meningkatkan kualitas situs.
Secara umum, memiliki kepemilikan yang jelas atas kode yang bermasalah telah mengubah budaya engineering. Alih-alih menyesalkan koreksi reaktif karena tidak diketahui dengan jelas siapa yang sebenarnya menyebabkan masalah, tim dapat melakukan pengoptimalan proaktif dengan kepemilikan kode bermasalah yang dapat diatribusikan secara objektif.
Penerapan
Inti aplikasi Site Speed Governance (SSG) adalah Lighthouse CI. Aplikasi SSG menggunakan Lighthouse untuk memvalidasi dan mengaudit performa halaman setiap permintaan pull.
Aplikasi SSG menyebabkan build gagal jika anggaran performa dan target metrik yang ditentukan Tim Kecepatan Situs tidak tercapai. Tidak hanya meningkatkan performa pemuatan, tetapi juga SEO, PWA, dan aksesibilitas. Alat ini dapat langsung melaporkan status kepada penulis, peninjau, dan tim SRE. Aplikasi ini juga dapat dikonfigurasi untuk mengabaikan pemeriksaan saat pengecualian diperlukan.
Alur proses Tata Kelola Kecepatan Otomatis (ASG)
Spinnaker
Titik awal. Developer menggabungkan kode mereka ke dalam lingkungan praproduksi.
- Men-deploy lingkungan praproduksi dengan aset CDN.
- Periksa deployment yang berhasil.
- Jalankan container Docker untuk mulai membangun aplikasi ASG atau mengirim notifikasi (jika terjadi kegagalan deployment).
Jenkins dan Lighthouse
- Membangun aplikasi ASG dengan Jenkins.
- Jalankan container Docker kustom yang telah menginstal Chrome dan Lighthouse.
Tarik
lighthouserc.json
dari aplikasi SSG dan jalankanlhci autorun --collect-url=https://example.com
.
Aplikasi Jenkins dan SSG
- Ekstrak
assertion-results.json
dari lahci dan bandingkan dengan anggaran yang telah ditentukan dibudgets.json
. Simpan output sebagai file teks dan upload ke Nexus untuk perbandingan mendatang. - Bandingkan
assertion-results.json
saat ini dengan build terakhir yang berhasil (didownload dari Nexus) dan simpan sebagai file teks. - Buat email HTML dengan informasi berhasil atau gagal.
- Mengirim email ke daftar distribusi yang relevan dengan Jenkins.