Pola Sespan

Azure

Menyebarkan komponen aplikasi ke dalam proses atau kontainer terpisah untuk menyediakan isolasi dan enkapsulasi. Pola ini juga dapat memungkinkan aplikasi terdiri dari komponen dan teknologi heterogen.

Pola ini diberi nama Sidecar karena menyerupai sespan yang melekat pada sepeda motor. Dalam pola tersebut, sidecar melekat pada aplikasi induk dan menyediakan fitur pendukung untuk aplikasi. Sespan juga berbagi siklus hidup yang sama dengan aplikasi induk, dibuat dan dihentikan bersama induknya. Pola sidecar kadang-kadang disebut sebagai pola sidekick dan merupakan pola dekomposisi.

Konteks dan masalah

Aplikasi dan layanan sering kali memerlukan fungsionalitas terkait, seperti pemantauan, pencatatan log, konfigurasi, dan layanan jaringan. Tugas periferal ini dapat diimplementasikan sebagai komponen atau layanan terpisah.

Jika terintegrasi erat ke dalam aplikasi, mereka dapat berjalan dalam proses yang sama dengan aplikasi, membuat penggunaan sumber daya bersama yang efisien. Namun, ini juga berarti mereka tidak terisolasi dengan baik, dan pemadaman di salah satu komponen ini dapat memengaruhi komponen lain atau seluruh aplikasi. Juga, mereka biasanya perlu diimplementasikan menggunakan bahasa yang sama dengan aplikasi induk. Akibatnya, komponen dan aplikasi memiliki saling ketergantungan yang erat satu sama lain.

Jika aplikasi didekomposisi menjadi layanan, maka setiap layanan dapat dibangun menggunakan bahasa dan teknologi yang berbeda. Meskipun imemberikan lebih banyak fleksibilitas, hal ini berarti bahwa setiap komponen memiliki dependensinya sendiri dan memerlukan pustaka khusus bahasa untuk mengakses platform yang mendasarinya serta sumber daya apa pun yang dibagikan dengan aplikasi induk. Selain itu, menerapkan fitur ini sebagai layanan terpisah dapat menambah latensi ke aplikasi. Mengelola kode dan dependensi untuk antarmuka khusus bahasa ini juga dapat menambah kompleksitas yang cukup besar, terutama untuk hosting, penyebaran, dan manajemen.

Solusi

Menempatkan bersama kumpulan tugas yang kohesif dengan aplikasi utama, tetapi menempatkannya di dalam proses atau wadahnya sendiri, menyediakan antarmuka yang homogen untuk layanan platform lintas bahasa.

Diagram pola Sidecar

Layanan sespan belum tentu menjadi bagian dari aplikasi, tetapi terhubung ke aplikasi tersebut. Ia pergi ke mana pun aplikasi induk pergi. Sidecars adalah proses atau layanan pendukung yang disebarkan melalui aplikasi utama. Pada sepeda motor, sespan melekat pada satu sepeda motor, dan setiap sepeda motor dapat memiliki sespan sendiri. dengan cara yang sama, layanan sespan berbagi nasib aplikasi induknya. UUntuk setiap instance aplikasi, sebuah instance dari sespan dikerahkan dan dihosting di sampingnya.

Keuntungan menggunakan pola sespan meliputi:

  • Sebuah sespan independen dari aplikasi utamanya dalam hal lingkungan runtime dan bahasa pemrograman, jadi Anda tidak perlu mengembangkan satu sespan per bahasa.

  • Sespan dapat mengakses sumber daya yang sama dengan aplikasi utama. Misalnya, sespan dapat memantau sumber daya sistem yang digunakan oleh sespan dan aplikasi utama.

  • Karena kedekatannya dengan aplikasi utama, tidak ada latensi yang signifikan saat berkomunikasi di antara mereka.

  • Bahkan untuk aplikasi yang tidak menyediakan mekanisme perpanjangan, Anda dapat menggunakan sidecar untuk memperluas fungsionalitas dengan melampirkannya sebagai prosesnya sendiri di host atau sub-kontainer yang sama dengan aplikasi utama.

Pola sespan sering digunakan dengan wadah dan disebut sebagai wadah sespan atau sidekick container.

Masalah dan pertimbangan

  • Pertimbangkan format penyebaran dan pengemasan yang akan Anda gunakan untuk menerapkan layanan, proses, atau wadah. Wadah sangat cocok dengan pola sespan.
  • Saat merancang layanan sespan, putuskan dengan cermat mekanisme komunikasi antarproses. Cobalah gunakan teknologi agnostik bahasa atau kerangka kerja kecuali jika persyaratan kinerja membuatnya tidak praktis.
  • Sebelum memasukkan fungsionalitas ke dalam sespan, pertimbangkan apakah itu akan berfungsi lebih baik sebagai layanan terpisah atau daemon yang lebih tradisional.
  • Pertimbangkan juga apakah fungsionalitas dapat diimplementasikan sebagai perpustakaan atau menggunakan mekanisme ekstensi tradisional. Perpustakaan khusus bahasa mungkin memiliki tingkat integrasi yang lebih dalam dan lebih sedikit overhead jaringan.

Kapan menggunakan pola ini

Gunakan pola ini ketika:

  • Aplikasi utama Anda menggunakan kumpulan bahasa dan kerangka kerja yang heterogen. Sebuah komponen yang terletak di layanan sidecar dapat digunakan oleh aplikasi yang ditulis dalam bahasa yang berbeda menggunakan kerangka kerja yang berbeda.
  • Komponen dimiliki oleh tim jarak jauh atau organisasi lain.
  • Komponen atau fitur harus berada di host yang sama dengan aplikasi.
  • Anda memerlukan layanan yang berbagi siklus hidup keseluruhan aplikasi utama Anda, tetapi dapat diperbarui secara independen.
  • Anda memerlukan kontrol yang cermat atas batas sumber daya untuk sumber daya atau komponen tertentu. Misalnya, Anda mungkin ingin membatasi jumlah memori yang digunakan komponen tertentu. Anda dapat menerapkan komponen sebagai sespan dan mengelola penggunaan memori secara terpisah dari aplikasi utama.

Pola ini mungkin tidak cocok:

  • Ketika komunikasi antarproses perlu dioptimalkan. Komunikasi antara aplikasi induk dan layanan sidecar mencakup beberapa overhead, terutama latensi dalam panggilan. Hal ini mungkin bukan pertukaran yang dapat diterima untuk antarmuka yang tidak formal.
  • Untuk aplikasi kecil di mana biaya sumber daya dalam menyebarkan layanan sespan setiap instance tidak sebanding dengan keuntungan isolasi.
  • Saat layanan perlu diskalakan secara berbeda atau terpisah dari aplikasi utama. Jika demikian, mungkin lebih baik untuk menerapkan fitur tersebut sebagai layanan terpisah.

Desain beban kerja

Arsitek harus mengevaluasi bagaimana pola Sidecar 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 keamanan membantu memastikan kerahasiaan, integritas, dan ketersediaan data dan sistem beban kerja Anda. Dengan merangkum tugas ini dan menyebarkannya di luar proses, Anda dapat mengurangi area permukaan proses sensitif hanya ke kode yang diperlukan untuk menyelesaikan tugas. Anda juga dapat menggunakan sespan untuk menambahkan kontrol keamanan lintas pemotongan ke komponen aplikasi yang tidak dirancang secara asli dengan fungsionalitas tersebut.

- Segmentasi SE:04
- Enkripsi SE:07
Keunggulan Operasional membantu memberikan kualitas beban kerja melalui proses standar dan kohesi tim. Pola ini memberikan pendekatan untuk menerapkan fleksibilitas dalam integrasi alat yang dapat meningkatkan pengamatan aplikasi tanpa mengharuskan aplikasi untuk mengambil dependensi implementasi langsung. Ini memungkinkan fungsionalitas sespan berkembang secara independen dan dipertahankan secara independen dari siklus hidup aplikasi.

- Alat dan proses OE:04
- Sistem Pemantauan OE:07
Efisiensi Performa membantu beban kerja Anda memenuhi tuntutan secara efisien melalui pengoptimalan dalam penskalaan, data, kode. Anda dapat memindahkan tugas pemotongan silang ke satu proses yang dapat menskalakan di beberapa instans proses utama, yang mengurangi kebutuhan untuk menyebarkan fungsionalitas duplikat untuk setiap instans aplikasi.

- Pe:07 Kode dan infrastruktur

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

Contoh

Pola sespan berlaku untuk banyak skenario. Beberapa contoh Umum

  • Infrastruktur API Tim pengembangan infrastruktur membuat layanan yang disebarkan bersama setiap aplikasi, alih-alih pustaka klien khusus bahasa untuk mengakses infrastruktur. Layanan ini dimuat sebagai sidecar dan menyediakan lapisan umum untuk layanan infrastruktur, termasuk penebangan, data lingkungan, toko konfigurasi, penemuan, pemeriksaan kesehatan, dan layanan pengawas. Sidecar juga memantau lingkungan host aplikasi induk dan proses (atau kontainer) dan mencatat informasi ke layanan terpusat.
  • Kelola NGINX/HAProxy. Sebakan NGINX dengan layanan sidecar yang memantau status lingkungan, lalu memperbarui file konfigurasi NGINX dan mendaur ulang proses saat diperlukan perubahan status.
  • Sespan duta besar. Terapkan layanan duta besar sebagai sespan. Aplikasi memanggil melalui duta besar, yang menangani pencatatan permintaan, perutean, pemutusan sirkuit, dan fitur terkait konektivitas lainnya.
  • Membongkar proxy. Tempatkan proxy NGINX di depan instance layanan node.js, untuk menangani penyajian konten file statis untuk layanan tersebut.