Rancang perangkat lunak untuk lingkungan cloud native
SelesaiHubungkan infrastruktur yang dapat direproduksi, proses yang dapat diganti, state persisten, dan perilaku yang dapat diamati. Nilai desain cloud native melampaui pengemasan container.
Diterbitkan oleh TaigaCara kami menulis
Periksa pemahaman AndaPlatform mengganti worker laporan setelah kegagalan. Apa yang membuat percobaan ulang aman?Kerjakan latihan
Hal yang akan dipelajari
- Membedakan pengemasan container dari perilaku cloud native.
- Mengidentifikasi risiko state, percobaan ulang, dan penggantian pada layanan yang dihasilkan.
- Menentukan kontrak platform yang dapat diverifikasi oleh agen dan manusia.
Tentukan perilaku yang diperlukan
Praktik cloud native mendukung pengembangan dan operasi yang dapat diulang secara konsisten di lingkungan publik, privat, atau hibrida. CNCF menekankan sistem yang tetap dapat dikelola, diamati, dan tahan gangguan saat berubah. Container dan orkestrasi dapat mendukung pendekatan ini. Keduanya tidak dengan sendirinya menjamin seluruh sifat tersebut.
Mulai dengan layanan laporan fiktif. Alat AI membuat endpoint, worker, dan image container. Demonstrasi menghasilkan PDF yang benar. Sebelum produksi, tim harus menjawab pertanyaan lain: apa yang terjadi ketika platform mengganti worker saat job berjalan?
Ini menyangkut desain aplikasi sekaligus infrastruktur. Memulai ulang proses dapat memulihkannya tetapi menghilangkan pekerjaan yang belum selesai.
Pisahkan proses dari state persisten
Prototipe menyimpan job dalam antrean dan laporan yang selesai pada disk container. Mengganti container dapat menghapus keduanya. Menambah worker juga dapat menghasilkan jawaban berbeda, tergantung worker yang menerima permintaan.
Desain yang diperbarui memakai penyimpanan job yang persisten dan object storage yang disetujui. Permintaan mencatat identitas job. Worker mengambil job, membuat hasil, lalu mencatat lokasi hasilnya. Pemeriksaan akses tetap berlaku saat pengguna mengunduh laporan.
| Aspek | Pertanyaan untuk layanan laporan |
|---|---|
| State | Data mana yang harus tetap tersedia setelah proses diganti? |
| Konfigurasi | Bagaimana artefak yang sama berjalan di setiap lingkungan? |
| Identitas | Identitas layanan mana yang boleh membaca job dan menulis hasilnya? |
| Kesehatan | Apakah worker dapat menerima pekerjaan dan menyelesaikannya? |
| Penghentian | Apa yang terjadi pada job yang sudah diambil ketika worker berhenti? |
| Kapasitas | Batas mana yang tercapai lebih dahulu: worker, database, penyimpanan, atau layanan lain? |
Simpan rahasia di luar image. Sediakan melalui sistem pengelolaan rahasia yang disetujui. Catat perubahan konfigurasi yang memerlukan rilis baru atau proses dimulai ulang.
Rancang percobaan ulang sebelum menambah worker
Misalkan worker menyimpan PDF lalu berhenti sebelum mengonfirmasi job. Antrean mengirim job itu lagi. Percobaan kedua tidak boleh menagih pelanggan dua kali atau mengirim pesan penyelesaian yang bertentangan.
Gunakan operasi idempoten jika sesuai. Mengulangi permintaan logis yang sama harus mempertahankan efek yang dimaksud. Tentukan identitas permintaan yang stabil, simpan hasil secara persisten, dan periksa kejadian pada setiap titik kegagalan. AWS menjelaskan teknik ini dalam panduan percobaan ulang yang aman.
Percobaan ulang juga memerlukan batas. Gunakan timeout, batas jumlah percobaan, dan jeda yang mencegah permintaan berulang secara serentak. Simpan pekerjaan yang gagal untuk diperiksa, alih-alih mencobanya terus-menerus.
Buat state yang diinginkan dapat ditinjau
Konfigurasi deklaratif menyatakan deployment yang diinginkan. Controller bekerja untuk mempertahankan state tersebut. Contohnya, Kubernetes Deployment mengelola replika aplikasi dan pembaruan terkendali. Aplikasi tetap harus menangani penggantian dengan benar.
Kelola versi infrastruktur dan konfigurasi aplikasi. Tinjau perubahan melalui proses pengiriman perangkat lunak yang biasa. Amati penyelesaian job yang sebenarnya, waktu tunggu job dalam antrean, kegagalan, dan batas dependensi. Proses yang berjalan mungkin tetap tidak dapat menghasilkan laporan.
Pilih platform yang dapat dioperasikan tim
Cloud native tidak mengharuskan setiap aplikasi menjadi microservices. Aplikasi modular pada runtime terkelola dapat memenuhi persyaratannya. Lebih banyak layanan menambah antarmuka, keputusan deployment, dan pekerjaan operasi.
Berikan kontrak platform yang sebenarnya kepada agen pengembangan: runtime yang didukung, metode identitas, layanan data, aturan deployment, dan bukti yang diperlukan. Uji perilaku saat gangguan dan penggantian bersama permintaan yang berhasil. Lanjutkan dengan ketersediaan dan batas kegagalan.
Kerjakan latihan
Layanan laporan fiktif menyimpan job dan file yang selesai pada disk container. Gambarkan alur permintaan, job, file, dan unduhan. Tandai state yang harus persisten. Tentukan apa yang terjadi jika worker berhenti setelah menulis file tetapi sebelum mengonfirmasi job.
Unduh lembar kerja (Markdown)Menonaktifkan pilihan ini menghapus seluruh kemajuan yang tersimpan dalam browser.
Kemajuan tetap tersimpan dalam browser ini. Tanpa akun atau pelacakan.
Sumber dan bacaan lanjutan
- CNCF: Cloud Native Definition v1.1 ↗
- Kubernetes: Deployments ↗
- AWS Builders’ Library: Making retries safe with idempotent APIs ↗