W skrócie, czy powinniśmy projektować śmierć w naszych programach, procesach i wątkach na niskim poziomie, dla dobra całego systemu?
Awarie się zdarzają. Procesy giną. Planujemy katastrofę i od czasu do czasu się z niej odzyskujemy. Ale rzadko projektujemy i wdrażamy nieprzewidywalną śmierć programu. Mamy nadzieję, że przestoje naszych usług będą trwać tak długo, jak długo staramy się je utrzymać.
Makroprzykładem tej koncepcji jest Małpa Chaosu Netflix , która losowo kończy wystąpienia AWS w niektórych scenariuszach. Twierdzą, że pomogło im to odkryć problemy i zbudować więcej zbędnych systemów.
Mówię o niższym poziomie. Chodzi o to, aby tradycyjnie długotrwałe procesy były losowo zamykane. Powinno to wymusić redundancję w projekcie i ostatecznie wytworzyć bardziej odporne systemy.
Czy ta koncepcja ma już nazwę? Czy jest już używany w branży?
EDYTOWAĆ
W oparciu o komentarze i odpowiedzi obawiam się, że moje pytanie nie było jasne. Dla jasności:
- tak, mam na myśli losowo,
- tak, mam na myśli w produkcji, i
- nie, nie tylko do testowania.
Aby wyjaśnić, chciałbym narysować analogię do organizmów wielokomórkowych.
W naturze organizmy składają się z wielu komórek. Komórki rozwidlają się, tworząc nadmiarowość i ostatecznie umierają. Ale zawsze powinno być wystarczającej liczby odpowiednich komórek, aby organizm mógł funkcjonować. Ten wysoce zbędny system ułatwia także gojenie się po zranieniu. Komórki umierają, więc organizm żyje.
Włączenie przypadkowej śmierci do programu zmusiłoby większy system do przyjęcia strategii redundancji, aby pozostały opłacalne. Czy te same strategie pomogłyby systemowi zachować stabilność w obliczu innych nieprzewidzianych awarii?
A jeśli ktoś tego próbował, jak to się nazywa? Chciałbym przeczytać więcej na ten temat, jeśli już istnieje.