Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan teknik bir eğitim içeriğidir. Eğitmen, Go programlama dilini kullanarak küme yönetimi ve port discovery konularını anlatmaktadır.
- Video, otomatik küme yönetimi için "join the cluster" metodu geliştirme, port discovery sistemi oluşturma, asenkron programlama ve cluster oluşturma adımlarını kapsamaktadır. Eğitim, teorik bilgilerin yanı sıra pratik uygulamalarla devam ederek, farklı node'ların cluster'a nasıl katılacağını ve liderlik durumlarının nasıl belirlendiğini göstermektedir.
- Eğitim içeriğinde ayrıca Kubernetes ortamında port discovery'nin nasıl uygulanabileceği, test süreçlerinde GitHub Actions ile nasıl kullanılabileceği ve Docker imajları ile nasıl entegre edilebileceği de ele alınmaktadır. Video, dağıtık sistemler, küme yönetimi ve otomasyon konularında bilgi edinmek isteyenler için faydalı olabilir.
- 01:35Kendi Kendini Yöneten Sistemler İçin Cluster Yönetimi
- Önceki oturumda cluster'ı ayağa kaldırmak için manuel olarak notları eklemek gerekiyordu, bu da kendini yöneten sistemler için uygun değil.
- Cloud native projelerde, cluster'ın kendini şekillendirmesi daha iyi olacaktır.
- Bu derste, konu go kullanarak network programı tarzı bir yapı oluşturacağız.
- 03:15Join the Cluster Metodu
- Demo projesinde yeni bir "join the cluster" kontratı eklenmiştir.
- Bu metod, yeni bir member ayağa kalktığında kendini liderinize kaydettirmesini sağlar.
- Proto dosyasından gelen bu metod, server adresi ve index bilgilerini alarak kendini cluster'a ekler.
- 09:12Metodun Implementasyonu
- Yeni bir endpoint yazarak receiver function oluşturuyoruz.
- Metodun imzası, context alır, joint cluster request ister ve response döndürür.
- İlk olarak, lider olup olmadığını kontrol ediyoruz; lider değilse hemen response döndürüyoruz.
- 12:33Lider Durumunda İşlem
- Lider durumunda, join cluster response'ı success olarak ayarlıyoruz.
- Water (su) kavramı kullanılarak cluster ait member havuzuna yeni bir eleman ekliyoruz.
- Water metoduna server id, adres ve index parametreleri ile birlikte maksimum bir saniye içinde halledilmesi gereken bir değer veriyoruz.
- 15:27Discovery Sistemi Tanıtımı
- Discovery sistemi, farklı portlarda ayağa kaldırılan memberları bulmak için kullanılır.
- Port discovery, discovery çeşitlerinden biridir ve belirli bir port aralığında tarama yapar.
- Gelecekte host discovery ve Kubernetes discovery gibi farklı discovery yöntemleri de kullanılabilir.
- 17:09Port Discovery Yapısı
- Port discovery için bir struct oluşturulur ve bu struct'te port aralığı, host ve member adresi gibi parametreler bulunur.
- Port aralığı, sistem kitlememesi için sınırlı olabilir (örneğin 8000-8100 arası).
- Host, genellikle localhost olabilir ancak load balancer veya domain name gibi farklı değerler de olabilir.
- 19:06Port Discovery Fonksiyonu
- "NewPortDiscovery" fonksiyonu, port discovery struct'ını oluşturur ve gerekli parametreleri alır.
- Bu fonksiyon, minimum port, maksimum port, host, member adresi ve server adresi gibi parametreleri kabul eder.
- Kullanıcılar bu fonksiyonu kullanarak discovery sistemi oluşturabilir veya konfigürasyon üzerinden parametreleri alabilir.
- 21:21Port Tarama İşlemi
- Port taraması öncesi, verilen host ve porttaki member'ın varlığını anlamaya çalışan "Dial" metodu oluşturulur.
- Dial metodu, hedef adresi (host:port formatında) belirleyerek bağlantı kurmaya çalışır.
- Bağlantı kurulduğunda, client üzerinden "Join" fonksiyonu çağrılır ve member'ın adresi lidera gönderilerek kaydedilir.
- 28:26Discovery Fonksiyonu
- "Discover" fonksiyonu, dışarıya açık (public) bir metod olarak tasarlanır ve discovery işlemini gerçekleştirir.
- Bu fonksiyon, receiver fonksiyonu içinde oluşturulur ve büyük harfle başlar.
- Internal fonksiyonlar (örneğin Dial) sadece bu metodun içinde kullanılır ve dışarıdan erişilemez.
- 28:52Port Aralığı ve Görev Grupları
- Port aralığı belirlerken başlangıç ve bitiş portları belirlenir ve bu aralıkta yapılacak işlem belirtilir.
- Görev grupları, birden fazla işlemi takip etmek için kullanılır; örneğin bir restoran kuryeleri gönderdiğinde, tüm kuryelerin teslimatını tamamlamasını beklemek gerekir.
- Görev grubunda her işlem için bir delta eklenir ve işlemler tamamlandığında delta değer sıfıra düşer, böylece tüm işlemlerin bittiği garantilenir.
- 31:14Asenkron İşlemler ve Görev Grupları
- Görev grupları genellikle asenkron işlemlerle kullanılır; örneğin tüm kuryeler aynı anda gönderildiğinde, her birinin durumu ayrı takip edilir.
- Görev grubu, işlemlerin tamamlandığını kontrol ederek kodun ilerlemesini sağlar.
- Görev grubu, işlemlerin tamamlandığını garanti ederek kodun ilerlemesini sağlar.
- 33:41Discovery Mekanizması
- Discovery mekanizması, yeni sunucuların mevcut cluster'a katılması için kullanılır.
- Sunucu ayağa kaldırılırken "main" metodu çalışır ve burada discovery işlemi başlatılır.
- Discovery işlemi, yeni sunucunun cluster'a katılması için gerekli bilgileri (port, adres, isim) kullanır.
- 37:38Sunucu Ayağa Kaldırma ve Cluster Testi
- İlk sunucu (bootstrap) ayağa kaldırılırken "bootstrap=true" parametresi kullanılır ve kendini lider olarak seçer.
- İkinci sunucu ayağa kaldırıldığında, discovery mekanizması ile cluster'a katılır ve kendini "add water endpoint"ine gönderir.
- Birden fazla sunucu (3, 4, 5, 6, 7, 8, 9) farklı portlarla ayağa kaldırılarak cluster'a eklenir ve sistemin çalışması test edilir.
- 44:28Sunucuların Çalıştırılması ve İzlenmesi
- Dokuz sunucu çalıştırıldı ve activity monitörde her sunucu çalıştırıldığında bir tırnak arttığı görüldü.
- Sunucular sıralı olarak eklenmedi, rastgele numaralarla (70, 22, 40, 70 gibi) eklendi.
- Lider sunucu öldürüldüğünde, sistem yeni bir lider seçti ve "raft lost leadership" mesajı geldi.
- 47:59Lider Sunucunun Tespiti ve Sorunlar
- Lider sunucunun kim olduğunu tespit etmek için yeni bir üye eklemek gerekiyordu.
- Sistemden uçurulan ancak hafızada kalan member nedeniyle sorunlar yaşanıyordu.
- "get configuration" metodu ile liderin kim olduğu öğrenilebileceğini fark ettiler.
- 50:32Sunucu Yönetimi ve Sorun Çözümü
- Fail olan sunucuların sistemden çıkarılması gerektiği belirtildi.
- Server 7'in lider olduğunu ve diğer sunucuların ona bağlantı kurmaya çalıştığını tespit ettiler.
- Joint cluster'ın daha iyi yapılandırılmasının ve ping mekanizmasının kullanılmasının önerildiği belirtildi.
- 56:46Sunucu Kaldırma İşlemi
- "remove server" komutu ile sunucuların sistemden çıkarılması gösterildi.
- Sunucu kaldırma işlemi için server id parametresi kullanıldı.
- Sunucu kaldırıldıktan sonra sistemdeki konfigürasyonda değişiklik yapıldığı ve kaldırılan sunucunun artık listede görünmediği görüldü.
- 1:00:12Port Discovery ve Kullanım Alanları
- Port discovery işlemi yapıldı ve sunucu tekrar geri getirildi.
- Port discovery daha çok testlerde kullanılır, örneğin GitHub Actions'ta smoke test gibi işlemlerde.
- Aynı host üzerinden birden fazla porta proses kaldırıp çalıştırabilirsiniz.
- 1:01:53Gelecek Adımlar ve Amacı
- Bir sonraki adım, classları test için nasıl otomasyon yapılabilir hale getirileceği üzerine odaklanacaktır.
- Nihai amaç, Docker imajından nasıl diplo edileceği ve operatör ile nasıl başlanacağına odaklanacaktır.
- Küme ile güvensiz ortamda bu sistemin nasıl uyum sağlanması gerektiği incelenecektir.
- 1:03:19Küme ve Discovery
- Küme ettiğinizde, servisleri port üzerinden bulamazsınız, dolayısıyla küme discovery gereklidir.
- Küme içindeki discovery, API'sini kullanarak namespace içindeki endpointleri listelemekle yapılabilir.
- Test sırasında gerçek bir küme olmadan, test konteyneri veya mevcut test sunucuları kullanılabilir.
- 1:05:05Gelecek Oturumlar ve Kapanış
- Bir sonraki oturumda isteklerinize göre farklı konular ele alınabilir, Kubernetes'e özel olmak zorunda değilsiniz.
- Çoklu klan için load balancer yapıyormuş hissiyatı vardı, ancak üyelerin nerede olduğunu bilmediğiniz için discovery sistemi gerekebilir.
- Oturum sonlandırıldı ve dinleyiciler için teşekkür edildi.