Throttling, trafik patlamaları, hizmet aşırı yüklenmesi, kaynak tükenmesi ve kötü amaçlı saldırılarla başa çıkmak için hassas trafik kontrolü sağlar. Bu sayede arka uç hizmetlerinin kararlılığını korurken maliyetleri azaltır ve kullanıcı deneyimini iyileştirir.
Throttling kavramları
Throttling, belirli bir zaman dilimi içinde bir hizmete gönderilen istek sayısını sınırlar (örneğin dakikada 300 istek veya saniyede 10 istek). Bu yöntem, bir hizmetin belirli bir istemci IP adresinden veya küresel istemcilerden gelen aşırı istekler nedeniyle aşırı yüklenmesini önler.
Örneğin, bir hizmete gönderilen istek sayısını dakikada 300 ile sınırlarsanız 301. istek reddedilir. Aynı zamanda, aşırı isteği belirten HTTP 429 durum kodu döndürülür.
Throttling modları
Envoy proxy'leri yerel throttling ve global throttling olmak üzere iki throttling modunu destekler. Yerel throttling, her hizmet örneğinin istek hızını sınırlar. Global throttling ise tüm Service Mesh (ASM) örneği genelinde hız sınırlamalarını uygulamak için global bir gRPC hizmeti kullanır. Farklı throttling seviyeleri uygulamak üzere her iki modu birleştirebilirsiniz.
|
Mod |
Açıklama |
Başvurular |
|
Yerel throttling |
|
|
|
Global veya dağıtılmış throttling |
|
Yerel throttling nasıl çalışır?
Bir Envoy proxy, yerel throttling'i uygulamak için token bucket algoritmasını kullanır. Paketlere sabit bir hızda token eklenir. Gelen her istek bir token tüketir. Paket boşaldığında sonraki istekler reddedilir. Genellikle aşağıdaki parametreleri belirtmeniz gerekir:
Paketin doldurulma aralığı
Her aralıkta pakete eklenen token sayısı
Varsayılan olarak bir Envoy proxy, bir istek reddedildiğinde HTTP 429 durum kodunu döndürür ve x-envoy-ratelimited üstbilgisi ayarlanır. HTTP durum kodunu ve yanıt üstbilgisini özelleştirebilirsiniz.
Throttling özelliğini kullanırken aşağıdaki kavramlara dikkat edin:
http_filter_enabled: Yerel hız sınırının kontrol edildiği ancak uygulanmadığı isteklerin yüzdesini gösterir.
http_filter_enforcing: Yerel hız sınırının uygulandığı veya zorlandığı isteklerin yüzdesini gösterir.
Değerleri yüzde olarak ayarlayın. Örneğin http_filter_enabled değerini isteklerin %10'una, http_filter_enforcing değerini ise isteklerin %5'ine ayarlayabilirsiniz. Bu şekilde throttling etkisini tüm isteklere uygulanmadan önce test edebilirsiniz.
Global throttling nasıl çalışır?
Global throttling, Envoy rate limit hizmetini kullanarak bir ASM örneği genelindeki istek oranlarını kontrol eder. Rate limit hizmeti trafiği merkezi olarak işler ve önceden tanımlanmış kurallara ve kotalara göre hız sınırlamalarını uygular.
Global throttling yapılandırması iki bölümden oluşur: Envoy rate_limits filtresi ve rate limit hizmeti yapılandırması.
rate_limits filtresi bir
actionslistesi içerir. Bir Envoy proxy, her isteği rate_limits filtresindeki her eylemle eşleştirmeye çalışır. Her eylem için bir tanımlayıcı oluşturulur. Bir tanımlayıcı, bir eyleme karşılık gelen tanımlayıcı girişlerinden oluşan bir kümeyi ifade eder. Her tanımlayıcı girişi,"descriptor-key-1": "descriptor-value-1"ve"descriptor-key-2": "descriptor-value-2"gibi bir anahtar-değer çiftidir. Daha fazla bilgi için bkz. config-http-filters-rate-limit.Rate limit hizmeti yapılandırması, her istek için oluşturulan tanımlayıcı girişiyle eşleşir. Rate limit hizmeti yapılandırması, belirli bir tanımlayıcı girişi kümesi için hız sınırını belirtir. Rate limit hizmeti, isteklerin hızlarının sınırlanıp sınırlanmayacağını belirlemek için Redis önbelleği ile etkileşime girer ve throttling kararını Envoy proxy'ye gönderir.
rate_limits filtresi ve rate limit hizmeti birlikte global throttling'i uygular. Filtre, yapılandırılan eyleme dayalı bir tanımlayıcı oluşturur ve bunu rate limit hizmetine gönderir; hizmet de geçerli sınırı belirleyerek bir throttling yanıtı döndürür. Bu mekanizma, istek oranları üzerinde tam kontrol sağlamanıza olanak tanır ve arka uç hizmetlerini trafik patlamalarına karşı korur.