Dalam dunia ideal seorang insinyur, arsitektur selalu indah. Dalam dunia nyata sistem skala tinggi, Anda harus membuat kompromi. Salah satu masalah mendasar yang harus dipikirkan insinyur sejak awal adalah pertukaran sengit antara Kecepatan Menulis dan Kecepatan Membaca.
Biasanya, Anda mengorbankan satu untuk yang lain. Tetapi dalam kasus kami, bekerja dengan petabyte data di AWS, kompromi ini tidak menghantam kecepatan kami–melainkan dompet kami.
Kami membangun sistem yang menulis data dengan sempurna, tetapi setiap kali membaca dari arsip, sistem ini menghabiskan anggaran dengan cara yang paling menyakitkan yang bisa dibayangkan. Bagaimanapun, membaca petabyte dari AWS membutuhkan biaya untuk transfer data, jumlah permintaan, dan pengambilan kelas penyimpanan... Banyak uang!
Ini adalah kisah tentang bagaimana kami mengoptimalkannya untuk membuatnya lebih efisien dan hemat biaya!
Kisah nyata: beberapa bulan yang lalu, salah satu arsitek solusi kami ingin mengambil sampel ekspor dari situs web langka dengan lalu lintas rendah untuk mendemonstrasikan produk kepada calon klien. Karena bug di API, batas keamanan pada jumlah file tidak diterapkan.
Karena data untuk situs "langka" ini tersebar di jutaan arsip bersama dengan situs-situs berlalu lintas tinggi, sistem mencoba memulihkan hampir setengah dari seluruh penyimpanan historis kami untuk menemukan beberapa halaman tersebut.
Kesalahan jujur itu akhirnya menghabiskan biaya hampir $100.000 dalam biaya AWS!
Sekarang, saya segera memperbaiki bug API (dan menambahkan batasan ketat), tetapi kerentanan arsitektur tetap ada. Itu adalah bom waktu...
Izinkan saya menceritakan kisah arsitektur Web Archive Bright Data: bagaimana saya mengarahkan sistem ke dalam jebakan penyimpanan "murah" dan bagaimana saya keluar menggunakan Pipeline Pengaturan Ulang.
Ketika saya mulai bekerja pada Web Archive, sistem sudah menelan aliran data yang besar: jutaan permintaan per menit, puluhan terabyte per hari. Arsitektur dasar dibangun dengan tujuan utama: menangkap semuanya tanpa kehilangan data.
Ini mengandalkan strategi paling tahan lama untuk sistem throughput tinggi: Log Append-only.
Untuk fase ingesti, desain ini sempurna. Menyimpan data di Deep Archive hanya membutuhkan biaya recehan, dan throughput penulisan praktis tidak terbatas.
Arsitektur bekerja sempurna untuk penulisan... sampai klien datang meminta data historis. Saat itulah saya menghadapi kontradiksi mendasar:
cnn.com, google.com, dan shop.xyz.cnn.com selama setahun terakhir."Di sinilah letak kesalahan yang menginspirasi artikel ini. Seperti banyak insinyur, saya terbiasa berpikir tentang latensi, IOPS, dan throughput. Tetapi saya mengabaikan model penagihan AWS Glacier.
Saya berpikir: "Yah, mengambil beberapa ribu arsip memang lambat (48 jam), tetapi tidak terlalu mahal."
Kenyataannya: AWS menagih tidak hanya untuk panggilan API, tetapi juga untuk volume data yang dipulihkan ($ per GB yang diambil).
Bayangkan klien meminta 1.000 halaman dari satu domain. Karena logika penulisan bersifat kronologis, halaman-halaman ini bisa tersebar di 1.000 arsip TAR yang berbeda.
Untuk memberikan klien 50 MB data yang berguna, terjadilah bencana:
Kami membayar untuk memulihkan terabyte sampah hanya untuk mengekstrak butiran emas. Ini adalah masalah klasik Lokalitas Data yang berubah menjadi lubang hitam finansial.
Saya tidak bisa dengan cepat mengubah metode ingesti–aliran masuk terlalu paralel dan besar untuk diurutkan "secara langsung" (meskipun saya sedang mengerjakan itu), dan saya membutuhkan solusi yang juga berfungsi untuk data yang sudah diarsipkan.
Jadi, saya merancang Pipeline Pengaturan Ulang, proses latar belakang yang "mendefragmentasi" arsip.
Ini adalah proses ETL (Extract, Transform, Load) asinkron, dengan beberapa komponen inti penting:
Seleksi: Tidak masuk akal untuk mengurutkan data yang tidak diminta klien. Oleh karena itu, saya mengarahkan semua data baru ke dalam pipeline, serta data yang secara khusus diminta klien untuk dipulihkan. Kami membayar lebih untuk pengambilan pertama kali, tetapi tidak pernah terjadi kedua kalinya.
\
Pengacakan (Pengelompokan): Beberapa pekerja mengunduh file yang tidak diurutkan secara paralel dan mengatur buffer berdasarkan domain. Karena sistem bersifat asinkron, saya tidak khawatir aliran masuk akan membebani memori. Para pekerja menangani beban dengan kecepatan mereka sendiri.
\
Penulisan Ulang: Saya menulis file yang diurutkan kembali ke S3 di bawah awalan baru (untuk membedakan file yang diurutkan dari yang mentah).
2024/05/05/random_id_ts.tar → [cnn, google, zara, cnn]2024/05/05/cnn/random_id_ts.tar → [cnn, cnn, cnn...] MERGE INTO atau UPDATE sangat mahal.Perubahan ini secara radikal mengubah ekonomi produk:
cnn.com, sistem hanya memulihkan data di mana cnn.com berada.Bright Data sedang menskalakan Web Archive lebih jauh lagi. Jika Anda menikmati:
Maka saya ingin berbicara dengan Anda.
Kami merekrut insinyur Node.js yang kuat untuk membantu membangun generasi berikutnya dari Web Archive. Memiliki pengalaman rekayasa data dan ETL sangat menguntungkan. Jangan ragu untuk mengirimkan CV Anda ke [email protected].
Update lebih lanjut akan datang saat saya terus menskalakan arsip—dan saat saya terus menemukan cara-cara baru dan kreatif untuk merusaknya!
\


