Ana Sayfa

Discord'da Elixir Sistemlerini İzleme: Kesintisiz Performansın Sırrı

1 dk okuma

Discord, kullanıcılarına anlık sohbet, mesajlaşma ve içerik paylaşımı deneyimi sunmak için Elixir'in güçlü eşzamanlılık mekanizmalarından faydalanarak her bir sunucuyu ("guild") bağımsız bir şekilde çalıştırır. Ancak zaman zaman, bir guild kullanıcı etkinliğine ayak uyduramayabilir, bu da gecikmelere veya tamamen kesintilere yol açabilir. Böyle durumlarda, nöbetçi mühendisler sorunu anlamak ve tekrarlanmasını önlemek için gözlemlenebilirlik araçlarına başvurur.

Mühendislerin araştırması genellikle metrikler ve log'larla başlar. Discord, her kullanıcı eyleminin işlenme sıklığını ve süresini ölçen geniş bir enstrümantasyon yelpazesine sahiptir. Bu veriler, ani etkinlik artışları hakkında ipuçları verebilir ancak kullanıcı deneyiminin uçtan uca nasıl etkilendiğini tam olarak göstermez. Daha detaylı bilgi için "guild timings" adı verilen özel bir araç kullanılır. Bu araç, her guild eyleminin o dakikada ne kadar zaman harcadığını bellekte tutar. Ancak bu veriler o kadar yüksek hacimlidir ki, sürekli depolanamaz ve en büyük guild'ler hariç sık sık döndürülür, bu da yine uçtan uca deneyimi tam olarak yansıtmaz.

Diğer Discord ekipleri, bir operasyonun bileşenlerinin ne kadar sürdüğünü gösteren dağıtık izleme (Application Performance Monitoring - APM) araçlarından büyük fayda sağlamıştır. Ancak Elixir yığınına izleme eklemek, Elixir'in yerleşik iletişim araçlarının HTTP başlıkları gibi bir meta veri katmanına sahip olmaması nedeniyle zorlu bir görevdi. Bu nedenle Discord, kendi izleme sistemini sıfırdan geliştirmek zorunda kaldı. Servisler arası iletişimin temelini değiştirmelerine rağmen, bu entegrasyonu herhangi bir kesinti olmadan başarıyla gerçekleştirdiler.

İçgörü

Discord, Elixir tabanlı dağıtık sistemlerinde performansı ve kullanıcı deneyimini sürekli kılmak için kendi özel izleme çözümünü geliştirerek karmaşık teknik zorlukların üstesinden geldi.

Kaynak