Pola sekat

Azure

Pola Sekat adalah jenis desain aplikasi yang toleran terhadap kegagalan. Dalam arsitektur sekat, elemen aplikasi diisolasi menjadi kolam sehingga jika salah satu gagal, yang lain akan terus berfungsi. Ini dinamai partisi yang dipisahkan (sekat) dari lambung kapal. Jika lambung kapal dikompromikan, hanya bagian yang rusak yang terisi dengan air, yang mencegah kapal tenggelam.

Konteks dan masalah

Aplikasi berbasis cloud dapat mencakup beberapa layanan, dengan setiap layanan memiliki satu atau lebih konsumen. Beban atau kegagalan yang berlebihan dalam suatu layanan akan berdampak pada semua konsumen layanan.

Selain itu, konsumen dapat mengirim permintaan ke beberapa layanan secara bersamaan, menggunakan sumber daya untuk setiap permintaan. Ketika konsumen mengirimkan permintaan ke layanan yang salah dikonfigurasi atau tidak merespons, sumber daya yang digunakan oleh permintaan klien mungkin tidak dibebaskan pada waktu yang tepat. Ketika permintaan ke layanan berlanjut, sumber daya tersebut mungkin habis. Misalnya, kumpulan koneksi klien mungkin habis. Pada saat itu, permintaan oleh konsumen ke layanan lain terpengaruh. Akhirnya konsumen tidak dapat lagi mengirim permintaan ke layanan lain, bukan hanya layanan asli yang tidak responsif.

Masalah kelelahan sumber daya yang sama mempengaruhi layanan dengan banyak konsumen. Permintaan yang berasal dari satu klien dalam jumlah besar dapat menghabiskan sumber daya yang tersedia dalam layanan. Konsumen lain tidak lagi dapat menggunakan layanan, menyebabkan efek kegagalan meluas.

Solusi

Instans layanan partisi ke dalam grup yang berbeda, berdasarkan persyaratan beban dan ketersediaan konsumen. Desain ini membantu mengisolasi kegagalan, dan memungkinkan Anda untuk mempertahankan fungsionalitas layanan untuk beberapa konsumen, bahkan selama kegagalan.

Konsumen juga dapat membagi sumber daya, untuk memastikan bahwa sumber daya yang digunakan untuk memanggil satu layanan tidak mempengaruhi sumber daya yang digunakan untuk memanggil layanan lain. Misalnya, konsumen yang memanggil beberapa layanan dapat diberi kumpulan koneksi untuk setiap layanan. Jika layanan mulai gagal, itu hanya mempengaruhi kumpulan koneksi yang ditetapkan untuk layanan itu, memungkinkan konsumen untuk terus menggunakan layanan lain.

Keuntungan dari pola ini meliputi:

  • Mengisolasi konsumen dan layanan dari kegagalan secara meluas. Masalah yang mempengaruhi konsumen atau layanan dapat diisolasi dalam sekatnya sendiri, mencegah seluruh solusi gagal.
  • Memungkinkan Anda untuk mempertahankan beberapa fungsi jika terjadi kegagalan layanan. Layanan dan fitur lain dari aplikasi akan terus berfungsi.
  • Memungkinkan Anda untuk menyebarkan layanan yang menawarkan kualitas layanan yang berbeda untuk memakai aplikasi. Kelompok konsumen prioritas tinggi dapat dikonfigurasi untuk menggunakan layanan prioritas tinggi.

Diagram berikut menunjukkan sekat terstruktur di sekitar kumpulan koneksi yang memanggil layanan individual. Jika Layanan A gagal atau menyebabkan masalah lain, kumpulan koneksi akan diisolasi, sehingga hanya beban kerja yang menggunakan rangkaian kumpulan yang ditetapkan ke Layanan A yang terpengaruh. Beban kerja yang menggunakan Layanan B dan C tidak terpengaruh dan dapat terus bekerja tanpa gangguan.

Diagram pertama dari pola Sekat

Diagram berikutnya menunjukkan klien multipel memanggil satu layanan. Setiap klien diberi permintaan layanan terpisah. Klien 1 telah membuat terlalu banyak permintaan dan kewalahan dalam hal ini. Karena setiap permintaan layanan terisolasi dari yang lain, klien lain dapat terus melakukan panggilan.

Diagram berikutnya menunjukkan klien multipel memanggil satu layanan.

Masalah dan pertimbangan

  • Tentukan partisi seputar persyaratan bisnis dan teknis dari sebuah aplikasi.
  • Saat mempartisi layanan atau konsumen kedalam sekat, pertimbangkan tingkat isolasi yang ditawarkan oleh teknologi seperti kelebihan dalam hal biaya, kinerja, dan pengelolaan.
  • Pertimbangkan untuk menggabungkan sekat dengan coba ulang, pemutus sirkuit, dan pola pelambatan untuk memberikan penanganan kesalahan yang lebih canggih.
  • Saat mempartisi konsumen menjadi sekat, pertimbangkan untuk menggunakan proses, kumpulan rangkaian, dan tiang sinyal. Proyek-proyek seperti resilience4j dan Polly menawarkan kerangka kerja untuk menciptakan sekat konsumen.
  • Saat mempartisi layanan menjadi sekat, pertimbangkan untuk menyebarkannya ke dalam mesin virtual, kontainer, atau proses terpisah. Kontainer menawarkan keseimbangan isolasi sumber daya yang baik dengan pengeluaran tambahan yang cukup rendah.
  • Layanan yang berkomunikasi menggunakan pesan asinkron dapat diisolasi melalui serangkaian antrian yang berbeda. Setiap antrean dapat memiliki serangkaian permintaan khusus yang memproses pesan pada antrean, atau satu kelompok rangkaian menggunakan algoritme untuk antre dan pengiriman pemrosesan.
  • Tentukan tingkat granularitas untuk sekat. Misalnya, jika Anda ingin mendistribusikan penyewa di seluruh partisi, Anda dapat menempatkan setiap penyewa ke dalam partisi terpisah, atau menempatkan beberapa penyewa ke dalam satu partisi.
  • Pantau kinerja masing-masing partisi dan SLA.

Kapan menggunakan pola ini

Gunakan pola ini untuk:

  • Mengisolasi sumber daya yang digunakan untuk memakai satu set layanan backend, terutama jika aplikasi dapat memberikan beberapa tingkat fungsionalitas bahkan ketika salah satu layanan tidak merespons.
  • Mengisolasi konsumen penting dari konsumen standar.
  • Lindungi aplikasi dari kegagalan meluas.

Pola ini mungkin tidak cocok jika:

  • Penggunaan sumber daya yang kurang efisien mungkin tidak dapat diterima dalam proyek.
  • Kompleksitas tambahan tidak diperlukan

Desain beban kerja

Arsitek harus mengevaluasi bagaimana pola Bulkhead 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. Strategi isolasi kegagalan yang diperkenalkan melalui segmentasi yang disengaja dan lengkap antara komponen mencoba untuk mengandung kesalahan hanya untuk sekat yang mengalami masalah, mencegah dampak ke sekat lain.

- ALUR KRITIS RE:02
- RE:07 Pelestarian Mandiri
Keputusan desain keamanan membantu memastikan kerahasiaan, integritas, dan ketersediaan data dan sistem beban kerja Anda. Segmentasi antar komponen membantu membatasi insiden keamanan ke sekat yang disusupi.

- Segmentasi SE:04
Efisiensi Performa membantu beban kerja Anda memenuhi tuntutan secara efisien melalui pengoptimalan dalam penskalaan, data, kode. Setiap sekat dapat diskalakan secara individual untuk secara efisien memenuhi kebutuhan tugas yang dienkapsulasi dalam sekat.

- Perencanaan kapasitas PE:02
- PE:05 Penskalaan dan pemartisian

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

Contoh

File konfigurasi Kubernetes berikut membuat kontainer terisolasi untuk menjalankan satu layanan, dengan sumber daya dan batasan CPU dan memorinya sendiri.

apiVersion: v1
kind: Pod
metadata:
  name: drone-management
spec:
  containers:
  - name: drone-management-container
    image: drone-service
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "1"

Langkah berikutnya