Gobetween, Go ile yazılmış hafif bir L4 yük dengeleyicidir. HTTP içeriğini yorumlamadan bağlantıları backend’ler arasında dağıtması, TCP/UDP tabanlı servislerde sade ve düşük ek yükle çalışan bir trafik katmanı kurmayı sağlar.
Mono’da kullanım alanları
- Veritabanı / kuyruk arkadaki yük dengeleme
- L4 trafiği için minimal yapı
- Health-check tabanlı dinamik yönlendirme
Üretim tasarımı
Backend listesi, health check aralıkları, bağlantı timeout’ları ve gözlemlenecek metrikler tanımlı olmalıdır. Gobetween’i bir web uygulamasının tüm güvenlik ve yönlendirme sorumluluğunu üstlenen tek araç olarak değil, ihtiyaca uygun protokol katmanı olarak konumlandırmak daha sağlıklıdır.
L4 yük dengeleme, uygulama farkındalığının yerine geçmez
Gobetween’in yönlendirdiği bir TCP bağlantısının açılması, backend’in doğru rolü üstlendiğini göstermez. Örneğin bir veritabanı replikası bağlantı kabul edebilir fakat yazma işlemlerine uygun olmayabilir. Bütün node’ları aynı havuza koymak, yazma trafiğini yanlış sunucuya gönderebilir. Rol farkındalığı olan bir sağlık kontrolü veya veritabanına özel bağlantı katmanı ayrıca tasarlanmalıdır.
Benzer şekilde mesaj kuyruğu servisleri çoğu zaman kendi küme ve istemci keşif mekanizmalarına sahiptir. Önlerine yük dengeleyici eklemek otomatik olarak daha güvenilir bir mimari oluşturmaz. İstemcinin yeniden bağlanma davranışı, protokolün oturum özellikleri ve backend’in desteklediği topoloji incelenmelidir.
Gobetween, HAProxy ve API gateway farkları
| Beklenti | Uygun yaklaşım |
|---|---|
| Sade TCP/UDP bağlantı dağıtımı | Gobetween’in protokol ve keşif desteği değerlendirilir. |
| HTTP başlığına veya URL’ye göre karar | HAProxy, Nginx veya başka bir L7 proxy gerekir. |
| API tüketicisi, kimlik ve kota yönetimi | Kong gibi bir API gateway daha uygun olabilir. |
| Küme rollerine göre veritabanı yönlendirme | Protokole ve veritabanına özgü sağlık/rol kontrolü gerekir. |
Küçük bir binary ile dağıtım kolaylığı, toplam işletim maliyetinin yalnızca bir parçasıdır. Sürüm bakımı, güvenlik güncellemeleri, ekibin hata ayıklama deneyimi ve ihtiyaç duyulan entegrasyonlar değerlendirmeye dahil edilmelidir. Yeni kurulum kararı verilirken projenin güncel bakım durumu ve kullanılan sürümün destek olanakları kontrol edilir.
UDP ve TLS için ayrı test senaryoları
UDP bağlantısız bir protokoldür. Sanal oturum eşlemesinin süresi, paketlerin farklı backend’lere yönlenmesi ve kaynak IP’nin nasıl taşındığı uygulamanın beklentileriyle uyumlu olmalıdır. TCP için başarılı olan bir failover testi, UDP iş yükünün de doğru çalıştığını kanıtlamaz.
TLS sonlandırmada sertifika, özel anahtar erişimi ve backend bağlantısının yeniden şifrelenmesi açıkça belirlenir. TLS passthrough ise şifreli trafiği backend’e ulaştırır; HTTP içeriğine göre karar verme imkânını sınırlar. İstemci IP’si için PROXY protocol kullanılıyorsa iki tarafın da bu biçimi desteklemesi gerekir.
Mono’nun devreye alma ölçütleri
Yük testi; bağlantı kurma hızı, eşzamanlı bağlantı sayısı, backend hatası ve uzun bağlantıların kesilmesini kapsar. DNS değişikliğinin mevcut bağlantıları taşımayacağı özellikle hesaba katılır. Yönetim API’si internete açılmadan, konfigürasyon sürümleri ve erişim yetkileri tanımlanır. Amaç az bileşenli bir kurulumun gözlemlenebilirlik ve güvenlikten ödün vermemesidir.

