Gateway

Azure Traffic Manager

Gunakan gateway untuk mengagregasi beberapa permintaan individual menjadi satu permintaan. Pola ini berguna saat klien harus melakukan beberapa panggilan ke sistem backend yang berbeda untuk melakukan operasi.

Konteks dan masalah

Untuk melakukan satu tugas, klien mungkin harus melakukan beberapa panggilan ke berbagai layanan backend. Aplikasi yang bergantung pada banyak layanan untuk melakukan tugas harus mengeluarkan sumber daya pada setiap permintaan. Saat ada fitur atau layanan baru yang ditambahkan ke aplikasi, permintaan tambahan diperlukan, sehingga lebih meningkatkan kebutuhan sumber daya dan panggilan jaringan. Kecerewetan antara klien dan backend ini dapat berdampak buruk pada performa dan skala aplikasi. Arsitektur layanan mikro telah membuat masalah ini lebih umum, karena aplikasi yang dibangun di banyak layanan yang lebih kecil secara alami memiliki jumlah panggilan lintas layanan yang lebih tinggi.

Dalam diagram berikut, klien mengirimkan permintaan ke setiap layanan (1,2,3). Setiap layanan memproses permintaan dan mengirimkan respons balik ke aplikasi (4,5,6). Melalui jaringan seluler dengan latensi biasanya tinggi, penggunaan permintaan individual dengan cara ini tidaklah efisien dan dapat mengakibatkan konektivitas terputus atau permintaan yang tidak lengkap. Meski setiap permintaan dapat dilakukan secara paralel, aplikasi harus mengirim, menunggu, dan memproses data setiap permintaan, semua di koneksi terpisah, sehingga meningkatkan kemungkinan kegagalan.

Diagram masalah untuk pola Agregasi Gateway

Solusi

Gunakan gateway untuk mengurangi kecerewetan antara klien dan layanan. Gateway menerima permintaan klien, mengirimkan permintaan ke berbagai sistem backend, dan kemudian menggabungkan hasilnya dan mengirimkannya kembali ke klien yang meminta.

Pola ini dapat mengurangi jumlah permintaan yang dibuat aplikasi ke layanan backend, dan meningkatkan performa aplikasi melalui jaringan latensi tinggi.

Dalam diagram berikut, aplikasi mengirimkan permintaan ke gateway (1). Permintaan tersebut berisi paket permintaan tambahan. Gateway mengurai permintaan ini dan memproses setiap permintaan dengan mengirimkannya ke layanan yang relevan (2). Setiap layanan mengembalikan respons ke gateway (3). Gateway menggabungkan tanggapan dari setiap layanan dan mengirimkan respons ke aplikasi (4). Aplikasi membuat satu permintaan dan hanya menerima satu respons dari gateway.

Diagram solusi untuk pola Agregasi Gateway

Masalah dan pertimbangan

  • Gateway tidak boleh memasukkan penyatuan layanan di seluruh layanan backend.
  • Gateway harus berada di dekat layanan backend untuk mengurangi latensi sebanyak mungkin.
  • Layanan gateway dapat memasukkan satu titik kegagalan. Pastikan gateway dirancang dengan benar untuk memenuhi persyaratan ketersediaan aplikasi Anda.
  • Gateway dapat menimbulkan penyempitan. Pastikan gateway memiliki performa yang memadai untuk menangani beban dan dapat diskalakan untuk memenuhi pertumbuhan terantisipasi Anda.
  • Lakukan pengujian beban terhadap gateway untuk memastikan Anda tidak menimbulkan kegagalan cascading untuk layanan.
  • Terapkan desain yang elastis, menggunakan teknik seperti sekat, pemutusan sirkuit, coba lagi, dan waktu habis.
  • Jika satu atau beberapa panggilan layanan terlalu lama, mungkin dapat diterima untuk waktu habis dan mengembalikan sekumpulan data parsial. Pertimbangkan bagaimana aplikasi Anda akan menangani skenario ini.
  • Gunakan I/O asinkron untuk memastikan bahwa penundaan di backend tidak menyebabkan masalah performa dalam aplikasi.
  • Terapkan pelacakan terdistribusi menggunakan ID korelasi untuk melacak setiap panggilan individu.
  • Pantau metrik permintaan dan ukuran respons.
  • Pertimbangkan untuk mengembalikan data cache sebagai strategi failover untuk menangani kegagalan.
  • Pertimbangkan untuk menempatkan layanan agregasi di belakang gateway, bukan membangun agregasi ke dalam gateway. Agregasi permintaan kemungkinan akan memiliki persyaratan sumber daya yang berbeda dari layanan lain di gateway dan dapat memengaruhi fungsi perutean dan pembongkaran beban gateway.

Kapan menggunakan pola ini

Gunakan pola ini ketika:

  • Klien perlu berkomunikasi dengan beberapa layanan backend untuk melakukan operasi.
  • Klien dapat menggunakan jaringan dengan latensi yang signifikan, seperti jaringan seluler.

Pola ini mungkin tidak cocok jika:

  • Anda ingin mengurangi jumlah panggilan antara klien dan satu layanan dalam beberapa operasi. Dalam skenario ini, sebaiknya tambahkan operasi batch ke layanan.
  • Klien atau aplikasi terletak di dekat layanan backend dan latensi bukanlah faktor yang signifikan.

Desain beban kerja

Arsitek harus mengevaluasi bagaimana pola Agregasi Gateway dapat digunakan dalam desain beban kerja mereka untuk mengatasi tujuan dan prinsip yang tercakup dalam pilar Azure Well-Architected Framework. Contohnya:

Pilar Bagaimana pola ini mendukung tujuan pilar
Keputusan desain keandalan membantu beban kerja Anda menjadi tahan terhadap kerusakan dan untuk memastikan bahwa keputusan tersebut pulih ke status berfungsi penuh setelah kegagalan terjadi. Topologi ini memungkinkan Anda untuk, antara lain, mengalihkan penanganan kesalahan sementara dari implementasi terdistribusi di seluruh klien ke implementasi terpusat.

- KESALAHAN SEMENTARA RE:07
Keputusan desain keamanan membantu memastikan kerahasiaan, integritas, dan ketersediaan data dan sistem beban kerja Anda. Topologi ini sering mengurangi jumlah titik sentuh yang dimiliki klien dengan sistem, yang mengurangi area permukaan publik dan titik autentikasi. Backend agregat dapat tetap sepenuhnya terisolasi jaringan dari klien.

- Segmentasi SE:04
- SE:08 Pengerasan
Keunggulan Operasional membantu memberikan kualitas beban kerja melalui proses standar dan kohesi tim. Pola ini memungkinkan logika backend berkembang secara independen dari klien, memungkinkan Anda mengubah implementasi layanan berantai, atau bahkan sumber data, tanpa perlu mengubah titik sentuh klien.

- Alat dan proses OE:04
Efisiensi Performa membantu beban kerja Anda memenuhi tuntutan secara efisien melalui pengoptimalan dalam penskalaan, data, kode. Desain ini dapat menimbulkan lebih sedikit latensi daripada desain di mana klien membuat beberapa koneksi. Penembolokan dalam implementasi agregasi meminimalkan panggilan ke sistem backend.

- PE:03 Memilih layanan
- Performa DATA PE:08

Seperti halnya keputusan desain apa pun, pertimbangkan tradeoff terhadap tujuan pilar lain yang mungkin diperkenalkan dengan pola ini.

Contoh

Contoh berikut menggambarkan cara membuat layanan NGINX agregasi gateway sederhana menggunakan Lua.

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"}';
    }
  }
}