Halo, Habr!
Pada 2017, selama Black Friday, beban meningkat hampir satu setengah kali, dan server kami berada pada batas kemungkinan. Selama tahun ini, jumlah pelanggan telah tumbuh secara signifikan, dan menjadi jelas bahwa tanpa persiapan awal yang matang, platform mungkin tidak tahan terhadap beban 2018.
Tujuannya ditetapkan sebagai yang paling ambisius dari semua yang mungkin: kami ingin sepenuhnya siap untuk semburan aktivitas apa pun, bahkan yang paling kuat, dan mulai menarik kapasitas baru di awal tahun ini.
CTO kami Andrei Chizh (
chizh_andrey ) menceritakan bagaimana kami mempersiapkan Black Friday 2018, tindakan apa yang kami ambil untuk menghindari jatuh, dan, tentu saja, hasil dari persiapan yang sangat hati-hati.

Hari ini saya ingin berbicara tentang persiapan untuk Black Friday 2018. Mengapa sekarang, ketika sebagian besar penjualan besar ada di belakang? Kami mulai mempersiapkan sekitar setahun sebelum peristiwa besar-besaran, dan dengan coba-coba kami menemukan solusi optimal. Kami menyarankan Anda menjaga musim panas sebelumnya dan mencegah fakaps yang mungkin muncul pada saat yang paling tidak tepat.
Materi akan bermanfaat bagi semua orang yang ingin memeras laba maksimum dari saham tersebut, seperti sisi teknis dari masalah ini tidak kalah dengan sisi pemasaran.
Fitur lalu lintas pada penjualan besar
Berlawanan dengan kepercayaan populer, Black Friday bukan satu hari dalam setahun, tetapi hampir satu minggu penuh: penawaran diskon pertama tiba 7-8 hari sebelum penjualan. Lalu lintas situs web mulai tumbuh dengan lancar sepanjang minggu, mencapai puncaknya pada hari Jumat dan turun cukup tajam pada hari Sabtu ke indikator toko reguler.

Ini penting untuk dipertimbangkan: toko online menjadi sangat sensitif terhadap "pelambatan" dalam sistem. Selain itu, buletin email kami juga mengalami peningkatan jumlah pengiriman yang signifikan.
Sangat penting bagi kita untuk melalui Black Friday tanpa jatuh, karena fungsi paling penting dari situs dan milis toko tergantung pada operasi platform, yaitu:
- Melacak dan mengeluarkan rekomendasi produk,
- Penerbitan bahan terkait (misalnya, blok rekomendasi desain gambar, seperti panah, logo, ikon dan elemen visual lainnya),
- Penerbitan gambar produk dengan ukuran yang tepat (untuk tujuan ini kami memiliki "ImageResizer" - subsistem yang mengunduh gambar dari server toko, mengompresnya ke ukuran yang diinginkan dan, melalui server caching, menyediakan gambar dengan ukuran yang tepat untuk setiap produk di setiap blok rekomendasi).
Bahkan, selama Black Friday 2019, beban pada layanan meningkat sebesar 40%, yaitu jumlah acara yang dipantau dan diproses oleh sistem Retail Rocket di situs toko online meningkat dari 5 hingga 8 ribu permintaan per detik. Karena kenyataan bahwa kami sedang mempersiapkan beban yang lebih serius, kami mengalami lonjakan dengan mudah.

Persiapan umum
Black Friday adalah waktu yang panas untuk semua ritel dan untuk ecommerce pada khususnya. Jumlah pengguna dan aktivitas mereka saat ini terus meningkat, jadi kami, seperti biasa, benar-benar siap untuk waktu sibuk ini. Kami menambahkan fakta bahwa banyak toko online yang terhubung dengan kami, tidak hanya di Rusia tetapi juga di Eropa, di mana hype jauh lebih tinggi, dan kami mendapatkan tingkat gairah yang lebih buruk daripada seri Brasil. Apa yang perlu dilakukan agar benar-benar siap menghadapi peningkatan beban?
Bekerja dengan server
Untuk memulainya, perlu untuk mengetahui apa yang sebenarnya kurang untuk meningkatkan kapasitas server. Sudah pada bulan Agustus, kami mulai memesan server baru khusus untuk Black Friday - total 10 mesin ditambahkan. Pada bulan November, mereka sudah sepenuhnya berperang.
Pada saat yang sama, sebagian dari mesin pembuat diinstal ulang untuk digunakan sebagai server Aplikasi. Kami segera menyiapkannya untuk menggunakan fungsi yang berbeda: baik untuk mengeluarkan rekomendasi dan untuk layanan ImageResizer, sehingga tergantung pada jenis beban, masing-masing dapat digunakan untuk salah satu peran ini. Dalam mode normal, server Application dan ImageResizer memiliki fungsi yang jelas: yang pertama terlibat dalam mengeluarkan rekomendasi, yang kedua mengirimkan gambar untuk huruf dan blok rekomendasi di situs web toko online. Dalam persiapan untuk Black Friday, diputuskan untuk membuat semua server serba guna menyeimbangkan lalu lintas di antara mereka tergantung pada jenis beban.
Kemudian kami menambahkan dua server besar untuk Kafka (Apache Kafka) dan mendapat sekelompok 5 mesin yang kuat. Sayangnya, semuanya berjalan tidak semulus yang kita inginkan: dalam proses sinkronisasi data, dua mesin baru mengambil seluruh lebar saluran jaringan, dan kami harus dengan cepat mencari tahu bagaimana melakukan proses penambahan dengan cepat dan aman untuk seluruh infrastruktur. Untuk mengatasi masalah ini, administrator kami harus dengan berani mengorbankan akhir pekan.
Bekerja dengan data
Selain server, kami memutuskan untuk mengoptimalkan file untuk memudahkan memuat, dan langkah besar bagi kami adalah terjemahan file statis. Semua file statis yang sebelumnya di-host di server dibawa ke S3 + Cloudfront. Mereka ingin melakukan ini untuk waktu yang lama, karena beban di server dekat dengan nilai batas, dan sekarang alasan yang bagus muncul.
Seminggu sebelum Black Friday, kami meningkatkan waktu penyimpanan gambar menjadi 3 hari, sehingga jika terjadi penurunan ImageResizer, gambar yang sebelumnya di-cache diperoleh dari cdn. Ini juga mengurangi beban pada server kami, karena semakin lama gambar disimpan, semakin jarang kita perlu menghabiskan sumber daya untuk mengubah ukuran.
Dan yang terakhir, namun tidak kalah pentingnya: 5 hari sebelum Black Friday, moratorium diumumkan tentang penyebaran fungsi baru, serta pada pekerjaan apa pun dengan infrastruktur - semua perhatian diarahkan untuk mengatasi peningkatan beban.
Rencana Tanggap Darurat
Tidak peduli seberapa bagus persiapannya, pemalsuan selalu dimungkinkan. Dan kami telah mengembangkan 3 rencana tanggapan untuk kemungkinan situasi kritis:
- pengurangan beban
- menonaktifkan beberapa layanan,
- mematikan layanan sepenuhnya.
Paket A: pengurangan beban. Seharusnya terlibat jika, karena lonjakan beban, server kami melampaui waktu tanggapan yang dapat diterima. Dalam hal ini, kami menyiapkan mekanisme untuk mengurangi beban secara bertahap dengan mengalihkan sebagian lalu lintas ke server Amazon, yang hanya akan memberikan "200 OK" untuk semua permintaan dan memberikan jawaban kosong. Kami memahami bahwa ini adalah penurunan kualitas layanan, tetapi pilihan antara fakta bahwa layanan tidak bekerja sama sekali atau tidak menunjukkan rekomendasi untuk sekitar 10% dari lalu lintas jelas.
Paket B: Menonaktifkan Layanan. Tersirat degradasi parsial layanan. Misalnya, mengurangi kecepatan penghitungan rekomendasi pribadi demi membongkar beberapa basis data dan saluran komunikasi. Dalam mode standar, rekomendasi dihitung dalam mode real-time, membuat versi toko online untuk setiap pengunjung, tetapi di bawah kondisi peningkatan beban, penurunan kecepatan memungkinkan layanan inti lainnya untuk terus bekerja.
Rencana C: untuk Armageddon. Jika terjadi kegagalan sistem yang lengkap, kami telah menyiapkan rencana yang akan memutuskan sambungan kami dengan aman dari pelanggan. Pembeli hanya akan berhenti melihat rekomendasi, kinerja toko online tidak akan terpengaruh. Untuk melakukan ini, kita harus mengatur ulang file integrasi kita sehingga pengguna baru berhenti berinteraksi dengan layanan. Artinya, kami akan menonaktifkan pekerjaan kode pelacakan utama kami, layanan akan berhenti mengumpulkan data dan menghitung rekomendasi, dan pengguna hanya akan melihat halaman tanpa blok rekomendasi. Untuk semua orang yang sebelumnya menerima file integrasi, kami telah menyediakan opsi untuk mengalihkan catatan DNS ke Amazon dan 200 tulisan rintisan yang OK.
Ringkasan
Kami mengatasi seluruh beban bahkan tanpa perlu menggunakan mesin build tambahan. Dan berkat persiapan sebelumnya, kami tidak memerlukan rencana respons yang dikembangkan. Tetapi semua pekerjaan yang dilakukan adalah pengalaman yang tak ternilai yang akan membantu kita mengatasi arus lalu lintas yang paling tak terduga dan besar.
Seperti pada tahun 2017, beban pada layanan meningkat sebesar 40%, dan jumlah pengguna di toko online untuk Black Friday meningkat sebesar 60%. Semua kesulitan dan kesalahan terjadi selama periode persiapan, yang menyelamatkan kami dan pelanggan kami dari situasi yang tidak terduga.
Bagaimana perasaan Anda tentang Black Friday? Bagaimana cara mempersiapkan beban kritis?