Alasan Saya Menulis Buku tentang BEAM (Erlang VM)
(happihacking.com)- Berdasarkan pengalaman langsung saat memelihara sistem inti Klarna, jeda BEAM selama 15 milidetik memicu gangguan pembayaran berskala besar dan respons darurat
- Dengan tujuan membuat referensi yang dapat diandalkan tentang BEAM, buku ini ditulis selama 10 tahun
- Selama proses penulisan, penulis mengalami frustrasi dan mencoba lagi berulang kali, termasuk berganti penerbit, masalah teknis, dan beberapa kali perubahan struktur
- Setelah dijadikan open source, umpan balik komunitas dan partisipasi, bertambahnya bintang, serta dorongan dari orang lain menjadi sumber motivasi yang berkelanjutan
- Inti pembahasannya berfokus pada struktur dan operasional BEAM VM, dengan susunan yang benar-benar membantu engineer praktis
Motivasi menulis buku BEAM
Post-mortem, kopi, dan kegigihan selama 10 tahun
- Saat mengoperasikan sistem pembayaran inti di Klarna, penulis berulang kali mengalami situasi ketika jeda BEAM hanya 15 milidetik berujung pada jutaan kegagalan pembayaran, rapat darurat dini hari, hingga CEO ikut dipanggil
- Penulis selalu merasa kurang karena tidak adanya materi yang bisa dipakai untuk menyelesaikan krisis semacam itu dengan cepat, dan menulis The BEAM Book dengan harapan engineer berikutnya dapat menyelesaikan masalah lebih cepat
Proses penulisan awal
Awal dan frustrasi
- Pada Oktober 2012, proyek dimulai dengan satu file DocBook dan ambisi besar
- Commit selama 2 minggu sebagian besar berfokus pada pekerjaan struktur dan pembaruan metadata, dengan isi nyata yang sangat sedikit
- Pada November, penulis beralih ke AsciiDoc dan custom build script serta berharap selesai dalam 6 bulan, tetapi kemajuan sangat lambat karena penulisan ulang dan perubahan struktur yang terus berulang
Kolaborasi dengan penerbit
- Setelah menandatangani kontrak penerbitan dengan O’Reilly pada 2013, proyek dimigrasikan ke Atlassian Atlas, tetapi masalah kehilangan file dan pengelolaan bab terus terjadi
- Riwayat Git dipenuhi keluhan dan revisi struktur yang tidak ada habisnya
- Pada Maret 2015, penulis mencoba langkah darurat seperti memisahkan konten secara paksa per bab hanya agar build bisa lolos
- Dua bulan kemudian, kontrak dihentikan secara diam-diam, memunculkan rasa hancur sekaligus lega pada saat yang sama
- Upaya kedua bersama Pragmatic Bookshelf juga terhenti di tengah progres yang lambat
Reset dan partisipasi komunitas
- Pada Januari 2017, seluruh proyek dipindahkan ke repositori baru melalui massive commit (6622 file, 1 juta baris), tetapi penulisan ulang kembali mandek
- Pada Maret 2017, penulis memulai lagi dari repositori GitHub privat berbasis Asciidoctor, hanya menyalin bagian yang diperlukan
- Dua minggu kemudian, repositori dibuka untuk publik dan kontributor eksternal segera aktif memperbaiki typo, menambahkan diagram, serta membantu lisensi
Faktor yang menjaga motivasi
- Pada dasarnya, rasa ingin tahu pribadi dan keinginan untuk memahami cara kerja BEAM yang sebenarnya menjadi pendorong terbesar
- Umpan balik dan saran dari komunitas memperkuat tekad untuk terus menulis, dan jumlah bintang di GitHub memberi efek motivasi yang berkelanjutan
- Issue berisi dukungan seperti “Please continue being awesome” juga berperan besar sebagai penopang psikologis
- Buku ini makin sering dirujuk dalam forum akademik dan konferensi terkait Erlang dan BEAM, yang membuktikan kebutuhannya
- Penyebutan dan pembagian berkelanjutan di Twitter dan tempat lain juga mendorong penulis untuk terus melanjutkan
Struktur buku dan target pembaca utama
- Isinya berfokus pada hal-hal yang benar-benar dibutuhkan saat merancang dan mengoperasikan sistem Erlang berskala besar
- Scheduler dan manajemen proses: penjadwalan proses di bawah beban nyata, prioritas, dan prinsip balancing
- Memori proses: heap, stack, pesan, cara pengelolaan biner, dan dampaknya terhadap operasional
- Garbage collection dan model memori: cara kerja GC per proses/global, kebocoran memori, dan struktur referensi
- Sistem representasi data: struktur tagging internal untuk integer, float, tuple, binary, dan data lain
- Compiler dan struktur internal VM: alur eksekusi instruksi yang sebenarnya di VM setelah kompilasi
- Tracing dan debugging: dbg, erlang:trace, pelacakan pesan dan event, dan lain-lain
- Performance tuning: profiling kode nyata, analisis penyebab latensi, dan cara memahami reduction
- Arsitektur sistem: prinsip kerja terintegrasi dari ERTS, BEAM VM, dan subsistemnya
- Buku ini memberi dampak yang sangat praktis bagi operator Erlang/Elixir di dunia kerja, dengan tujuan utama menjadi panduan komprehensif yang tepercaya sebagai pengganti materi yang tercerai-berai
Pelajaran dari proses penulisan
- Ketekunan mengalahkan perfeksionisme. Bahkan setelah dua kali pembatalan penerbitan, kesimpulannya tetap bahwa hasil yang belum sempurna lebih baik daripada tidak selesai
- Fokus dan penetapan batas itu penting. Menyediakan waktu khusus untuk menulis, mematikan notifikasi, dan manajemen waktu yang ketat menjadi sumber kemajuan nyata
- Keterbukaan dan umpan balik adalah inti peningkatan kualitas. Koreksi dari luar, dukungan, dan dorongan yang konsisten sangat membantu
- Manajemen scope adalah keharusan. Dengan menyesuaikan ruang lingkup, topik yang lebih sulit seperti Dirty Scheduler dan JIT dipindahkan ke lampiran di masa depan
- Strategi perbaikan berulang setelah rilis itu penting. BEAM berubah setiap tahun, dan sebagai repositori Git yang hidup, buku ini bisa terus disempurnakan
- Menetapkan deadline yang nyata adalah motivasi paling efektif. Tenggat untuk dicetak sebelum acara Code Beam Stockholm memaksa penulis memilih isi yang benar-benar esensial
Definisi selesai
- Saat benar-benar memegang edisi cetak di tangan, penulis akhirnya bisa merasakan arti “selesai”
- Commit yang sebelumnya tersebar kini terikat menjadi satu buku yang utuh, sehingga untuk saat ini penulis menyatakan proyek ini selesai
Cara berpartisipasi
- The BEAM Book 1.0 saat ini dapat dibeli dalam versi cetak di Amazon
- Jika menemukan typo atau hal yang bisa ditingkatkan, atau ingin memahami struktur internalnya, Anda bisa menggunakan star, fork, membuat issue, dan pull request di repositori GitHub
- Nama asli kontributor akan disebutkan dalam bagian ucapan terima kasih
- GitHub: theBeamBook
- Karena ulasan pengguna lebih berpengaruh pada algoritme, pembaca juga sangat didorong untuk meninggalkan review
- Workshop BEAM internals yang berfokus pada sistem nyata juga dapat diadakan; untuk pertanyaan, silakan kirim email ke happi@happihacking.com
1 komentar
Komentar Hacker News
Repositori git bisa dilihat di sini
Motivasi penulis yang terus menggali karena ingin benar-benar memahami BEAM sangat berkesan. Menurut saya, gairah seperti inilah yang menghasilkan karya hebat. Karena itu saya langsung memutuskan untuk membeli. Dari pengalaman saya sendiri, saya beberapa kali mendapat tawaran menulis buku dari penerbit, tetapi tidak pernah jadi karena arah yang diinginkan berbeda. Misalnya, saya tidak ingin menulis buku pengantar Java untuk anak usia 14 tahun, sementara penerbit tidak tertarik pada topik yang saya dalami secara mendalam (misalnya
classloader). Saya penasaran bagaimana orang lain menemukan irisan antara gairah pribadi dan kebutuhan pembacaPengalaman saya dengan BEAM dan Erlang/OTP adalah salah satu pengalaman pengembangan terbaik dalam setahun terakhir. Saya memakai buku Joe Armstrong “Programming Erlang: Software for a Concurrent World”, dan sangat ingin merekomendasikannya untuk pemula. “Designing for Scalability with Erlang/OTP” juga mendapat ulasan bagus, tetapi saya belum sempat memulainya. Namun dari sisi kedalaman, buku kali ini jelas jauh lebih unggul. BEAM benar-benar terasa seperti teknologi alien yang ditinggalkan peradaban kuno. Buku itu terbit di waktu yang tepat, jadi saya langsung membelinya. Saya kagum pada Dr. Erik Stenman yang tetap menyelesaikan buku ini bahkan setelah penerbitannya dibatalkan dua kali
Elixir dan BEAM adalah pilihan favorit saya untuk membangun sistem yang berbasis jaringan atau memiliki banyak pipeline. Saya menggunakannya setiap hari di production selama beberapa tahun, dan walau pada proyek-proyek terbaru pilihannya tidak selalu mudah, saya tetap rutin mengikuti perkembangannya. Terima kasih atas terbitnya buku ini. Ini adalah buku yang sangat saya harapkan beberapa tahun lalu saat melakukan debugging di Elixir production. Materi yang ada sebelumnya terasa terlalu sulit atau sebaliknya terlalu dangkal
Informasi tentang BEAM (Erlang virtual machine) bisa dilihat di tautan Wikipedia
Saya rasa BEAM adalah salah satu teknologi paling diremehkan di dunia open source. Contohnya ada WhatsApp. Masih jadi misteri bagi saya mengapa Elixir dan Erlang tidak lebih populer untuk proyek dengan konkurensi tinggi
Saya suka penjelasan bahwa “Erlang Runtime System(ERS)” mengacu pada runtime Erlang secara umum, sedangkan “Erlang RunTime System(ERTS)” adalah istilah yang terbatas pada implementasi Ericsson
Saya langsung membeli bukunya. Memang bisa dibaca gratis secara online, tetapi saya tetap ingin sedikit mendukung penulisnya dengan membeli
Saya tidak mengerjakan sistem berskala besar seperti Klarna, jadi sulit membayangkan bahwa delay 15ms bisa menjadi isu postmortem
gen_serveruntuk melindungi shared state, konsepnya mirip mutex raksasa. Kalaugen_servermembutuhkan 20us untuk memproses satu permintaan, maka delay 15ms berarti ada 750 pesan menumpuk di message queue. Jika message queue itu kemudian digunakan dengan pola yang tidak efisien, performanya bisa turun drastis. BEAM hanya mengoptimalkan message queue untuk pola-pola tertentu, sedangkan pada pola lain waktu pemrosesan meningkat seiring panjang queue. Jika adareceiveyang tidak aman dipakai di dalam library, penurunan performa yang tak terduga bisa muncul. Baru-baru ini BEAM menambahkan fituraliasuntuk membantu masalah message queue, tetapi banyak library belum memakainya. Tujuanaliasadalah mencegah kehilangan pesan, dan juga mencegah queue tercemari oleh pesan timeout. Biasanya proses yang berumur panjang akan memproses queue dalam loopSaya penasaran apakah ada VM yang mirip dengan BEAM. Apakah memang BEAM sedemikian unggul sampai tidak punya pesaing, atau memang sesulit itu untuk dibuat