Systemy / programy / algorytmy rozproszone / ... są często opisywane przy użyciu predykatu odpornego lub odpornego na uszkodzenia .
Jaka jest różnica?
Detale:
Kiedy szukam w Google + + odporny + „odporny na błędy”, otrzymuję tylko dwa trafienia, oba nieprzydatne.
Kiedy szukam terminów w Google, znajduję wiele artykułów, które mają oba terminy w tytule. Niestety, nie precyzują dokładnie terminów :( Ale ponieważ używają obu terminów, wydaje się, że żadne nie implikuje drugiego.
Odpowiedzi:
Oba opisują spójność zachowania aplikacji, ale „odporność” opisuje reakcję aplikacji na dane wejściowe , a „odporność na awarie” opisuje odpowiedź aplikacji na środowisko .
Aplikacja jest niezawodna, gdy może działać spójnie z niespójnymi danymi. Na przykład: aplikacja do map jest niezawodna, gdy może analizować adresy w różnych formatach z różnymi błędami ortograficznymi i zwracać przydatną lokalizację. Odtwarzacz muzyczny jest solidny, jeśli po napotkaniu zniekształconej klatki może kontynuować dekodowanie pliku MP3. Edytor obrazów jest niezawodny, gdy może modyfikować obraz za pomocą osadzonych metadanych EXIF, których może nie rozpoznać - zwłaszcza jeśli może dokonywać zmian w obrazie bez niszczenia danych EXIF.
Aplikacja jest odporna na awarie, gdy może działać konsekwentnie w niespójnym środowisku. Aplikacja bazy danych jest odporna na uszkodzenia, gdy może uzyskać dostęp do alternatywnego fragmentu, gdy podstawowy nie jest dostępny. Aplikacja internetowa jest odporna na uszkodzenia, gdy może kontynuować obsługę żądań z pamięci podręcznej, nawet gdy host API jest nieosiągalny. Podsystem pamięci masowej jest odporny na uszkodzenia, gdy może zwrócić wyniki obliczone na podstawie parzystości, gdy element dyskowy jest w trybie offline.
W obu przypadkach oczekuje się, że aplikacja pozostanie stabilna, zachowa się jednolicie, zachowa integralność danych i zapewni przydatne wyniki nawet w przypadku wystąpienia błędu. Ale podczas oceny niezawodności możesz znaleźć kryteria dotyczące danych, podczas gdy podczas oceny odporności na błędy znajdziesz kryteria dotyczące dostępności.
Jedno niekoniecznie prowadzi do drugiego. Mobilna aplikacja do rozpoznawania głosu może być bardzo niezawodna, zapewniając niesamowitą zdolność do konsekwentnego rozpoznawania mowy w różnych regionalnych akcentach z ogromnym hałasem w tle. Ale jeśli jest bezużyteczne bez szybkiego połączenia danych komórkowych, nie jest zbyt odporne na uszkodzenia. Podobnie aplikacja do publikowania w Internecie może być niezwykle odporna na awarie, z wieloma redundantami na każdym poziomie, zdolna do utraty całych centrów danych bez awarii, ale jeśli upuści tabelę użytkowników i zawiesi się przy pierwszej rejestracji kogoś z apostrofem w swoim nazwisku , wcale nie jest solidny.
Jeśli szukasz literatury naukowej, która pomogłaby w opisaniu tego rozróżnienia, możesz szukać w konkretnych domenach, które wykorzystują oprogramowanie, a nie ogólnie oprogramowanie. Badania aplikacji rozproszonych mogą być podatnym gruntem dla kryteriów odporności na uszkodzenia, a Google opublikował niektóre z ich badań, które mogą być istotne. Badania w zakresie modelowania danych prawdopodobnie dotyczą kwestii solidności, ponieważ naukowcy są szczególnie zainteresowani właściwościami niezawodności, które dają powtarzalne wyniki. Prawdopodobnie można znaleźć artykuły opisujące zastosowania statystyczne, które mogą być pomocne, na przykład w modelowaniu klimatu, modelowaniu propagacji RF lub sekwencjonowaniu genomu. Znajdziesz również inżynierów omawiających „solidną konstrukcję” w takich dziedzinach, jak systemy sterowania.
Oficjalny dokument systemu plików Google opisuje ich podejście do problemów związanych z odpornością na uszkodzenia, które zasadniczo obejmuje założenia, że awarie komponentów są rutynowe, dlatego aplikacja musi się do nich dostosować:
Ten projekt dla klasy w Rutgers obsługuje definicję „odporności na awarie” zorientowaną na „uszkodzenie elementu”:
Istnieje mnóstwo dokumentów na temat „solidnego modelowania XYZ”, w zależności od badanego pola. Większość opisuje streszczenia kryteriów „solidne”, a przekonasz się, że wszystko to ma związek z tym, jak model radzi sobie z danymi wejściowymi.
W tym streszczeniu naukowca ds. Klimatu z NASA opisuje się solidność jako kryterium oceny modeli klimatycznych:
Ten artykuł badacza MIT bada aplikacje protokołu bezprzewodowego, domenę, w której tolerancja na awarie i niezawodność pokrywają się, ale autorzy używają „niezawodnej” do opisywania aplikacji, protokołów i algorytmów, podczas gdy używają „odporności na awarie” w odniesieniu do topologii i komponenty:
źródło
Naprawdę podoba mi się odpowiedź @ johnnyb i popieram ją za jej wyraźne definicje. Ale pracując w terenie przez kilka dziesięcioleci, poznałem inny (znacznie mniej formalny i precyzyjny) sposób, w jaki często używa się tych terminów:
Jako nieformalne punkty wzdłuż kontinuum od „niewiarygodnego” do „całkowicie niezawodnego”.
Nie ma systemu, aplikacji ani usługi, która gwarantowałaby, że zawsze będzie działać („stale dostępne” lub „stale dostępne”). „Odporny na awarie” od dawna zastępuje „zrobiliśmy wszystko, co możliwe po ludzku, przy użyciu obecnej technologii, aby upewnić się, że ta rzecz działa poprawnie”.
Słowa takie jak „solidny”, „hartowany” i „wysoce dostępny” są używane jako łagodniejsze kamienie milowe na drodze do ciągłego działania. Odzwierciedlają one coraz większy wysiłek, inwestycje i zaufanie.
Ponieważ te terminy są używane nieformalnie, nie ma całkowicie kanonicznego porządku. „Wysoce dostępny” jest zwykle mocnym stwierdzeniem, tuż pod „odporny na awarie” lub „odporny na awarie”. Ale czy „utwardzony” jest lepszy niż „solidny”? Lub odwrotnie? To zależy od kontekstu. Są one również często wykorzystywane jako oświadczenia marketingowe produktu, z całym tym pochwaleniem i celową niedokładnością, które się z tym wiążą.
Zazwyczaj organizacje działające na rzecz tych celów mają własne uzgodnione wewnętrznie postępy, zwykle co najmniej w przybliżeniu powiązane z celami / rezultatami projektu i miernikami zewnętrznymi, takimi jak „trzy dziewiątki” lub „sześć dziewiątek”.
@ johnnyb dotyczy także krytycznego rozróżnienia: różnicy między stanem (w górę / w dół) platformy (dostępność) z jednej strony a algorytmem, aplikacją lub atrybutami usługi z drugiej.
Mówię „atrybuty”, ponieważ jest ich wiele: wydajność, poprawność i niezmienność to tylko kilka kluczowych. Czy system jest znacząco dostępny i poprawny, jeśli działa przy zaledwie 10% wydajności znamionowej? Nie według właścicieli firm, jeśli jest to pracowity sezon! W systemie nie ma wielkiej cnoty, która naprawdę nigdy nie zawodzi, ale przez większość czasu daje również błędne odpowiedzi. I wreszcie, czy system analizy danych działa „dobrze”, jeśli 0,2% zmiana danych wejściowych daje 3 400% innej odpowiedzi? Być może ... ale dla wielu będzie to raczej kapryśny i niezadowalający model. Nie będę omawiał rozszerzonej listy atrybutów, ale integralność danych, bezpieczeństwo danych, prywatność danych oraz inne kwestie poprawności i bezpieczeństwa są powszechnymi obawami. (Jeśli jesteś bardzo dużą organizacją lub agencją rządową, coraz bardziej martwisz się zachowaniem tych atrybutów nie tylko przez kilka lat lub cykli produktów, ale przez dziesięciolecia, a może nawet stulecia. Jak dotąd nie ma sprawdzonych architektur, procesów ani podejść do osiągnięcia tego celu).
Te możliwe rozbieżności między „uruchomieniem i uruchomieniem” a „robieniem tego, co chcemy” - a także w jaki sposób określać, mierzyć i zapobiegać takim odchyleniom - od dawna stanowiły wyzwanie, nawet gdy redundancja, stwardnienie i inne kroki w kierunku błędu - tolerancja została podjęta. A w nieformalnym użyciu „bieganie” i różne formy „biegania tak, jak chcę” są splecione, bez wszystkich wyraźnych różnic, jakich byśmy chcieli.
źródło