Bongkar fungsi layanan bersama atau khusus ke proksi gateway. Pola ini dapat menyederhanakan pengembangan aplikasi dengan memindahkan fungsionalitas layanan bersama, seperti penggunaan sertifikat SSL, dari bagian lain aplikasi ke gateway.
Konteks dan masalah
Beberapa fitur umumnya digunakan di beberapa layanan, dan fitur ini memerlukan konfigurasi, manajemen, dan pemeliharaan. Layanan bersama atau khusus yang didistribusikan dengan setiap penyebaran aplikasi meningkatkan overhead administratif dan meningkatkan kemungkinan kesalahan penyebaran. Setiap pembaruan untuk fitur bersama harus disebarkan di semua layanan yang membagikan fitur tersebut.
Penanganan masalah keamanan dengan benar (validasi token, enkripsi, manajemen sertifikat SSL) dan tugas kompleks lainnya dapat mengharuskan anggota tim memiliki keterampilan yang sangat khusus. Misalnya, sertifikat yang dibutuhkan oleh aplikasi harus dikonfigurasi dan disebarkan pada semua instans aplikasi. Dengan setiap penyebaran baru, sertifikat harus dikelola untuk memastikan bahwa sertifikat tidak kedaluwarsa. Setiap sertifikat umum yang akan kedaluwarsa harus diperbarui, diuji, dan diverifikasi pada setiap penyebaran aplikasi.
Layanan umum lainnya seperti autentikasi, otorisasi, pengelogan, pemantauan, atau pembatasan bisa sulit diterapkan dan dikelola di sejumlah besar penyebaran. Mungkin lebih baik untuk mengonsolidasikan jenis fungsi ini, untuk mengurangi overhead dan kemungkinan kesalahan.
Solusi
Bongkar beberapa fitur ke gateway, terutama masalah lintas sektoral seperti manajemen sertifikat, autentikasi, penghentian SSL, pemantauan, terjemahan protokol, atau pembatasan.
Diagram berikut menunjukkan gateway yang mengakhiri koneksi SSL masuk. Ini meminta data atas nama pemohon asli dari upstram server HTTP mana pun di gateway.
Keuntungan dari pola ini meliputi:
Sederhanakan pengembangan layanan dengan menghilangkan kebutuhan untuk mendistribusikan dan memelihara sumber daya pendukung, seperti sertifikat server web dan konfigurasi untuk situs web yang aman. Konfigurasi yang lebih sederhana menghasilkan manajemen dan skalabilitas yang lebih mudah dan membuat peningkatan layanan lebih sederhana.
Izinkan tim khusus untuk menerapkan fitur yang memerlukan keahlian khusus, seperti keamanan. Ini memungkinkan tim inti Anda untuk berfokus pada fungsionalitas aplikasi, meninggalkan masalah khusus namun lintas sektoral ini kepada para ahli yang relevan.
Berikan konsistensi untuk permintaan dan respons pengelogan dan pemantauan. Meskipun layanan tidak diinstruksikan dengan benar, gateway dapat dikonfigurasi untuk memastikan tingkat pemantauan dan pengelogan minimum.
Masalah dan pertimbangan
- Pastikan gateway sangat tersedia dan tahan terhadap kegagalan. Hindari satu titik kegagalan dengan menjalankan beberapa contoh gateway Anda.
- Pastikan gateway dirancang untuk kapasitas dan persyaratan penskalaan aplikasi dan titik akhir Anda. Pastikan gateway tidak menjadi penyempitan bagi aplikasi dan cukup dapat diskalakan.
- Hanya fitur offload yang digunakan oleh seluruh aplikasi, seperti keamanan atau transfer data.
- Logika bisnis tidak boleh dipindahkan ke gateway.
- Jika Anda perlu melacak transaksi, pertimbangkan untuk membuat ID korelasi untuk tujuan pengelogan.
Kapan menggunakan pola ini
Gunakan pola ini ketika:
- Penyebaran aplikasi memiliki masalah bersama seperti sertifikat SSL atau enkripsi.
- Fitur yang umum di seluruh penyebaran aplikasi yang mungkin memiliki persyaratan sumber daya yang berbeda, seperti sumber daya memori, kapasitas penyimpanan atau koneksi jaringan.
- Anda ingin memindahkan tanggung jawab untuk masalah seperti keamanan jaringan, pembatasan, atau masalah batas jaringan lainnya ke tim yang lebih khusus.
Pola ini mungkin tidak cocok jika memperkenalkan penggabungan di seluruh layanan.
Desain beban kerja
Arsitek harus mengevaluasi bagaimana pola Gateway Offloading 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. | Membongkar tanggung jawab ini ke gateway mengurangi kompleksitas kode aplikasi pada simpul backend. Dalam beberapa kasus, offloading sepenuhnya menggantikan fungsionalitas dengan fitur yang disediakan platform yang andal. - RE:01 Kesederhanaan dan efisiensi |
Keputusan desain keamanan membantu memastikan kerahasiaan, integritas, dan ketersediaan data dan sistem beban kerja Anda. | Menambahkan gateway ke dalam alur permintaan memungkinkan Anda mempusatkan fungsionalitas keamanan seperti firewall aplikasi web dan koneksi TLS dengan klien. Fungsionalitas offload yang disediakan platform sudah menawarkan keamanan yang ditingkatkan. - Kontrol JARINGAN SE:06 - Sumber daya PENGERASAN SE:08 |
Pengoptimalan Biaya difokuskan untuk mempertahankan dan meningkatkan pengembalian beban kerja Anda pada investasi. | Pola ini memungkinkan Anda untuk mengalihkan biaya dari sumber daya yang akan dihabiskan per simpul ke dalam implementasi gateway. Biaya dalam model pemrosesan terpusat sering lebih rendah daripada biaya model terdistribusi. - Konsolidasi CO:14 |
Keunggulan Operasional membantu memberikan kualitas beban kerja melalui proses standar dan kohesi tim. | Dalam pola ini, konfigurasi dan upkeep fungsionalitas yang dilepaskan berasal dari satu titik alih-alih mengelolanya dari beberapa simpul. - Alat dan proses OE:04 |
Efisiensi Performa membantu beban kerja Anda memenuhi tuntutan secara efisien melalui pengoptimalan dalam penskalaan, data, kode. | Menambahkan gateway offloading ke proses permintaan memungkinkan Anda menggunakan lebih sedikit sumber daya per simpul karena fungsionalitas terpusat di gateway. Anda dapat mengoptimalkan implementasi fungsionalitas yang dilepas secara independen dari kode aplikasi. Fungsionalitas yang disediakan platform yang dilepas sudah cenderung sangat berkinerja tinggi. - PE:03 Memilih layanan |
Seperti halnya keputusan desain apa pun, pertimbangkan tradeoff terhadap tujuan pilar lain yang mungkin diperkenalkan dengan pola ini.
Contoh
Menggunakan Nginx sebagai alat offload SSL, konfigurasi berikut mengakhiri koneksi SSL masuk dan mendistribusikan koneksi ke salah satu dari tiga server HTTP hulu.
upstream iis {
server 10.3.0.10 max_fails=3 fail_timeout=15s;
server 10.3.0.20 max_fails=3 fail_timeout=15s;
server 10.3.0.30 max_fails=3 fail_timeout=15s;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.cer;
ssl_certificate_key /etc/nginx/ssl/domain.key;
location / {
set $targ iis;
proxy_pass http://$targ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
Di Azure, ini dapat dicapai dengan menyiapkan penghentian SSL di Application Gateway.