- Browser Use Cloud menggunakan Firecracker VM terpisah untuk setiap sesi browser, sambil menurunkan waktu mulai sesi baru menjadi kurang dari 1 detik dan memangkas biaya dari $0.06 per jam browser menjadi $0.02
- Arsitektur Unikraft sebelumnya menguntungkan untuk biaya saat idle, tetapi saat lonjakan trafik kapasitas harus disesuaikan secara manual, sehingga produksi sempat down selama 45 menit saat uji beban
- Arsitektur baru memakai control plane buatan sendiri untuk memantau armada browser secara real-time dan memutuskan penempatan host EC2, scaling, serta draining dengan lebih rinci dibanding CloudWatch
- Alih-alih memakai
.metal, mereka memilih virtualisasi bertingkat dengan menjalankan Firecracker di atas EC2 biasa, lalu mengurangi bottleneck lewat halaman memori 2MB,userfaultfd, vCPU pinning, real-time priority, dan patch headless Chromium - Cold start VM kurang dari 400ms, dan dalam stress test 10.000 sesi, latensi pembuatan browser dari API publik tercatat p50 825ms dan p99 1,35 detik, dengan semua browser berhasil dimulai
Browser cloud yang cepat, terisolasi, dan murah
- Tujuan Browser Use Cloud adalah memulai browser dengan cepat sambil mengisolasi state antar sesi dan menekan biaya
- Satu sesi dapat mencakup Chromium, filesystem, cookie, cache, pengaturan proxy, unduhan, dan kadang bahkan sesi pelanggan yang sudah login
- Jika satu browser bisa membaca state browser lain, itu menjadi masalah keamanan, jadi setiap sesi harus diisolasi dari host dan dari sesi lainnya
- Solusi umum adalah VM dengan CPU, memori, disk, dan perangkat jaringan sendiri, tetapi itu terlalu berat dan mahal untuk lingkungan browser cloud yang terus dibuat lalu dibuang setelah sesi berakhir
- Arsitektur baru menjalankan semua sesi Browser Use Cloud di dalam satu Firecracker VM kecil per sesi, dan VM ini berjalan di atas Amazon EC2
Alasan meninggalkan Unikraft
- Arsitektur sebelumnya menjalankan browser cloud dengan Unikraft
- Unikraft memuat unikernel, yaitu image kecil yang dibuat untuk tujuan tertentu tanpa harus mem-boot Linux penuh
- Unikernel bisa start dengan cepat dan dapat dimatikan saat tidak ada pengguna, sehingga biaya idle rendah
- Bottleneck-nya adalah menaikkan kapasitas browser dengan cepat saat trafik melonjak
- Unikraft tidak memiliki autoscaling bawaan yang memadai
- Engineer harus mengubah variabel dan menambah instance secara manual
- Salah satu uji beban membuat produksi down selama 45 menit
- Setelah dibangun ulang, mereka beralih ke Firecracker
- Firecracker menyediakan lapisan untuk membuat, memantau, dan menjalankan VM
- Setiap VM diberi CPU, memori, disk, dan perangkat jaringan, serta diisolasi dari host dan VM lain
Mengotomatiskan scaling browser dengan control plane sendiri
- Firecracker bisa memberi satu VM untuk tiap browser, tetapi tidak otomatis menentukan jumlah VM, penempatan, atau kapan harus scale
- Browser Use membuat control plane sendiri untuk memantau armada browser dan memutuskan scale up/down
- Saat pengguna meminta browser, control plane memilih mesin yang masih punya kapasitas kosong
- Saat trafik naik, lebih banyak mesin dinyalakan; saat turun, browser baru tidak lagi dikirim ke mesin yang akan dihapus
- Control plane memeriksa armada secara real-time
- CloudWatch, layanan monitoring AWS, biasanya bereaksi dalam jendela 1 menit
- Control plane juga mengetahui informasi yang tidak ada di metrik biasa, seperti browser yang masih starting, mesin yang sedang dihapus, atau mesin yang tidak boleh menerima sesi baru
- Permintaan pengguna diteruskan melalui edge router stateless ke control plane, lalu control plane memilih host EC2 yang masih longgar
Mengapa menjalankan Firecracker di atas EC2 biasa
- Cara umum menjalankan Firecracker di AWS adalah menggunakan instance
.metal.metalberarti menyewa seluruh server fisik agar Firecracker bisa berjalan langsung di atasnya
- Browser Use memilih EC2 biasa
- Mesin EC2 biasa bisa diperoleh lebih cepat
- Biaya pemeliharaannya lebih rendah
- Host boot dari image yang sudah disiapkan dan mulai bisa menyediakan browser sekitar 30 detik setelah start
- Jika host bisa ditambahkan lebih cepat, kapasitas idle berbayar bisa dikurangi, dan biaya yang diteruskan ke pelanggan juga turun
- Konsekuensinya adalah struktur VM di dalam VM
- EC2 biasa sendiri sudah berjalan di dalam lapisan isolasi AWS
- Di dalamnya mereka kembali menjalankan browser VM
- Saat browser VM meminta bantuan host, permintaan itu harus melewati dua lapisan VM sehingga menambah latensi
- Browser Use memilih kompromi ini demi scale-up yang lebih cepat dan biaya yang lebih rendah, lalu fokus mempercepat jalur eksekusi Firecracker
Alur dari permintaan hingga browser siap dipakai
- Saat pengguna meminta browser, control plane memilih mesin yang masih punya kapasitas
- Mesin tersebut memulihkan browser VM yang telah disimpan, lalu menjalankan Chromium di dalamnya
- Setelah Chromium berada dalam kondisi bisa dikendalikan, sistem mengembalikan URL koneksi
- Agen pengguna terhubung ke URL ini
- Browser Use mengendalikan Chromium melalui Chrome DevTools Protocol(CDP) lewat WebSocket
- CDP adalah API kendali jarak jauh Chrome untuk klik tombol, mengetik teks, membaca halaman, mengambil screenshot, dan sebagainya
- Ada tiga bottleneck utama yang menambah latensi
- pemulihan memori VM
- startup Chromium
- menjaga stealth agar tidak terdeteksi sistem anti-bot
Bottleneck pertama: pemulihan memori
- Browser produksi tidak boot dari awal, tetapi dilanjutkan dari snapshot
- Snapshot adalah VM yang sudah boot dan dihentikan tepat sebelum Chromium mulai dijalankan
- Melanjutkan VM lebih cepat daripada boot baru, tetapi pada cold start awal, page fault menyumbang 72% dari seluruh VM exit
- Waktu dari resume VM sampai browser siap CDP awalnya mencapai 9,8 detik
- Penyebab lambatnya adalah saat VM hasil restore pertama kali menyentuh memori, host harus memetakan ulang memori tersebut
- Peristiwa ini disebut page fault
- Dalam VM bertingkat, page fault mahal karena bisa melewati dua lapisan VM
- Solusinya adalah memetakan memori dalam unit yang lebih besar
- Sebelumnya restore dilakukan dengan halaman 4KB
- Sekarang mereka memakai halaman 2MB
- Setiap halaman mencakup memori 512 kali lebih banyak, sehingga page fault berkurang drastis saat browser bangun
- Mereka juga menambahkan custom handler untuk
userfaultfd, API Linux untuk menangani halaman memori yang hilang- Sebelum VM dijalankan, mereka memuat memori yang kemungkinan besar akan diakses Chromium lebih dulu
- Ini mencegah lonjakan page fault saat Chromium mulai berjalan
- Perubahan ini menurunkan waktu dari resume VM hingga browser siap menerima perintah dari 9,8 detik menjadi 3,1 detik
- Jumlah kali browser VM berhenti dan meminta host menangani memori yang hilang turun dari sekitar 100.000 kali menjadi sekitar 1.100 kali per resume, atau sekitar 91 kali lebih sedikit
- Optimalisasi kecil juga ikut menumpuk
- Mereka menonaktifkan pemeriksaan 500ms yang sebelumnya dipakai untuk mencari keyboard PS/2 lama yang sebenarnya tidak ada
- Pemeriksaan kesiapan diubah dari HTTP polling menjadi pembacaan log
vsock - Saat driver browser menulis pesan ready ke log, host membacanya lewat
vsockdan bisa mendeteksi status ready dalam waktu kurang dari 1ms
Bottleneck kedua: startup Chromium dan penempatan CPU
- Saat Chromium start, penggunaan CPU tinggi karena renderer, compositor, dan V8 isolate dibuat sekaligus
- Setelah start, otomatisasi browser relatif lebih tenang
- Agen akan klik, menunggu, membaca, lalu klik lagi
- Browser sebagian besar menunggu halaman, respons jaringan, atau aksi agen berikutnya
- Karakteristik ini memungkinkan banyak browser dipacking dalam satu host
- Burst CPU saat startup ditangani dalam dua tahap
- Saat browser di-resume dan Chromium mulai jalan, vCPU dibiarkan unpinned
- Linux bisa menyebarkan pekerjaan CPU browser ke seluruh host tanpa mengikatnya ke core tertentu
- Setelah browser melaporkan status ready, vCPU dipin ke core yang stabil
- Jika pinning dilakukan sejak awal, banyak browser yang start bersamaan akan menumpuk di hot core yang sama dan sebagian launch gagal
- Penanganan hyperthread juga disesuaikan
- Satu core CPU fisik sering terlihat sebagai dua CPU logis yang disebut sibling thread
- Jika dua browser VM masing-masing mendapat satu sibling, keduanya berebut core fisik yang sama
- Dalam lingkungan bertingkat, persaingan ini muncul sebagai kegagalan launch
- Sekarang setiap browser mendapat kedua sibling thread dari core fisik yang digunakannya
- Setiap thread vCPU yang sudah dipin diberi real-time priority
- Dengan begitu Linux langsung menjalankan VM tanpa menundanya di belakang pekerjaan yang kurang penting
- Sebelum perubahan ini, dalam uji 1.000 browser, 17% sesi hilang tepat setelah dibuat
- Setelah perubahan, kehilangan dalam uji yang sama menjadi 0
Browser stealth tanpa layar
- Browser headless berjalan tanpa jendela yang terlihat, sedangkan browser headful berjalan seperti browser di laptop dengan jendela, grafik, dan frame rendering
- Chromium headless biasa mudah terdeteksi oleh situs yang memakai perlindungan anti-bot
- Menurut stealth benchmark dari Browser Use, Chromium headless biasa hanya berhasil menghindari pemblokiran sebesar 2%
- Jika Chromium yang sama dijalankan dalam mode headful dengan jendela terlihat, hanya lewat rendering saja tingkat lolos blokir naik menjadi 50%
- Karena itu banyak penyedia menjalankan browser headful dan tetap membayar biaya display server, GPU, serta compositor meskipun tidak ada manusia yang melihat layarnya
- Browser Use justru mengubah browser itu sendiri agar tetap bisa berjalan sepenuhnya headless
- Komponen pertama adalah fork Chromium
- Banyak alat stealth menyuntikkan JavaScript ke semua halaman setelah browser start untuk menyembunyikan otomatisasi
- Misalnya dengan menimpa nilai
navigator.webdriveragar situs melihatfalsealih-alihtrue - Situs bisa mendeteksi bahwa nilai seperti itu telah ditimpa
- Browser Use menambal lapisan rendah Chromium agar nilai-nilai itu tidak terekspos sejak awal
- Komponen kedua adalah fingerprinting
- Fingerprint browser adalah kombinasi informasi browser dan mesin yang dibaca situs web
- Ini mencakup ratusan detail seperti sistem operasi, ukuran layar, font, output grafis, audio, zona waktu, bahasa, dan lain-lain
- Browser Use memakai puluhan ribu fingerprint nyata dari macOS, Windows, dan Linux
- Browser ini mencatat tingkat lolos blokir 81% pada stealth benchmark dan 84,8% pada Halluminate BrowserBench
- Karena tanpa layar, biaya menjalankan browser lebih rendah dan scaling juga lebih mudah
Terhubung ke browser yang benar
- Setelah browser siap, pengguna terhubung lewat CDP
- URL publiknya adalah WebSocket URL
- Di depan armada browser ada edge router sederhana
- Router menerima koneksi WebSocket, bertanya ke control plane tentang lokasi browser terkait, lalu meneruskan byte CDP mentah ke VM yang benar
- Router tidak menentukan di mana browser akan dijalankan
- Jika satu router mati, router lain bisa menangani koneksi baru
- Penempatan ditangani oleh control plane, sedangkan router hanya meneruskan byte
Hasil dan langkah berikutnya
- Saat ini setiap sesi browser dijalankan dengan melanjutkan snapshot VM kecil di dalam EC2 biasa, lalu menjalankan Chromium headless di dalamnya
- Cold start VM kurang dari 400ms
- Latensi pembuatan browser dari API publik adalah p50 825ms dan p99 1,35 detik
- Angka ini diukur dalam stress test 10.000 sesi di mana semua browser berhasil start
- Leaderboard independen dari BrowserArena menempatkan Browser Use di peringkat 1 dengan $0.02/jam dan reliabilitas 100%
- Biaya terbesar yang masih tersisa dalam infrastruktur ini adalah Chromium itu sendiri
- Setelah resume, startup Chromium masih memakan sekitar 545ms pada p50
- Saat ini snapshot dibuat tepat sebelum Chromium mulai dijalankan
- Semua browser bangun dari titik yang sama dan bersih, lalu masing-masing memulai Chromium sendiri
- Langkah berikutnya adalah membuat snapshot setelah Chromium sudah berjalan
- Dengan begitu sesi baru bisa bangun bersama browser yang sudah hidup tanpa harus menyalakan browser dari awal
- Pekerjaan ini rumit
- Browser yang sedang berjalan memiliki device terbuka, timer, state grafis, state jaringan, dan state fingerprint
- Semua state itu harus dibuat aman sebelum freeze
- Setelah restore, tiap browser harus terlihat seperti browsernya sendiri, bukan salinan browser sebelumnya
- Browser Use Cloud kini tersedia di cloud.browser-use.com
1 komentar
Komentar Hacker News
Menjadikan melewati anti-bot sebagai tolok ukur terasa cukup tidak etis. Tujuan anti-bot adalah memblokir bot yang tidak diinginkan, dan layanan seperti ini pada akhirnya membuat web semakin tidak ramah bagi manusia dan makin mahal
Situs akan terus berusaha memblokir akses otomatis, dan hambatan untuk mengakses konten akan makin bertambah. Meningkatnya tuntutan verifikasi identitas di web tampaknya bukan hanya soal batasan usia atau “melindungi anak-anak”, tetapi juga efek turunan dari pertahanan terhadap bot dan perlindungan pendapatan iklan
Di situs yang tidak punya API, saya juga memakai scraper, dan saya mengindeks seluruh riwayat pembelian ke basis data agar bisa dianalisis. Saya tidak ingin menghabiskan lebih banyak waktu untuk melewati deteksi bot yang bodoh, dan jika datanya memang tidak bisa diakses dengan cara lain, saya bersedia membayar. Pada akhirnya ini cuma membakar sumber daya dalam permainan kucing-dan-tikus yang pada akhirnya akan dimenangkan scraper
Namun, menyediakan proxy residensial kemungkinan besar tidak etis. Banyak penyedia koneksi rumah dalam proxy semacam itu sering kali tidak tahu bahwa mereka telah dimasukkan ke layanan seperti itu
Jika saya tidak bisa duduk 24 jam di depan komputer demi mendapatkan tiket pertunjukan tertentu, sulit rasanya menyebut penggunaan bot pribadi untuk membeli tiket band favorit sebagai tidak etis. Sebaliknya, kalau tujuannya untuk calo, saya setuju itu tidak etis. Anti-bot untuk anti-bot pada dasarnya memungkinkan hal-hal yang menurut orang lain tidak boleh diotomatisasi, dan saya rasa cukup banyak pembaca Hacker News pernah melakukan hal seperti ini setidaknya sekali. Kalau murni demi keuntungan memang kurang bagus, tetapi jika dipakai untuk mendapat kesempatan melawan calo, itu terasa masuk akal
Karena mereka hanya salah satu dari banyak tenant SaaS dan bukan pelanggan cukup besar untuk menuntut CAPTCHA dihapus, mereka akhirnya hanya melewati batasan itu
Bagian yang terlewat di sini adalah bahwa virtualisasi bersarang pada instans EC2 biasa sudah dimungkinkan sejak Februari tahun ini. Sebelumnya, untuk menjalankan Firecracker VM, Anda harus memakai instans EC2 metal
Agak mengejutkan mereka masih tetap bertahan dengan Chromium sampai sejauh ini
Server MCP web-access kami[0] menjalankan instans browser sebagai subprocess dengan konfigurasi yang jauh lebih sederhana, dan peningkatan terbesar dalam stabilitas, CPU, dan penggunaan memori datang saat kami beralih dari Chrome ke Lightpanda[1]. Seperti dikatakan di akhir tulisan, browser yang lebih cepat mulai bisa jadi sejak awal hanyalah browser yang mengalokasikan memori lebih sedikit
[0]: https://github.com/EratoLab/web-access-mcp
[1]: https://lightpanda.io
Browser seperti LightPanda sama sekali tidak punya stealth dan sangat mudah dideteksi. Jika hal-hal yang tidak perlu dibuang, ada cara untuk membuat Chromium lebih cepat juga. Tanpa harus membangun ulang seluruh mesin dari nol, saya rasa Chromium bisa mencapai performa itu tanpa kehilangan stealth, yang merupakan prioritas utama. Bahasanya bukan masalah; C++ juga secepat Zig, tetapi saya setuju kebesaran Chromium memang nyata
Saya menjalankan API screenshot bernama ApiFlash, dan alih-alih memakai Firecracker di EC2, saya mengemas Chromium dalam image kontainer AWS Lambda
AWS Lambda memberi isolasi dan auto-scaling secara gratis, jadi sangat ideal untuk pekerjaan stateless yang bebannya bisa melonjak seperti screenshot. Menurut saya, ini memberi hampir semua keuntungan yang sama dengan solusi browser-use, tetapi dengan arsitektur yang jauh lebih sederhana. Trade-off-nya adalah cold start AWS Lambda, tetapi dalam praktiknya fungsi yang panas dipakai ulang pada pemanggilan beruntun. Jika volume panggilannya cukup, puncak beban jadi lebih landai dan cold start juga tidak terlalu sering terjadi
Masalah yang kami alami di Lambda adalah batas waktu eksekusi 15 menit, harga, tidak adanya mekanisme snapshot, dan kurangnya kontrol tingkat rendah atas host eksekusi. Kami mendukung hingga 4 jam dan bisa berjalan lebih lama jika perlu. Meski begitu, untuk sebagian besar use case otomasi web yang umum, Lambda sudah lebih dari cukup
Mereka bilang “Berikutnya: lewati startup Chromium”, tetapi saya jadi bertanya kenapa tidak mempertahankan sekumpulan browser yang sudah berjalan sebagai warm pool lalu menugaskannya ke permintaan yang masuk
Dari sudut pandang pengguna, latensinya akan hampir nol. Tentu perlu logika prediksi untuk menambah atau mengurangi warm pool sesuai pola trafik, tetapi ini tampak seperti solusi termudah
Warm pool itu bagus, tetapi tetap mengonsumsi sumber daya, dan Anda harus terus menyalakan browser untuk menjaga pool tetap hangat dan seimbang. Dengan perubahan berikutnya, kami berencana tetap mempertahankan startup Chromium sambil membuat VM siap dalam 50ms, sehingga sepenuhnya mengungguli warm pool. Beberapa pelanggan memerlukan parameter dan fitur khusus sehingga kompleksitas warm pool meningkat. Jalur umum mungkin cepat, tetapi jalur pengecualian bisa sangat lambat; kami ingin menjamin kecepatan cepat apa pun fitur yang dibutuhkan browser yang diminta
Firecracker adalah teknologi yang luar biasa. Kami memakainya di startup wawancara yang menjalankan runtime terisolasi untuk coding interview dan workspace pribadi, dan ini sangat stabil serta mengejutkan ringannya
Integrasi dengan Go SDK juga sangat mudah
Keren melihat userfaultfd makin banyak dipakai. Ini API yang sangat kuat karena memberi kendali penuh atas bagaimana dan dari mana memori diambil saat page fault terjadi
Memang benar EC2 biasa juga sudah merupakan VM, tetapi setahu saya ada EC2 tertentu yang menyediakan akses hypervisor sehingga Firecracker juga bisa dijalankan. Mohon koreksi jika saya salah
[1] https://aws.amazon.com/about-aws/whats-new/2026/02/amazon-ec...
Saya penasaran kenapa Firecracker diperlukan. Kenapa tidak langsung dijalankan di kontainer saja? Kekhawatiran soal isolasi bisa saya pahami, tetapi kombinasi browser dan container escape bukankah seperti CVE bernilai satu miliar dolar?
Kontainer memberi permukaan serangan yang jauh lebih luas dibanding VM, dan karena tidak dianggap aman menurut standar industri, kemungkinan sumber daya yang dialokasikan untuk menangani CVE container escape juga lebih sedikit dibanding pelarian dari VM
Bukankah untuk melakukan ini di instans non-
.metalperlu patch kernel? Sepertinya butuh patch PVM