Cloudflare, NGINX'ten Rust ile yazılmış kendi Pingora proxy'sine geçti

Cloudflare, içerik dağıtım ağının Rust dilinde yazılmış Pingora proxy'sini kullanacak şekilde geçiş yaptığını duyurdu. Yeni proxy, NGINX sunucu tabanlı yapılandırmayı Lua komut dosyalarıyla değiştiriyor ve günde bir trilyondan fazla isteği işliyor. Özel bir proxy'ye geçişin, yalnızca yeni özelliklerin uygulanmasına ve belleğin güvenli çalışması nedeniyle güvenliği artırmaya izin vermekle kalmayıp, aynı zamanda performans ve kaynak tasarrufunda da önemli bir artışa yol açtığı belirtiliyor - Pingora tabanlı çözümün kullanımını gerektirmiyor Lua'dır ve bu nedenle aynı miktarda trafiği işlerken %70 daha az kaynak CPU ve %67 daha az bellek tüketir.

Kullanıcılar ve uç sunucular arasındaki trafiğin proxy'sini oluşturmak için NGINX ve Lua scriptlerine dayalı bir sistem uzun süre Cloudflare'in ihtiyaçlarını karşıladı ancak ağ büyüdükçe ve karmaşıklığı arttıkça evrensel bir çözümün hem performans hem de performans açısından yetersiz kaldığı ortaya çıktı. performans ve müşteriler için yeni fırsatların genişletilebilirliği ve uygulanmasındaki sınırlamalar nedeniyle. Özellikle basit bir ağ geçidi ve yük dengeleyicinin ötesinde işlevsellik ekleme konusunda zorluklar yaşandı. Örneğin, sunucunun bir isteği işleyememesi durumunda, isteği başka bir sunucuya farklı bir HTTP başlık seti sağlayarak yeniden göndermek gerekli hale geldi.

Pingora, istekleri ayrı çalışan süreçlerine ayıran bir mimari yerine, Cloudflare kullanım durumlarında (büyük istatistiksel değişimle farklı sitelerden gelen yüksek trafik yoğunluğu) CPU çekirdekleri arasında kaynakların daha verimli bir şekilde dağıtıldığını gösteren çok iş parçacıklı bir model kullanıyor. Özellikle, nginx'in dengesiz istekleri süreçlere bağlaması, CPU çekirdeklerinde dengesiz yüke neden oldu, bu da kaynak yoğun isteklere ve G/Ç'nin engellenmesine ve diğer isteklerin işlenmesinin yavaşlamasına neden oldu. Ayrıca, bağlantı havuzunun işleyici işlemlerine bağlanması, diğer işleyici süreçlerinden önceden kurulmuş bağlantıların yeniden kullanılmasına izin vermiyordu; bu da çok sayıda işleyici işlemi olduğunda verimliliği azaltıyordu.

NGINX:

Cloudflare, NGINX'ten Rust ile yazılmış kendi Pingora proxy'sine geçti

Pingora:

Cloudflare, NGINX'ten Rust ile yazılmış kendi Pingora proxy'sine geçti

Pingora'nın uygulanması, yeni bağlantı kurulumlarının sayısını 160 kat azaltmayı ve yeniden kullanılan sorguların payını %87.1'den %99.92'ye çıkarmayı mümkün kıldı. Yeniden bağlantıların azaltılmasına ve CPU çekirdeklerinin daha verimli kullanılmasına ek olarak, yeni proxy'nin performans artışı esas olarak nginx ile kullanılan yavaş Lua işleyicilerinin kaldırılmasından kaynaklandı.

Rust dili, bellekle güvenli çalışmayı sağlayacak araçların kullanılabilirliğiyle birlikte yüksek performans elde etmek için seçildi. Cloudflare'in son derece nitelikli mühendislerinin C dilinde yazılmış kodu incelemesine rağmen bellek sorunlarına yol açan hataların (örneğin HTML ayrıştırıcısındaki bir güvenlik açığı) önüne geçilemediği belirtiliyor. Yeni koda gelince, Pingora'daki analiz hatalarının uygulamadaki sorunlardan değil, Linux çekirdeğindeki bir hatadan ve donanım arızalarından kaynaklandığı ortaya çıktı.

Ek olarak Linus Torvalds'ın bu günlerde gerçekleşen Açık Kaynak Zirvesi Avrupa konferansında dile getirdiği Rust dili desteğinin Linux çekirdeğine dahil edilmesiyle ilgili yorumunu da not edebiliriz. Rust dilinde aygıt sürücüleri geliştirmeye yönelik yamalar 6.0 çekirdeğine dahil edilmedi, ancak Linus'a göre bunlar büyük olasılıkla 6.1 çekirdeğine kabul edilecek; entegrasyonu geciktirmeyecek. Linus, güvenlik üzerindeki olumlu etkisinin yanı sıra, Rust'a destek ekleme motivasyonu olarak, eski katılımcıların yaşlanması bağlamında önemli olan yeni katılımcıların çekirdeği üzerinde çalışmaya olan ilgiyi artırma fırsatından da bahsediyor.

Kaynak: opennet.ru

Yorum ekle