Pola Sidecar

Sebarkan komponen aplikasi ke dalam proses atau kontainer yang terpisah dari aplikasi utama untuk menyediakan isolasi dan enkapulasi. Pola ini memungkinkan Anda membangun aplikasi dari berbagai komponen dan teknologi.

Seperti sidecar sepeda motor, komponen-komponen ini melekat pada aplikasi induk dan berbagi siklus hidupnya, sehingga Anda membuat dan menghentikannya bersama-sama. Pola ini juga dikenal sebagai pola Sidekick dan mendukung penguraian aplikasi.

Konteks dan masalah

Aplikasi dan layanan sering memerlukan fungsionalitas terkait, seperti layanan pemantauan, pengelogan, konfigurasi, dan jaringan. Anda dapat menerapkan tugas periferal ini sebagai komponen atau layanan terpisah.

Komponen yang terintegrasi erat berjalan dalam proses yang sama dan secara efisien menggunakan sumber daya bersama, tetapi tidak memiliki isolasi. Pemadaman dalam satu komponen dapat memengaruhi seluruh aplikasi. Mereka juga memerlukan implementasi dalam bahasa aplikasi induk, yang menciptakan interdependensi.

Jika Anda menguraikan aplikasi ke dalam layanan, Anda dapat membangun setiap layanan dengan menggunakan bahasa dan teknologi yang berbeda. Pendekatan ini memberikan lebih banyak fleksibilitas. Tetapi setiap komponen memiliki dependensinya sendiri dan memerlukan pustaka khusus bahasa untuk mengakses platform dan sumber daya bersama. Saat Anda menyebarkan fitur ini sebagai layanan terpisah, Anda menambahkan latensi. Kode dan dependensi khusus bahasa juga meningkatkan kompleksitas untuk hosting dan penyebaran.

Solusi

Sebarkan serangkaian tugas kohesif bersama aplikasi utama dalam proses atau kontainer terpisah. Pendekatan ini menyediakan antarmuka yang konsisten untuk layanan platform di seluruh bahasa.

Diagram yang memperlihatkan pola Sidecar.

Layanan sespan terhubung ke aplikasi tanpa menjadi bagian darinya dan disebarkan bersamanya. Setiap instans aplikasi mendapatkan instans sidecar sendiri yang berbagi siklus hidupnya.

Pola Sidecar memberikan keuntungan berikut:

  • Kemandirian bahasa: Sidecar berjalan secara independen dari lingkungan runtime aplikasi utama dan bahasa pemrograman. Anda dapat menggunakan satu implementasi sidecar di seluruh aplikasi yang ditulis dalam bahasa yang berbeda.

  • Akses sumber daya bersama: Sidecar dapat mengakses sumber daya yang sama dengan aplikasi utama. Misalnya, sidecar dapat memantau sumber daya sistem yang digunakan kedua komponen.

  • Latensi rendah: Kedekatan antara sidecar dan aplikasi utama meminimalkan latensi komunikasi.

  • Ekstensibilitas yang ditingkatkan: Anda dapat memperluas aplikasi yang tidak memiliki mekanisme ekstensibilitas asli dengan melampirkan sidecar sebagai proses terpisah pada host atau subkontainer yang sama.

Implementasi paling umum dari pola ini menggunakan kontainer, yang juga disebut kontainer sidecar atau kontainer sidekick.

Masalah dan pertimbangan

Pertimbangkan poin-poin berikut saat Anda menerapkan pola ini:

  • Pertimbangkan format penyebaran dan pengemasan untuk menyebarkan layanan, proses, atau kontainer. Container bekerja dengan baik untuk pola Sidecar.

  • Saat Anda merancang layanan sespan, pilih mekanisme komunikasi antarproses dengan hati-hati. Gunakan teknologi agnostik bahasa atau kerangka kerja-agnostik kecuali persyaratan performa membuat pendekatan tersebut tidak praktis.

  • Sebelum Anda menambahkan fungsi pada sidecar, evaluasi apakah lebih baik berfungsi sebagai layanan terpisah atau daemon tradisional.

  • Pertimbangkan apakah akan menerapkan fungsionalitas sebagai pustaka atau melalui mekanisme ekstensi tradisional. Pustaka khusus bahasa menyediakan integrasi yang lebih dalam dan overhead jaringan yang lebih sedikit.

Kapan menggunakan pola ini

Gunakan pola ini ketika:

  • Aplikasi utama Anda menggunakan beragam bahasa dan kerangka kerja. Sidecar menyediakan antarmuka yang konsisten yang dapat digunakan aplikasi yang berbeda terlepas dari bahasa atau kerangka kerjanya.

  • Tim terpisah atau mitra eksternal memiliki komponen.

  • Anda harus menyebarkan komponen atau fitur pada host yang sama dengan aplikasi.

  • Anda memerlukan layanan yang berbagi siklus hidup keseluruhan aplikasi utama Anda tetapi dapat Diperbarui secara independen.

  • Anda memerlukan kontrol halus atas batas sumber daya untuk sumber daya atau komponen tertentu. Misalnya, Anda dapat menerapkan komponen sebagai sidecar untuk membatasi dan mengelola penggunaan memorinya secara terpisah dari aplikasi utama.

Pola ini mungkin tidak cocok ketika:

  • Anda perlu mengoptimalkan komunikasi antarproseksi. Sidecar container menambahkan overhead, terutama latensi, yang membuatnya tidak cocok untuk aplikasi yang sering berkomunikasi antar-komponen.

  • Aplikasi Anda kecil. Biaya sumber daya untuk menerapkan sidecar pada setiap instans mungkin lebih besar daripada manfaat isolasinya.

  • Anda perlu menskalakan komponen secara independen. Jika Anda harus menskalakan komponen secara berbeda dari aplikasi utama, sebarkan sebagai layanan terpisah sebagai gantinya.

  • Platform Anda menyediakan fungsionalitas yang setara. Jika platform aplikasi Anda sudah menyediakan kemampuan yang diperlukan secara bawaan, sespan menambahkan kompleksitas yang tidak perlu.

Desain beban kerja

Evaluasi cara menggunakan pola Sidecar dalam desain beban kerja untuk mengatasi tujuan dan prinsip yang tercakup dalam pilar Azure Well-Architected Framework. Tabel berikut memberikan panduan tentang bagaimana pola ini mendukung tujuan setiap pilar.

Pilar Bagaimana pola ini mendukung tujuan pilar
Keputusan desain keamanan membantu memastikan kerahasiaan, integritas, dan ketersediaan data dan sistem beban kerja Anda. Saat Anda merangkum tugas-tugas ini dan menyebarkannya dalam proses terpisah, Anda mengurangi permukaan serangan hanya ke kode yang diperlukan. Anda juga dapat menggunakan "sidecar" untuk menambahkan kontrol keamanan yang bersifat menyeluruh ke komponen aplikasi tanpa dukungan bawaan untuk fitur tersebut.

- Segmentasi SE:04
- Enkripsi SE:07
Keunggulan Operasional membantu memberikan kualitas beban kerja melalui proses standar dan kohesi tim. Pola ini memungkinkan Anda mengintegrasikan alat pengamatan secara fleksibel tanpa menambahkan dependensi ke kode aplikasi Anda. Anda dapat memperbarui dan memelihara sidecar secara terpisah dari aplikasi.

- Alat dan proses OE:04
- Sistem Pemantauan OE:07
Efisiensi Performa membantu beban kerja Anda memenuhi permintaan secara efisien melalui pengoptimalan dalam penskalaan, data, dan kode. Pola ini memungkinkan Anda memusatkan fungsi lintas aspek di sidecar yang dapat diskalakan di beberapa instance aplikasi. Anda tidak perlu menyebarkan fungsionalitas duplikat untuk setiap instans aplikasi.

- Pe:07 Kode dan infrastruktur

Jika pola ini memperkenalkan kompromi di dalam pilar, bandingkan dengan tujuan pilar lain.

Contoh

Anda dapat menerapkan pola Sidecar ke banyak skenario. Perhatikan contoh berikut:

  • Abstraksi dependensi: Sebarkan layanan kustom bersama setiap aplikasi untuk menyediakan akses ke kemampuan dependensi bersama melalui API yang konsisten. Pendekatan ini menggantikan pustaka klien khusus bahasa dengan sidecar yang menangani masalah seperti pengelogan, konfigurasi, penemuan layanan, manajemen status, dan pemeriksaan kesehatan.

    Sidecar Distributed Application Runtime (Dapr) mencontohkan kasus penggunaan ini.

  • Sarana data jala layanan: Sebarkan proksi sidecar bersama setiap instans layanan untuk menangani masalah jaringan lintas pemotongan seperti perutean lalu lintas, percobaan ulang, Keamanan Lapisan Transportasi bersama (mTLS), penegakan kebijakan, dan telemetri.

    Jala layanan seperti Istio menggunakan proksi sidecar untuk mengimplementasikan kemampuan ini tanpa memerlukan perubahan pada kode aplikasi.

  • Sidecar Ambassador: Menyebarkan layanan ambassador sebagai sidecar. Aplikasi merutekan panggilan melalui duta besar, yang menangani pengelogan permintaan, perutean, pemutusan sirkuit, dan fitur konektivitas lainnya.

  • Adaptor protokol: Sebarkan sidecar untuk menerjemahkan antara protokol atau format data yang tidak kompatibel, atau untuk menjembatani sistem olahpesan. Pendekatan ini memungkinkan aplikasi menggunakan antarmuka yang lebih sederhana atau warisan.

  • Pengayaan telemetri: Sebarkan sidecar untuk melakukan pra-pemrosesan atau memperkaya data telemetri, seperti metrik, log, dan penelusuran, sebelum meneruskan data ke sistem pemantauan eksternal. Komponen seperti OpenTelemetry Collector dapat berjalan sebagai pendamping untuk menormalkan, memperkaya, atau merutekan telemetri secara terpisah dari aplikasi.

Langkah selanjutnya