Ağ Geçidi Toplama düzeni

Azure Traffic Manager

Tek tek birden çok isteği tek bir istekte toplamak için ağ geçidi kullanın. Bu düzen, bir istemcinin bir işlemi gerçekleştirmek için farklı arka uç sistemlerine birden çok çağrı yapmasını gerektiren durumlarda kullanışlıdır.

Bağlam ve sorun

Bir istemcinin tek bir görevi gerçekleştirmek için çeşitli arka uç hizmetlerine birden çok çağrı yapması gerekebilir. Bir görevi gerçekleştirmek için birden çok hizmete bağımlı olan bir uygulamanın her istek için kaynak harcaması gerekir. Uygulamaya yeni bir özellik veya hizmet eklendiğinde ek istekler gerekeceğinden, kaynak gereksinimleri ve ağ çağrıları daha da artar. İstemci ve arka uç arasındaki bu iletişim yoğunluğu, uygulamanın performansını ve ölçeğini olumsuz yönde etkileyebilir. Mikro hizmet mimarilerinde birçok küçük hizmetten oluşan uygulamalardaki hizmetler arası çağrı miktarı doğal olarak daha yüksek olduğundan, bu sorun daha da yaygın hale gelmiştir.

Aşağıdaki diyagramda, istemci her bir hizmete (1,2,3) istek gönderir. Her hizmet isteği işler ve uygulamaya (4,5,6) yanıt gönderir. Genellikle gecikme süresi yüksek olan bir hücresel veri ağı kullanılıyorsa, bu şekilde ayrı ayrı istekler gerçekleştirilmesi verimsizdir ve bağlantının kopmasına ya da isteklerin tamamlanmamasına yol açabilir. Her istek paralel olarak gerçekleştirilebilse bile uygulamanın her istek için her biri ayrı bağlantılar aracılığıyla olmak üzere veri göndermesi, beklemesi ve verileri işlemesi gerekeceğinden hata olasılığı artar.

Ağ Geçidi Toplama düzeni için sorun diyagramı

Çözüm

İstemci ile hizmetler arasındaki iletişim yoğunluğunu azaltmak için bir ağ geçidi kullanın. Ağ geçidi istemci isteklerini alır, çeşitli arka uç sistemler gönderir ve ardından sonuçları toplayıp istekte bulunan istemciye geri gönderir.

Bu düzen, uygulamanın arka uç hizmetlerine yönelik olarak yaptığı istek sayısını azaltabilir ve yüksek gecikmeli ağlar üzerinden uygulama performansını artırabilir.

Aşağıdaki diyagramda, uygulama tarafından ağ geçidine bir istek gönderilir (1). İstek, ek isteklerin yer aldığı bir paketi içerir. Ağ geçidi bunları çözer ve her isteği ilgili hizmete göndererek işler (2). Her hizmet ağ geçidine bir yanıt döndürür (3). Ağ geçidi, her bir hizmetten alınan yanıtları birleştirir ve yanıtı uygulamaya gönderir (4). Uygulama tek bir istek gerçekleştirir ve ağ geçidinden tek bir yanıt alır.

Ağ Geçidi Toplama düzeni için çözüm diyagramı

Sorunlar ve dikkat edilmesi gerekenler

  • Ağ geçidi, arka uç hizmetleri arasında bağ kurulmasına yol açmamalıdır.
  • Gecikme süresinin mümkün olduğunca az olması için ağ geçidinin arka uç hizmetlerine yakın olması gerekir.
  • Ağ geçidi hizmeti bir tek hata noktası olabilir. Ağ geçidinin uygulamanızdaki kullanılabilirlik gereksinimlerini karşılayacak şekilde doğru olarak tasarlandığından emin olun.
  • Ağ geçidi bir performans sorununa neden olabilir. Ağ geçidinin yükü işlemek için yeterli performansa sahip olduğundan ve beklediğiniz büyüme oranını karşılayacak şekilde ölçeklendirilebileceğinden emin olun.
  • Hizmetler için zincirleme bir şekilde yayılan hatalara yol açmadığınızdan emin olmak için ağ geçidinde yük testi gerçekleştirin.
  • Bölme perdeleri, devre kesme, yeniden deneme ve zaman aşımları gibi tekniklerden yararlanarak güçlü bir tasarım uygulayın.
  • Bir veya daha fazla hizmet çağrısı çok uzun sürüyorsa, zaman aşımına uğradı ve kısmi bir veri kümesi döndürülebilir. Uygulamanızın bu senaryoda nasıl davranacağını göz önünde bulundurun.
  • Arka uçtaki bir gecikmenin uygulamada performans sorunlarına neden olmasını önlemek için zaman uyumsuz G/Ç kullanın.
  • Her bir çağrıyı izlemek için bağıntı kimlikleri kullanarak dağıtılmış izleme uygulayın.
  • İstek ölçümlerini ve yanıt boyutlarını izleyin.
  • Hataların işlenmesine yönelik bir yük devretme stratejisi olarak önbelleğe alınmış verileri döndürmeyi göz önünde bulundurun.
  • Ağ geçidinde yerleşik olarak toplama özelliğine sahip olmak yerine ağ geçidinin arkasına bir toplama hizmeti yerleştirmeyi göz önünde bulundurun. Büyük olasılıkla ağ geçidindeki diğer hizmetlerden farklı kaynak gereksinimlerine sahip olacak istek toplama hizmeti, ağ geçidinin yönlendirme ve boşaltma işlevlerini etkileyebilir.

Bu düzenin kullanılacağı durumlar

Bu düzeni aşağıdaki durumlarda kullanın:

  • Bir istemcinin bir işlemi gerçekleştirmek için birden fazla arka uç hizmetiyle iletişim kurmasını gerektiren durumlar.
  • İstemcinin hücresel veri ağı gibi gecikme süresi önemli ölçüde yüksek olan ağları kullandığı durumlar.

Bu düzen aşağıdaki durumlarda uygun olmayabilir:

  • Birden çok işlemde bir istemci ile tek bir hizmet arasındaki çağrılarının sayısını azaltmak istediğiniz durumlar. Bu senaryoda, hizmete toplu işlem eklemek daha iyi olabilir.
  • İstemci veya uygulama arka uç hizmetlerinin yakınında bulunur ve gecikme süresi önemli bir faktör değildir.

İş yükü tasarımı

Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için ağ geçidi toplama düzeninin iş yükünün tasarımında nasıl kullanılabileceğini değerlendirmelidir. Örneğin:

Yapı Taşı Bu desen sütun hedeflerini nasıl destekler?
Güvenilirlik tasarımı kararları, iş yükünüzün arızaya karşı dayanıklı olmasına ve bir hata oluştuktan sonra tamamen çalışır duruma gelmesini sağlamaya yardımcı olur. Bu topoloji, diğer şeylerin dışında geçici hata işlemeyi istemciler arasında dağıtılmış bir uygulamadan merkezi bir uygulamaya taşımanızı sağlar.

- RE:07 Geçici hatalar
Güvenlik tasarımı kararları, iş yükünüzün verilerinin ve sistemlerinin gizliliğini, bütünlüğünü ve kullanılabilirliğini sağlamaya yardımcı olur. Bu topoloji genellikle bir istemcinin sistemle sahip olduğu dokunma noktası sayısını azaltarak genel yüzey alanını ve kimlik doğrulama noktalarını azaltır. Toplanan arka uçlar istemcilerden tamamen ağdan yalıtılmış kalabilir.

- SE:04 Segmentlere Ayırma
- SE:08 Sağlamlaştırma
Operasyonel Mükemmellik, standartlaştırılmış süreçler ve ekip uyumu aracılığıyla iş yükü kalitesinin sunulmasına yardımcı olur. Bu desen, arka uç mantığının istemcilerden bağımsız olarak gelişmesine olanak tanıyarak, istemci dokunma noktalarını değiştirmenize gerek kalmadan zincirlenmiş hizmet uygulamalarını ve hatta veri kaynaklarını değiştirmenize olanak tanır.

- OE:04 Araçlar ve işlemler
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. Bu tasarım, istemcinin birden çok bağlantı kurduğu bir tasarımdan daha az gecikmeye neden olabilir. Toplama uygulamalarında Önbelleğe Alma, arka uç sistemlerine yapılan çağrıları en aza indirir.

- PE:03 Hizmetleri seçme
- PE:08 Veri performansı

Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer sütunların hedeflerine karşı herhangi bir dengeyi göz önünde bulundurun.

Örnek

Aşağıdaki örnekte, Lua kullanılarak basit bir ağ geçidi toplama NGINX hizmetinin nasıl oluşturulacağı gösterilmiştir.

worker_processes  4;

events {
  worker_connections 1024;
}

http {
  server {
    listen 80;

    location = /batch {
      content_by_lua '
        ngx.req.read_body()

        -- read json body content
        local cjson = require "cjson"
        local batch = cjson.decode(ngx.req.get_body_data())["batch"]

        -- create capture_multi table
        local requests = {}
        for i, item in ipairs(batch) do
          table.insert(requests, {item.relative_url, { method = ngx.HTTP_GET}})
        end

        -- execute batch requests in parallel
        local results = {}
        local resps = { ngx.location.capture_multi(requests) }
        for i, res in ipairs(resps) do
          table.insert(results, {status = res.status, body = cjson.decode(res.body), header = res.header})
        end

        ngx.say(cjson.encode({results = results}))
      ';
    }

    location = /service1 {
      default_type application/json;
      echo '{"attr1":"val1"}';
    }

    location = /service2 {
      default_type application/json;
      echo '{"attr2":"val2"}';
    }
  }
}