Erlang ve OTP: Telekomdan Dünyaya Altı Dokuzluk Dayanıklılık

Bir yazılım sisteminin yıllarca çalışması kulağa bilim kurgu gibi gelebilir. Erlang dünyasında ise sunucuyu yeniden başlatmadan kod güncellemek, çöken süreçleri otomatik olarak ayağa kaldırmak ve milyonlarca eşzamanlı bağlantıyı yönetmek tasarımın doğal parçalarıdır. Ericsson laboratuvarlarında telekom sistemleri için doğan Erlang, bugün mesajlaşmadan fintek altyapılarına kadar uzanan yolculuğunda hâlâ yüksek erişilebilirliğin en güçlü araçlarından biridir. ``

Altı dokuz gerçekte ne demek?

Erişilebilirlik, sistemin çalışır durumda olduğu sürenin toplam süreye oranıdır:

\[A = \frac{T_{çalışma}}{T_{toplam}} \times 100\]

%99,9999 erişilebilirlik, yani “altı dokuz”, yılda yaklaşık 31,5 saniyelik kesinti bütçesi anlamına gelir. Kahveniz soğumadan bütün yıllık hata hakkını tüketebilirsiniz!

Erişilebilirlik Yıllık yaklaşık kesinti Pratik anlamı
%99 3,65 gün Basit iç sistemler
%99,9 8 saat 46 dakika Ortalama web hizmetleri
%99,99 52 dakika Kritik ticari sistemler
%99,9999 31,5 saniye Telekom sınıfı altyapı

erlang-ve-otp-45

Erlang tek başına altı dokuz garantisi vermez. Ancak hata izolasyonu, dağıtık çalışma ve otomatik iyileşme için sunduğu yapı taşları bu hedefi ulaşılabilir kılar.

Erlang’ın sırrı: küçük ve izole süreçler

Erlang süreçleri işletim sistemi süreçleri değildir. Çok hafiftirler, belleklerini paylaşmazlar ve birbirlerine mesaj göndererek haberleşirler. Bu yaklaşım, paylaşılan bellekteki kilit yarışlarını büyük ölçüde ortadan kaldırır.

-module(counter).
-export([start/0, loop/1]).

start() ->
    spawn(fun() -> loop(0) end).

loop(Value) ->
    receive
        {increment, From} ->
            NewValue = Value + 1,
            From ! {value, NewValue},
            loop(NewValue);
        stop ->
            ok
    end.

Bu örnek, kendi durumunu taşıyan hafif bir sayaç süreci oluşturur. receive posta kutusundaki mesajları işler; spawn ise yeni süreci başlatır. Bir süreç bozulduğunda diğerlerinin belleği kirlenmez. Böylece hata, bütün uygulamayı devirmek yerine küçük bir bölmede tutulur.

OTP, tek kullanımlık parola değildir

Buradaki OTP, Open Telecom Platform anlamına gelir. Erlang üzerinde güvenilir uygulamalar geliştirmek için davranış kalıpları, süreç yöneticileri ve standart kütüphaneler sunar.

OTP bileşeni Görevi
gen_server Durum tutan sunucu süreçleri oluşturur
supervisor Çöken çocuk süreçleri yeniden başlatır
application Bileşenlerin başlatılmasını ve durdurulmasını yönetir
release Sürüm paketleme ve yükseltme sağlar

Bir supervisor tanımı oldukça sade olabilir:

init([]) ->
    Child = #{id => worker,
              start => {worker, start_link, []},
              restart => permanent,
              type => worker},
    {ok, {{one_for_one, 5, 10}, [Child]}}.

one_for_one, yalnızca çöken çocuğu yeniden başlatır. 5, 10 ayarı ise on saniyede beşten fazla yeniden başlatma olursa supervisor’ın pes etmesini sağlar. Böylece sonsuz hata döngüsü gizlenmez; problem üst seviyedeki denetleyiciye taşınır.

“Let it crash” neden umursamazlık değildir?

“Bırak çöksün” yaklaşımı, hataları görmezden gelmek demek değildir. Savunmacı kodla her ihtimali yamamak yerine süreçlerin başarısız olabileceği kabul edilir. Kritik durum başka süreçlerde tutulur, hata kayda geçirilir ve supervisor bilinen temiz bir başlangıç durumunu kurar.

Bu modelin teorik gücü hata izolasyonundan gelir. Tek bir bileşenin başarısızlık olasılığı $p$ ise bağımsız yedeklerin birlikte başarısız olma olasılığı yaklaşık $p^n$ olur. Gerçek sistemlerde bağımsızlık kusursuz değildir; aynı veri merkezi, ağ veya hatalı sürüm ortak risk yaratabilir. Bu yüzden Erlang mimarisi izleme, coğrafi dağıtım ve doğru kapasite planlamasıyla tamamlanmalıdır.

Erlang bugün Elixir ekosistemine de temel olan BEAM sanal makinesi sayesinde sohbet, oyun, ödeme ve IoT sistemlerinde yaşamayı sürdürüyor. Sözdizimi herkese tanıdık gelmeyebilir; fakat “hata olacak, önemli olan sistemin iyileşmesi” fikri modern dağıtık sistemlerin tam merkezindedir. Telekomdan kalan asıl miras da budur: hiç hata yapmayan yazılım değil, hata yaptığında hizmet vermeye devam eden yazılım.

Yorumlar