Apa yang Anda minta adalah, pada dasarnya, ketersediaan tinggi. Untuk membuat sistem menjadi sangat tersedia, Anda perlu tiga hal:
- Hilangkan satu titik kegagalan
- Mekanisme untuk beralih dari titik akhir ke titik lain
- Cara mendeteksi kegagalan
Hilangkan satu titik kegagalan
Dalam kasus S3, poin # 1 dibahas, seperti yang ditunjukkan Evgeny, oleh replikasi lintas-wilayah S3 .
Replikasi, bagaimanapun, tidak instan dan Anda akan ingin memeriksa apakah Anda ingin membuat replikasi aplikasi Anda sadar atau tidak. Jika terjadi pemadaman, mungkin sesuatu yang ditulis ke keranjang sumber Anda belum membuatnya (tidak direplikasi) ke keranjang tujuan. Anda harus memikirkan bagaimana aplikasi akan menangani skenario seperti itu. Itu benar-benar tergantung pada tipe data, apa yang sedang dilakukan dengannya dan (berpotensi) harapan pengguna akhir atau manajemen.
Mekanisme untuk beralih dari titik akhir ke titik lain
Untuk S3, itu berarti bahwa dalam hal terjadi pemadaman, Anda ingin aplikasi berhenti membaca dan menulis dari / ke ember A dan menggunakan ember B sebagai gantinya.
Bagaimana mencapai ini, sejauh yang saya tahu, terserah Anda untuk saat ini. Beberapa layanan AWS lainnya menawarkan fail-overs yang benar-benar transparan, tapi saya tidak mengetahui hal seperti itu untuk S3 saat ini.
Ada berbagai cara untuk mencapai ini. Salah satu contoh adalah menggunakan proxy yang akan mengarahkan lalu lintas ke ember yang sesuai. Selama pemadaman, Anda akan memperbarui / mengubah proxy untuk merutekan lalu lintas ke ember yang tidak terpengaruh oleh pemadaman. Contoh lain adalah membuat konfigurasi aplikasi Anda dinamis dan menyimpannya di penyimpanan nilai kunci. Jika aplikasi cukup sering membaca toko KV untuk properti yang diperbarui, Anda dapat beralih dari mana Anda membaca dan menulis (misalnya, Spring Cloud memiliki dukungan untuk pendengar "EnvironmentChange").
Cara mendeteksi kegagalan
Yah, itu mudah, saya pikir. Cukup atur lingkaran tulis + baca dan beri tahu segera setelah sesuatu tidak beres :)
Catatan penutup
- Jika aplikasi Anda menulis ke ember, Anda harus memikirkan apa yang akan terjadi jika terjadi kegagalan. Sudahkah semua tulisan berhasil sampai ke ember tujuan (dan dapatkah Anda memberi tahu)? Bisakah Anda mengizinkan penulisan ke bucket tujuan (menjadikannya "primer" baru)? Perencanaan yang cermat akan menghindari skenario pembaruan otak yang hilang atau hilang.
- Tergantung pada SLA Anda, Anda mungkin ingin poin # 2 dan # 3 menjadi otomatis atau otomatis. Itu membutuhkan perencanaan, perkakas, dan pengujian tambahan, tetapi skrip yang ditulis dengan baik akan selalu bereaksi lebih cepat dan dalam cara yang lebih dapat diprediksi daripada yang dapat dilakukan manusia (kegagalan juga memiliki kebiasaan yang mengganggu terjadi di tengah malam ketika intervensi manusia adalah sesuatu yang berbahaya.
- Patut disebutkan bahwa replikasi lintas wilayah sekalipun tidak sepenuhnya menghilangkan titik kegagalan tunggal. Tentu, jika suatu daerah turun, Anda dilindungi. Tetapi bagaimana jika pemadaman AWS di seluruh AS terjadi? Azure mengalami pemadaman sebagian tetapi global tahun lalu dan satu di 2014 juga.