Prinsip desain keandalan
Pemadaman dan kerusakan adalah kekhawatiran serius untuk semua beban kerja. Beban kerja yang andal harus bertahan dari peristiwa tersebut dan terus secara konsisten menyediakan fungsionalitas yang dimaksudkan. Ini harus tangguh sehingga dapat mendeteksi, menahan, dan pulih dari kegagalan dalam periode waktu yang dapat diterima. Ini juga harus tersedia sehingga pengguna dapat mengakses beban kerja selama periode waktu yang dijanjikan pada tingkat kualitas yang dijanjikan.
Tidak realistis untuk mengasumsikan kegagalan tidak akan terjadi, terutama ketika beban kerja dibangun untuk berjalan pada sistem terdistribusi. Beberapa komponen mungkin gagal sementara yang lain terus beroperasi. Pada titik tertentu, pengalaman pengguna mungkin terpengaruh, yang mengorbankan tujuan bisnis.
Arsitektur beban kerja harus memiliki jaminan keandalan dalam kode aplikasi, infrastruktur, dan operasi. Pilihan desain tidak boleh mengubah niat yang ditentukan oleh persyaratan bisnis. Perubahan tersebut harus dianggap sebagai tradeoff yang signifikan.
Prinsip desain dimaksudkan untuk memberikan panduan untuk aspek keandalan yang harus Anda pertimbangkan sepanjang siklus hidup pengembangan. Mulailah dengan pendekatan yang direkomendasikan dan ratakan manfaat untuk serangkaian persyaratan. Setelah Anda mengatur strategi, dorong tindakan dengan menggunakan daftar periksa Keandalan.
Jika Anda tidak menerapkan prinsip-prinsip ini ke desain Anda, beban kerja kemungkinan besar tidak akan siap untuk mengantisipasi atau menangani masalah dalam produksi. Hasilnya mungkin gangguan layanan yang menyebabkan kerugian finansial. Dalam kasus beban kerja penting, gagal menerapkan prinsip-prinsip ini dapat membahmari keamanan.
Desain untuk kebutuhan bisnis
Kumpulkan persyaratan bisnis dengan fokus pada utilitas beban kerja yang dimaksudkan. |
---|
Persyaratan harus mencakup pengalaman pengguna, data, alur kerja, dan karakteristik yang unik untuk beban kerja. Hasil dari proses persyaratan harus dengan jelas menyatakan harapan. Tujuannya harus dapat dicapai dan dinegosiasikan dengan tim, dengan investasi tertentu. Mereka harus di dokumentasikan untuk mendorong pilihan, implementasi, dan operasi teknologi.
Pendekatan | Manfaat |
---|---|
Kuantifikasi keberhasilan dengan menetapkan target pada indikator untuk komponen individual, alur sistem, dan sistem secara keseluruhan. Apakah target tersebut membuat alur pengguna lebih dapat diandalkan? | Metrik mengukur ekspektasi. Ini memungkinkan Anda untuk memahami kompleksitas dan menentukan apakah biaya hilir dari kompleksitas tersebut berada dalam batas investasi. Nilai target menunjukkan status ideal. Anda dapat menggunakan nilai sebagai ambang batas pengujian yang membantu Anda mendeteksi penyimpangan dari status tersebut dan berapa lama waktu yang diperlukan untuk kembali ke status target. Persyaratan kepatuhan juga harus memiliki hasil yang dapat diprediksi untuk alur dalam cakupan. Memprioritaskan alur ini membawa perhatian pada area yang paling sensitif. |
Memahami komitmen platform. Pertimbangkan batasan, kuota, wilayah, dan batasan kapasitas untuk layanan. | Perjanjian tingkat layanan (SLA) bervariasi menurut layanan. Tidak semua layanan dan fitur dicakup secara merata. Tidak semua layanan atau fitur tersedia di semua wilayah. Sebagian besar batas sumber daya langganan adalah per wilayah. Memiliki pemahaman yang baik tentang cakupan dan batasan dapat membantu Anda mendeteksi penyimpangan dan membangun mekanisme ketahanan dan pemulihan. |
Tentukan dependensi dan efeknya terhadap ketahanan. | Melacak infrastruktur, layanan, API, dan fungsi dependen yang dikembangkan oleh tim lain atau pihak ketiga membantu Anda menentukan apakah beban kerja dapat beroperasi tanpa adanya dependensi tersebut. Ini juga membantu Anda memahami kegagalan bertingkat dan meningkatkan operasi hilir. Pengembang dapat menerapkan pola desain yang tangguh untuk menangani potensi kegagalan saat Anda menggunakan layanan eksternal yang mungkin rentan terhadap kegagalan. |
Desain untuk ketahanan
Beban kerja harus terus beroperasi dengan fungsionalitas penuh atau berkurang. |
---|
Anda harus mengharapkan bahwa kerusakan komponen, pemadaman platform, penurunan performa, ketersediaan sumber daya terbatas, dan kesalahan lainnya akan terjadi. Bangun ketahanan dalam sistem sehingga toleran terhadap kesalahan dan dapat menurun dengan anggun.
Pendekatan | Manfaat |
---|---|
Membedakan komponen yang berada di jalur kritis dari komponen yang dapat berfungsi dalam keadaan terdegradasi. | Tidak semua komponen beban kerja harus sama-sama dapat diandalkan. Menentukan kekritisan membantu Anda merancang sesuai dengan kekritisan setiap komponen. Anda tidak akan overengineer ketahanan untuk komponen yang dapat sedikit memburuk pengalaman pengguna, dibandingkan dengan komponen yang dapat menyebabkan masalah end-to-end jika gagal. Desainnya dapat efisien dalam mengalokasikan sumber daya ke komponen penting. Anda juga dapat menerapkan strategi isolasi kesalahan sehingga jika komponen nonkritis gagal atau memasuki status terdegradasi, itu dapat diisolasi untuk mencegah kegagalan berkaskala. |
Identifikasi potensi titik kegagalan dalam sistem, terutama untuk komponen penting, dan tentukan efek pada alur pengguna. | Anda dapat menganalisis kasus kegagalan, radius ledakan, dan intensitas kesalahan: pemadaman penuh atau parsial. Analisis ini memengaruhi desain kemampuan penanganan kesalahan di tingkat komponen. |
Bangun kemampuan pelestarian diri dengan menggunakan pola desain dengan benar dan memodulasi desain untuk mengisolasi kesalahan. | Sistem akan dapat mencegah masalah memengaruhi komponen hilir. Sistem akan dapat mengurangi kegagalan sementara dan permanen, penyempitan performa, dan masalah lain yang mungkin memengaruhi keandalan. Anda juga dapat meminimalkan radius ledakan. |
Tambahkan kemampuan untuk menskalakan komponen penting (aplikasi dan infrastruktur) dengan mempertimbangkan batasan kapasitas layanan di wilayah yang didukung. | Beban kerja akan dapat menangani lonjakan kapasitas variabel dan fluktuasi. Kemampuan ini sangat penting ketika ada beban tak terduga pada sistem, seperti lonjakan penggunaan yang valid. Jika beban kerja dirancang untuk memperluas skala di beberapa wilayah, beban kerja bahkan dapat mengatasi potensi batasan kapasitas sumber daya sementara atau masalah lain yang berdampak dalam satu wilayah. |
Bangun redundansi dalam lapisan dan ketahanan pada berbagai tingkat aplikasi. Bertujuan untuk redundansi dalam utilitas fisik dan replikasi data langsung. Juga bertujuan untuk redundansi di lapisan fungsi yang mencakup layanan, operasi, dan personel. |
Redundansi membantu meminimalkan satu titik kegagalan. Misalnya, jika ada komponen, zonal, atau pemadaman regional, penyebaran redundan (dalam aktif-aktif atau aktif-pasif) memungkinkan Anda untuk memenuhi target waktu aktif. Menambahkan perantara mencegah dependensi langsung antara komponen dan meningkatkan buffering. Kedua manfaat ini memperkuat ketahanan sistem. |
Provisi berlebih untuk segera mengurangi kegagalan individu instans redundan dan buffer terhadap konsumsi sumber daya yang melarikan diri. | Investasi yang lebih tinggi dalam provisi berlebih meningkatkan ketahanan. Sistem akan terus beroperasi pada utilitas penuh selama kegagalan aktif bahkan sebelum operasi penskalakan dapat mulai memulihkan kegagalan. Demikian juga, Anda dapat mengurangi risiko konsumsi sumber daya runaway yang tidak terduga yang mengklaim buffer yang Anda rencanakan, mendapatkan waktu triase penting, sebelum kesalahan sistem atau penskalaan agresif terjadi. |
Desain untuk pemulihan
Beban kerja harus dapat mengantisipasi dan memulihkan dari sebagian besar kegagalan, dari semua besaran, dengan gangguan minimal pada pengalaman pengguna dan tujuan bisnis. |
---|
Bahkan sistem yang sangat tangguh membutuhkan pendekatan kesiapsiagaan bencana, baik dalam desain arsitektur maupun operasi beban kerja. Pada lapisan data, Anda harus memiliki strategi yang dapat memperbaiki status beban kerja jika terjadi kerusakan.
Pendekatan | Manfaat |
---|---|
Telah menyusun, menguji, dan mendokumen rencana pemulihan yang selaras dengan target pemulihan yang dinegosiasikan. Paket harus mencakup semua komponen selain sistem secara keseluruhan. | Proses yang terdefinisi dengan baik mengarah pada pemulihan cepat yang dapat mencegah dampak negatif pada keuangan dan reputasi bisnis Anda. Melakukan latihan pemulihan rutin menguji proses pemulihan komponen sistem, data, dan langkah-langkah failover dan failback untuk menghindari kebingungan ketika waktu dan integritas data adalah langkah-langkah utama keberhasilan. |
Pastikan Anda dapat memperbaiki data semua komponen stateful dalam target pemulihan Anda. | Pencadangan sangat penting untuk membuat sistem kembali ke keadaan kerja dengan menggunakan titik pemulihan tepercaya, seperti status baik yang terakhir diketahui. Pencadangan yang tidak dapat diubah dan konsisten secara transaksional memastikan bahwa data tidak dapat diubah, dan bahwa data yang dipulihkan tidak rusak. |
Terapkan kemampuan penyembuhan mandiri otomatis dalam desain. | Otomatisasi ini mengurangi risiko dari faktor eksternal, seperti intervensi manusia, dan memperpendek siklus perbaikan jeda. |
Ganti komponen stateless dengan unit sementara yang tidak dapat diubah. | Membangun unit ephemeral yang dapat Anda putar dan hancurkan sesuai permintaan memberikan pengulangan dan konsistensi. Gunakan model penyebaran berdampingan untuk membuat transisi ke unit baru bertambah bertahap, meminimalkan gangguan. |
Desain untuk operasi
Geser ke kiri dalam operasi untuk mengantisipasi kondisi kegagalan. |
---|
Menguji kegagalan lebih awal dan sering dalam siklus hidup pengembangan, dan menentukan dampak performa pada keandalan. Demi analisis akar penyebab dan pascamortem, Anda harus memiliki visibilitas bersama, di seluruh tim, status dependensi dan kegagalan yang sedang berlangsung. Wawasan, diagnostik, dan pemberitahuan dari sistem yang dapat diamati sangat mendasar hingga manajemen insiden yang efektif dan peningkatan berkelanjutan.
Pendekatan | Manfaat |
---|---|
Bangun sistem yang dapat diamati yang dapat menghubungkan telemetri. | Pemantauan dan diagnostik adalah operasi penting. Jika terjadi kegagalan, Anda perlu mengetahui bahwa itu gagal, ketika gagal, dan mengapa gagal. Pengamatan pada tingkat komponen sangat mendasar, tetapi pengamatan agregat komponen dan alur pengguna yang berkorelasi memberikan tampilan holistik status kesehatan. Data ini diperlukan untuk memungkinkan teknisi keandalan situs memprioritaskan upaya mereka untuk remediasi. |
Memprediksi potensi kerusakan dan perilaku anomali. Membuat kegagalan keandalan aktif terlihat dengan menggunakan pemberitahuan yang diprioritaskan dan dapat ditindaklanjuti. Berinvestasi dalam proses dan infrastruktur yang andal yang mengarah pada triase yang lebih cepat. |
Teknisi keandalan situs dapat segera diberi tahu sehingga mereka dapat mengurangi insiden situs langsung yang sedang berlangsung dan secara proaktif mengurangi potensi kegagalan yang diidentifikasi oleh pemberitahuan prediktif sebelum menjadi insiden langsung. |
Simulasikan kegagalan dan jalankan pengujian di lingkungan produksi dan pra-produksi. | Hal ini bermanfaat untuk mengalami kegagalan dalam produksi sehingga Anda dapat menetapkan ekspektasi realistis untuk pemulihan. Ini memungkinkan Anda untuk membuat pilihan desain yang dengan anggun merespons kegagalan. Selain itu, ini memungkinkan Anda menguji ambang yang Anda tetapkan untuk metrik bisnis. |
Bangun komponen dengan pertimbangkan otomatisasi, dan otomatisasi sebanyak yang Anda bisa. | Automation meminimalkan potensi kesalahan manusia, membawa konsistensi pada pengujian, penyebaran, dan operasi. |
Faktor operasi rutin dan dampaknya terhadap stabilitas sistem. | Beban kerja mungkin tunduk pada operasi yang sedang berlangsung, seperti revisi aplikasi, audit keamanan dan kepatuhan, peningkatan komponen, dan proses pencadangan. Meneliti perubahan tersebut memastikan stabilitas sistem. |
Terus belajar dari insiden dalam produksi. | Berdasarkan insiden tersebut, Anda dapat menentukan dampak dan pengawasan dalam desain dan operasi yang mungkin lugas dalam praproduksi. Pada akhirnya, Anda akan dapat mendorong peningkatan berdasarkan insiden kehidupan nyata. |
Sederhanakan
Hindari overengineering desain arsitektur, kode aplikasi, dan operasi. |
---|
Ini sering kali apa yang Anda hapus daripada apa yang Anda tambahkan yang mengarah ke solusi yang paling dapat diandalkan. Kesederhanaan mengurangi area permukaan untuk kontrol, meminimalkan inefisiensi dan potensi kesalahan konfigurasi atau interaksi yang tidak terduga. Di sisi lain, penyederhanaan berlebih dapat menyebabkan satu titik kegagalan. Pertahankan pendekatan yang seimbang.
Pendekatan | Manfaat |
---|---|
Tambahkan komponen ke arsitektur Anda hanya jika membantu Anda mencapai nilai bisnis target. Jaga agar jalur kritis tetap ramping. | Merancang untuk persyaratan bisnis dapat menyebabkan solusi langsung yang mudah diterapkan dan dikelola. Hindari memiliki terlalu banyak komponen penting, karena masing-masing merupakan titik kegagalan yang signifikan. |
Menetapkan standar dalam implementasi kode, penyebaran, dan proses, dan mendokumentasikannya. Identifikasi peluang untuk menegakkan standar tersebut dengan menggunakan validasi otomatis. | Standar memberikan konsistensi dan meminimalkan kesalahan manusia. Pendekatan seperti konvensi penamaan standar dan panduan gaya kode dapat membantu Anda mempertahankan kualitas dan membuat aset mudah diidentifikasi selama pemecahan masalah. |
Evaluasi apakah pendekatan teoritis diterjemahkan ke desain pragmatis yang berlaku untuk kasus penggunaan Anda. | Kode aplikasi yang terlalu terperinci dapat menyebabkan interdependensi yang tidak perlu, operasi tambahan, dan pemeliharaan yang sulit. |
Kembangkan kode yang cukup. | Anda akan dapat mencegah masalah yang merupakan hasil dari implementasi yang tidak efisien, seperti konsumsi sumber daya yang tidak terduga, kegagalan pengguna atau aliran data, dan bug kode. Sebaliknya, masalah keandalan harus menyebabkan tinjauan kode untuk memastikan bahwa kode cukup tangguh untuk menangani masalah. |
Manfaatkan fitur yang disediakan platform dan aset bawaan yang dapat membantu Anda memenuhi target bisnis secara efektif. | Pendekatan ini meminimalkan waktu pengembangan. Ini juga memungkinkan Anda untuk mengandalkan praktik yang dicoba dan diuji yang telah digunakan dengan beban kerja serupa. |