BEAM (Erlang VM) kitabını neden yazdım
(happihacking.com)- Klarna'nın çekirdek sistemlerini ayakta tutarken edinilen gerçek saha deneyimlerinde, BEAM'deki 15 milisaniyelik bir duraklama büyük çaplı ödeme arızalarına ve acil müdahalelere yol açtı
- BEAM için güvenilir bir referans oluşturmak amacıyla kitap 10 yıla yayılan bir süreçte yazıldı
- Yazım sürecinde yayınevi değişikliği, teknik sorunlar ve defalarca yapılan yapı değişiklikleri gibi tekrar eden hayal kırıklıkları ve yeniden denemeler yaşandı
- Açık kaynak hâline geldikten sonra topluluk geri bildirimi ve katılımı, artan yıldız sayısı ve teşvik mesajları sürekli bir motivasyon kaynağı oldu
- Ana içerik BEAM VM'in yapısı ve işleyişi üzerine odaklanıyor; pratikte çalışan mühendisler için somut fayda sağlayacak şekilde kurgulandı
BEAM kitabını yazma motivasyonu
Post-mortem'ler, kahve ve 10 yıllık inat
- Klarna'da çekirdek ödeme sistemlerini işletirken, BEAM'in yalnızca 15 milisaniyelik bir durması yüz milyonlarca ödemenin başarısız olmasına, gece yarısı acil toplantılara ve hatta CEO'nun devreye girmesine kadar uzanan durumları defalarca yaşadı
- Böyle krizleri hızla çözmeye yardımcı olacak kaynakların eksikliği her zaman hissediliyordu; bir sonraki mühendisin sorunu daha hızlı çözebilmesi umuduyla The BEAM Book yazıldı
İlk yazım süreci
Başlangıç ve hayal kırıklığı
- Ekim 2012'de proje, tek bir DocBook dosyası ve büyük hedeflerle başladı
- İki haftalık commit'lerin çoğu yapı çalışmaları ve metadata güncellemelerine odaklandı; gerçek içerik ise çok azdı
- Kasım ayında AsciiDoc ve özel build script'lerine geçildi ve 6 ay içinde tamamlanması beklendi, ancak süregelen yeniden yazımlar ve yapı değişiklikleri nedeniyle ilerleme çok yavaştı
Yayıneviyle iş birliği
- 2013'te O’Reilly ile yayın sözleşmesi imzalandıktan sonra Atlassian Atlas'a geçildi, ancak dosya kaybı ve bölüm yönetimi sorunları sürüp gitti
- Git geçmişi, memnuniyetsizlik ve yapı düzeltmeleriyle dolu bir sürecin izlerini taşıyor
- Mart 2015'te, yalnızca build'in geçmesini sağlamak amacıyla bölümleri zorla chapter bazında ayırmak gibi geçici çözümler denendi
- İki ay sonra sözleşme sessizce sonlandırıldı; bu durum aynı anda hem yıkım hissi hem de rahatlama getirdi
- Pragmatic Bookshelf ile yapılan ikinci deneme de yavaş ilerleme nedeniyle yarım kaldı
Sıfırlama ve topluluk katılımı
- Ocak 2017'de yeni bir repository'ye massive commit ile tam taşıma yapıldı (6622 dosya, 1 milyon satır), ancak yeniden yazım yine tıkandı
- Mart 2017'de Asciidoctor tabanlı özel bir GitHub repository üzerinde yeniden başlandı; yalnızca gerekli kısımlar kopyalandı
- İki hafta sonra repository herkese açıldı ve aynı anda dış katkıcıların yazım hatası düzeltmeleri, diyagram eklemeleri ve lisans konusundaki katkıları hızla gelmeye başladı
Sürekli motivasyon kaynakları
- En büyük itici güç, özünde BEAM'in gerçekte nasıl çalıştığını anlama yönündeki kişisel merak ve istek oldu
- Topluluktan gelen geri bildirim ve öneriler yazma isteğini artırdı; GitHub'daki artan yıldız sayısı da sürekli bir motivasyon etkisi yarattı
- “Please continue being awesome” gibi örneklerde görüldüğü üzere, teşvik içeren issue'lar psikolojik destek açısından da önemli bir rol oynadı
- Erlang ve BEAM ile ilgili akademik etkinlikler ve konferanslarda kitabın giderek daha sık alıntılanması, böyle bir kaynağa ihtiyaç olduğunu gösterdi
- Twitter gibi platformlardaki sürekli anılmalar ve paylaşımlar da yazımın sürmesini teşvik etti
Kitabın yapısı ve hedef okur kitlesi
- İçerik, doğrudan büyük ölçekli Erlang sistemlerini tasarlayıp işletirken gerçekten ihtiyaç duyulan başlıklara odaklanıyor
- Scheduler ve process yönetimi: gerçek yük altında process scheduling, öncelikler ve dengeleme ilkeleri
- Process belleği: heap, stack, message ve binary yönetiminin biçimi ve bunun operasyonel etkileri
- Garbage collection ve bellek modeli: process bazlı / global GC'nin çalışma şekli, bellek sızıntıları ve referans yapıları
- Veri gösterim sistemi: integer, float, tuple, binary gibi verilerin iç etiketleme yapısı
- Compiler ve VM iç yapısı: derlemeden sonra VM içinde komutların gerçekte nasıl yürütüldüğü
- Tracing ve debugging:
dbg,erlang:trace, message ve event izleme gibi konular - Performans ayarı: gerçek kod profil çıkarma, gecikme nedenlerini analiz etme, reduction kavramını anlama
- Sistem mimarisi: ERTS, BEAM VM ve alt sistemlerin birlikte nasıl çalıştığı
- Erlang/Elixir'i üretimde kullanan profesyoneller için çok somut bir etki yaratmayı hedefliyor; dağınık kaynakların yerine güvenilir ve kapsamlı bir rehber sunmak temel amaç
Yazım sürecinden çıkarılan dersler
- Sebat, mükemmeliyetçiliği yener. İki kez yayın iptali yaşansa da sonuçta “bitmemiş” bırakmaktan daha iyi olduğu sonucuna varıldı
- Odaklanma ve sınır koyma önemlidir. Yazı için zaman ayırma, bildirimleri kapatma ve sıkı zaman yönetimi gerçek ilerlemenin kaynağı oldu
- Açıklık ve geri bildirim, kalite artışının anahtarıdır. Dışarıdan gelen düzeltmeler, teşvik ve düzenli uyarılar büyük yardım sağladı
- Kapsam yönetimi zorunludur. Kapsam daraltılarak Dirty Scheduler, JIT gibi zor konular daha sonraki eklere bırakıldı
- Yayın sonrası yinelemeli iyileştirme stratejisi önemlidir. BEAM her yıl değişiyor ve yaşayan bir Git repository'si olarak sürekli geliştirilebilir
- Gerçek bir son tarih somut motivasyon sağlar. Code Beam Stockholm etkinliğinden önce basılmış olma hedefi, gerçekten gerekli içeriğin seçilmesini sağladı
Tamamlanmış olmanın tanımı
- Gerçek basılı kopyayı eline aldığı anda sonunda bunun “tamamlandığı” hissine ulaşabildi
- Dağınık commit'ler tek bir fiziksel kitapta birleştiği için, en azından şimdilik bunun son olduğu ilan ediliyor
Katılım yolları
- The BEAM Book 1.0 şu anda Amazon üzerinden basılı kitap olarak satın alınabiliyor
- Yazım hataları ya da iyileştirme fırsatları fark edilirse veya iç yapılar merak ediliyorsa, GitHub repository'sinde star, fork, issue açma ve pull request kullanılabilir
- Katkıda bulunanların gerçek adları teşekkür bölümünde anılacak
- GitHub: theBeamBook
- Gerçek kullanıcı yorumları algoritma üzerinde daha etkili olduğu için, inceleme yazılması da özellikle rica ediliyor
- Gerçek sistemler odaklı BEAM internals workshop da düzenlenebiliyor; iletişim için happi@happihacking.com adresine e-posta gönderilmesi isteniyor
1 yorum
Hacker News görüşleri
git deposuna buradan bakılabilir
Yazarın, BEAM’i gerçekten anlamak istediği için konuyu kazımaya devam etme motivasyonu etkileyici. Bence böyle bir tutku harika işler ortaya çıkarıyor. Bu yüzden hemen satın almaya karar verdim. Kendi deneyimimden söyleyeyim: yayınevlerinden birkaç kez kitap yazma teklifi aldım ama istediklerimiz farklı olduğu için hiçbiri gerçekleşmedi. Örneğin ben 14 yaşındakilere yönelik bir Java başlangıç kitabı yazmak istemedim, yayınevi de benim derinlemesine ele almak istediğim konularla (ör. classloader) ilgilenmedi. Kişisel tutkuyla okur ihtiyacının kesiştiği alanı başkaları nasıl buluyor merak ediyorum
BEAM ve Erlang/OTP ile çalışmak, son 1 yıldaki en iyi geliştirme deneyimlerimden biriydi. Joe Armstrong’un “Programming Erlang: Software for a Concurrent World” kitabını kullandım ve yeni başlayanlara güçlü biçimde tavsiye ederim. “Designing for Scalability with Erlang/OTP” da iyi yorumlar alıyor ama daha başlayamadım. Ama derinlik açısından bu yeni kitap açık ara önde. BEAM gerçekten kadim bir uygarlığın bıraktığı uzaylı teknolojisi gibi. Kitabın tam zamanında çıkması güzel oldu, ben de hemen aldım. İki kez yayını iptal edilmiş olmasına rağmen kitabı tamamladığı için Dr. Erik Stenman’a hayran kaldım
Elixir ve BEAM, ağ tabanlı ya da yoğun pipeline içeren sistemler kurmak için en sevdiğim seçenek. Yıllarca prodüksiyonda her gün kullandım; son projelerimde seçim yapmak artık o kadar kolay değil ama gelişmeleri düzenli takip ediyorum. Bu kitabın çıkmasına minnettarım. Birkaç yıl önce prodüksiyondaki Elixir sistemlerinde debug yaparken tam da böyle bir kitaba ihtiyaç duymuştum. Mevcut kaynaklar ya fazla zor ya da tersine fazla yüzeyseldi
BEAM (Erlang virtual machine) hakkında bilgiye Wikipedia bağlantısından ulaşılabilir
Bence BEAM, açık kaynak dünyasının en az değer verilen teknolojilerinden biri. Örnek olarak whatsapp var. Elixir ve Erlang’ın yüksek eşzamanlılık gerektiren projelerde neden daha popüler olmadığını anlamak zor
“Erlang Runtime System(ERS)”ın genel Erlang çalışma zamanını, “Erlang RunTime System(ERTS)”ın ise Ericsson uygulamasına özgü ifadeyi anlatması güzel bir açıklama
Kitabı hemen satın aldım. İnternetten ücretsiz okunabiliyor ama yazarı biraz da olsa desteklemek istedim, o yüzden aldım
Klarna gibi çok büyük sistemlerde çalışmadığım için hissetmesi zor ama 15ms gecikmenin postmortem konusu olması ilginç
aliasözelliğini ekledi ama birçok kütüphane hâlâ bunu kullanmıyor.aliasmesaj kaybını önlemeyi amaçlıyor ve zaman aşımı mesajlarının kuyruğu kirletmesini engelliyor. Genelde uzun ömürlü süreçler kuyruğu bir döngü içinde işleyerek çalışırBEAM’e benzer başka VM’ler olup olmadığını merak ediyorum. Acaba BEAM o kadar iyi ki rakibi yok mu, yoksa yapmak bu kadar zor olduğu için mi benzeri az, bunu bilmek isterdim