{"id":13813,"date":"2022-05-23T07:00:12","date_gmt":"2022-05-23T05:00:12","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=13813"},"modified":"2023-07-05T10:57:53","modified_gmt":"2023-07-05T08:57:53","slug":"cechy-systemow-bezpiecznych-reliability-i-availability-a-architektura","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/cechy-systemow-bezpiecznych-reliability-i-availability-a-architektura\/","title":{"rendered":"Cechy system\u00f3w bezpiecznych reliability i availability a architektura"},"content":{"rendered":"\n<p>Ka\u017cdy system posiada architektur\u0119. W idealnym \u015bwiecie, gdy pracujemy wed\u0142ug wytycznych V-modelu, zostanie ona zaprojektowana jeszcze przed napisaniem pierwszej linii kodu.<\/p>\n\n\n\n<p> Je\u015bli jednak tak si\u0119 nie stanie, to b\u0119dzie powstawa\u0107 samoczynnie wraz z rozwojem projektu.<\/p>\n\n\n\n<p>Znacznie \u0142atwiej by\u0142oby wcze\u015bniej zastanowi\u0107 si\u0119 nad tym, czego oczekujemy od systemu i kt\u00f3re jego cechy s\u0105 po\u017c\u0105dane.&nbsp; Z t\u0105 wiedz\u0105 mo\u017cna tak zaplanowa\u0107 system, aby w \u0142atwy spos\u00f3b maksymalizowa\u0107 po\u017c\u0105dane cechy.<\/p>\n\n\n\n<p>Niestety rzadko zdarzaj\u0105 si\u0119 rozwi\u0105zania idealne, dlatego w trakcie projektowania systemu cz\u0119sto nale\u017cy zdecydowa\u0107 si\u0119 na pewne kompromisy. Najcz\u0119\u015bciej b\u0119d\u0105 one zachodzi\u0107 pomi\u0119dzy takimi cechami jak:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>reliability vs. availability,<\/li>\n\n\n\n<li>usefulness vs. safety,<\/li>\n\n\n\n<li>security vs. performance vs. safety balance,<\/li>\n\n\n\n<li>performance vs. reliability,<\/li>\n\n\n\n<li>implementation balance.<\/li>\n<\/ul>\n\n\n\n<p>W poni\u017cszym artykule skupi\u0119 si\u0119 na pierwszym z nich, czyli reliability vs. availability. Postaram si\u0119 przedstawi\u0107, jak odpowiednie kszta\u0142towanie architektury mo\u017ce wp\u0142ywa\u0107 na te dwie cechy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Definicje poj\u0119\u0107<\/h2>\n\n\n\n<p>Poni\u017csze rozwa\u017cania s\u0105 zwi\u0105zane z systemami bezpiecznymi, jednak znajd\u0105 zastosowanie r\u00f3wnie\u017c poza tym obszarem. W znacznej wi\u0119kszo\u015bci przypadk\u00f3w najwa\u017cniejszym aspektem implementowanych system\u00f3w jest ich bezpiecze\u0144stwo, w literaturze okre\u015blane jako safety. Jako taki okre\u015bla si\u0119 system, kt\u00f3ry szczeg\u00f3ln\u0105 wag\u0119 przywi\u0105zuje do ochrony \u017cycia lub mienia.<\/p>\n\n\n\n<p>Nierzadko zdarza si\u0119, \u017ce safety jest mylnie rozumiane jako security. Zanim przejdziemy dalej warto przyjrze\u0107 si\u0119 definicjom tych dw\u00f3ch poj\u0119\u0107.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Security <\/strong><strong>polega na utrudnianiu korzystania z systemu przez osoby do tego nie uprawnione.<\/strong><\/li>\n\n\n\n<li><strong>Safety troszczy si\u0119 o to, aby osoby uprawnione podczas korzystania z systemu nie zrobi\u0142y sobie (lub innym) krzywdy.<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Systemy mo\u017cna opisa\u0107 4 cechami (parametry RAMS):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reliability (niezawodno\u015b\u0107) \u2013 otrzymamy poprawny wynik.<\/li>\n\n\n\n<li>Availability (dost\u0119pno\u015b\u0107) \u2013 zdolno\u015b\u0107 do poprawnego funkcjonowania.<\/li>\n\n\n\n<li>Maintainability (obs\u0142ugiwalno\u015b\u0107) \u2013 \u0142atwo\u015b\u0107 w utrzymaniu.<\/li>\n\n\n\n<li>Safety (bezpiecze\u0144stwo) \u2013 funkcjonowanie systemu nie b\u0119dzie zagra\u017ca\u0107 ludziom, rzeczom oraz \u015brodowisku.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reliability i availability<\/h2>\n\n\n\n<p>W zale\u017cno\u015bci od systemu i zada\u0144 przed nim postawionych jedna cecha b\u0119dzie bardziej po\u017c\u0105dana ni\u017c druga. Istniej\u0105 systemy, w kt\u00f3rych wa\u017cniejszy jest poprawny wynik, a mniej wa\u017cne jest to, czy go otrzymamy (lub otrzymamy na czas \u2013 je\u015bli istniej\u0105 wymagania odno\u015bnie do czasu maksymalnej odpowiedzi. Wspomnian\u0105 sytuacj\u0119 traktowa\u0107 b\u0119dziemy jednak jako brak odpowiedzi).<\/p>\n\n\n\n<p>W takich systemach priorytetem b\u0119dzie reliability, czyli poprawno\u015b\u0107 otrzymanego rezultatu.<\/p>\n\n\n\n<p>Z drugiej strony mo\u017cna wyobrazi\u0107 sobie system, np. nawigacja, gdzie priorytetem b\u0119dzie otrzymanie rezultatu, a mniej wa\u017cne b\u0119dzie to, czy odpowied\u017a systemu jest poprawna.<\/p>\n\n\n\n<p>Dla takiego systemu kluczowe jest availability.<\/p>\n\n\n\n<p>W tym kontek\u015bcie <strong>system mo\u017ce natomiast zawie\u015b\u0107 na 2 sposoby<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wynik b\u0119dzie b\u0142\u0119dny &#8211; brak reliability.<\/li>\n\n\n\n<li>Wyniku nie otrzymamy \u2013 brak availability.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Na czym polega konflikt?<\/h2>\n\n\n\n<p>W idealnym \u015bwiecie systemy zawsze zwraca\u0142yby odpowied\u017a w 100% poprawn\u0105. W \u015bwiecie rzeczywistym trzeba wybiera\u0107, co jest dla naszego systemu istotniejsze.<\/p>\n\n\n\n<p>Czy jeste\u015bmy w stanie zaakceptowa\u0107, \u017ce czasami odpowiedzi nie uzyskamy, ale gdy ju\u017c j\u0105 uzyskamy, mo\u017cemy by\u0107 w pewni jej poprawno\u015bci? Czy te\u017c zale\u017cy nam na otrzymaniu wyniku niezale\u017cnie od okoliczno\u015bci, maj\u0105c jednocze\u015bnie \u015bwiadomo\u015b\u0107, \u017ce mo\u017ce on by\u0107 obarczony niema\u0142ym b\u0142\u0119dem.<\/p>\n\n\n\n<p>Musimy wiedzie\u0107 czego oczekujemy, gdy\u017c zwi\u0119kszenie jednego parametru, odb\u0119dzie si\u0119 to b\u0119dzie kosztem innego. Chc\u0105c zwi\u0119kszy\u0107 availability systemu, najcz\u0119\u015bciej ucierpi na tym reliability i vice versa. Dlatego tak wa\u017cne jest, aby ju\u017c na samym pocz\u0105tku projektu okre\u015bli\u0107, co jest dla nas priorytetem.<\/p>\n\n\n\n<p>Czemu tak si\u0119 dzieje, opisz\u0119 poni\u017cej. Zobaczymy jak w praktyce, przy u\u017cyciu architektury, mo\u017cemy manipulowa\u0107 opisanymi powy\u017cej parametrami oraz dlaczego zwi\u0119kszenie jednego z nich automatycznie poci\u0105ga za sob\u0105 zmniejszenie innego.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Powielenie<\/h2>\n\n\n\n<p>Zaczniemy od prostego powielenia.<\/p>\n\n\n\n<p><strong>Powielenie (replication)<\/strong> polega na zwi\u0119kszeniu liczby identycznych element\u00f3w lub system\u00f3w. Posiada t\u0119 zalet\u0119, \u017ce mo\u017cna bardzo \u0142atwo zwi\u0119ksza\u0107 po\u017c\u0105dan\u0105 cech\u0119 systemu.<\/p>\n\n\n\n<p>Wyobra\u017amy sobie, \u017ce projektujemy system, kt\u00f3ry powinien oblicza\u0107 przechy\u0142k\u0119 toru kolejowego. Ma on si\u0119 sk\u0142ada\u0107 z 2 identycznych komputer\u00f3w, wykonuj\u0105cych identyczny program przy pomocy identycznych danych wej\u015bciowych. Teraz nale\u017cy zada\u0107 sobie pytanie, czy b\u0119dzie dla nas akceptowalne otrzymanie wyniku operacji p\u00f3\u017aniej ni\u017c np. 1 ms po dostarczeniu danych wej\u015bciowych (availability), czy chcemy mie\u0107 pewno\u015b\u0107, \u017ce system b\u0119dzie na tyle precyzyjny, \u017ce nie pomyli si\u0119 o wi\u0119cej ni\u017c np. 0.1 milimetra (reliability)?<\/p>\n\n\n\n<p>Tu oczywi\u015bcie <strong>wyb\u00f3r b\u0119dzie zale\u017ca\u0142 od wymaga\u0144<\/strong>. Je\u015bli projektujemy system, kt\u00f3ry dzia\u0142a\u0107 b\u0119dzie w czasie rzeczywistym na poci\u0105gu pomiarowym i wiemy, \u017ce nie wolno nam przekroczy\u0107 1ms przy wyliczaniu odpowiedzi, wa\u017cniejsze b\u0119dzie dla nas availability.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Architektura 1oo2 i 2oo2<\/h3>\n\n\n\n<p>Je\u015bli jednak <strong>system b\u0119dzie dzia\u0142a\u0107 w post-processingu<\/strong> i nie b\u0119dzie problemem ponowne uruchomienie oblicze\u0144 np. po korekcie danych wej\u015bciowych, naszym priorytetem b\u0119dzie reliability.<\/p>\n\n\n\n<p>W pierwszym przypadku zbudujemy <strong>system w architekturze 1oo2 (one\u2013out-of-two)<\/strong>, czyli akceptujemy wynik, kt\u00f3ry otrzymamy jako pierwszy, a je\u015bli jeden z komputer\u00f3w ulegnie awarii, system dalej b\u0119dziemy w stanie wykona\u0107 swoje zadanie.<\/p>\n\n\n\n<p>W drugim przypadku zbudujemy <strong>system w architekturze 2oo2 (two\u2013out-of-two)<\/strong> i jako poprawny uznamy wynik tylko wtedy, gdy b\u0119dzie identyczny na obu komputerach (lub r\u00f3\u017cnica tych wynik\u00f3w b\u0119dzie mie\u015bci\u0107 si\u0119 w akceptowalnym zakresie tolerancji).<\/p>\n\n\n\n<p>Brzmi rozs\u0105dnie, ale czemu mia\u0142oby to zredukowa\u0107 nasze availability?<\/p>\n\n\n\n<p>Odpowied\u017a tu jest dosy\u0107 prosta. Przyk\u0142adowo nasz system jest z\u0142o\u017cony z identycznych modu\u0142\u00f3w zar\u00f3wno pod wzgl\u0119dem sprz\u0119tu jak i oprogramowania. Ka\u017cdy element modu\u0142u posiada pewn\u0105 awaryjno\u015b\u0107, wi\u0119c wraz ze wzrostem z\u0142o\u017cono\u015bci, rosn\u0105\u0107 b\u0119dzie awaryjno\u015b\u0107 modu\u0142u. Oznacza to, \u017ce <strong>powielaj\u0105c element lub system, powielamy r\u00f3wnie\u017c jego awaryjno\u015b\u0107.<\/strong><\/p>\n\n\n\n<p>Mo\u017ce zdarzy\u0107 si\u0119 te\u017c tak, \u017ce b\u0119dziemy mieli du\u017co czasu i mo\u017cliwe b\u0119dzie parokrotne wykonanie oblicze\u0144 oraz uznanie wyniku za poprawny, je\u015bli by\u0142 identyczny za ka\u017cdym razem.<\/p>\n\n\n\n<p>Cho\u0107 1oo2 i 2oo2 s\u0105 najbardziej popularnymi architekturami, w praktyce stosuje si\u0119 r\u00f3wnie\u017c systemy 1oo3, 2oo3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dygresja do certyfikacji<\/h3>\n\n\n\n<p>Czasami mo\u017cliwe jest uzyskanie wy\u017cszego poziomu SIL, przy pomocy 2 system\u00f3w po\u0142\u0105czonych r\u00f3wnolegle. Przyk\u0142adowo, mo\u017cemy zbudowa\u0107 system elektroniczny SIL2 z 2 po\u0142\u0105czonych r\u00f3wnolegle elektronicznych system\u00f3w SIL1, jednak chc\u0105c zbudowa\u0107 elektroniczny system SIL3 z 2 elektronicznych system\u00f3w SIL2, potrzebna b\u0119dzie szczeg\u00f3\u0142owa analiza czy mo\u017cemy tak zrobi\u0107. Du\u017co zale\u017cy tu od rodzaju systemu oraz normy, z kt\u00f3r\u0105 pracujemy. Wi\u0119cej dowiesz si\u0119 z artyku\u0142u H. J. i H. Sch\u00e4be [1].<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dywersyfikacja<\/h2>\n\n\n\n<p>Drug\u0105, nieco bardziej skomplikowan\u0105 metod\u0105, jest dywersyfikacja (diversification). O dywersyfikacji jest mowa wtedy, gdy powielane elementy nie s\u0105 ju\u017c identyczne. Dywersyfikowa\u0107 mo\u017cna na 3 poziomach: software, hardware oraz na poziomie danych.<\/p>\n\n\n\n<p>Modyfikuj\u0105c powy\u017cszy przyk\u0142ad, dalej mo\u017cemy budowa\u0107 system 2oo2, ale teraz ka\u017cdy z komputer\u00f3w b\u0119dzie posiada\u0142 procesor o innej architekturze, inny algorytm do obliczania przechy\u0142ki lub dane wej\u015bciowe pochodz\u0105ce z r\u00f3\u017cnych \u017ar\u00f3de\u0142. Dywersyfikacja jest przewa\u017cnie <strong>bardziej kosztowna<\/strong>, ale pozwala dodatkowo zabezpieczy\u0107 si\u0119 przed b\u0142\u0119dami innymi ni\u017c w przypadku powielenia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">B\u0142\u0105d Common cause failure<\/h3>\n\n\n\n<p>Przyk\u0142adowym typem takiego b\u0142\u0119du jest common cause failure, kt\u00f3ry mo\u017ce polega\u0107 na tym, \u017ce:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Dwa lub wi\u0119cej element\u00f3w zawiedzie w okre\u015blonym czasie, co mo\u017ce wp\u0142yn\u0105\u0107 na zdolno\u015b\u0107 operacyjn\u0105 systemu.<\/li>\n\n\n\n<li>Element zawiedzie z powodu jednej wsp\u00f3lnej usterki w obu kana\u0142ach w jednakowy spos\u00f3b.<\/li>\n<\/ol>\n\n\n\n<p>Rozwa\u017cmy dwa uk\u0142ady, ka\u017cdy z innym procesorem, wykonywuj\u0105ce ten sam program oraz posiadaj\u0105ce ten sam zestaw danych wej\u015bciowych. W tym przypadku jeste\u015bmy odporni na <a href=\"https:\/\/en.wikipedia.org\/wiki\/Heisenbug#Related_terms\" target=\"_blank\" rel=\"noopener\" rel=\"nofollow\" >cz\u0119\u015b\u0107 b\u0142\u0119d\u00f3w procesora (bohrbug\u00f3w)<\/a>, kt\u00f3re prawdopodobnie nie zosta\u0142yby wykryte w przypadku powielenia.<\/p>\n\n\n\n<p>Czemu tylko cz\u0119\u015bci\u0105? Poniewa\u017c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Heisenbug\" target=\"_blank\" rel=\"noopener\" rel=\"nofollow\" >wi\u0119kszo\u015b\u0107 tego typu b\u0142\u0119d\u00f3w to heisenbugi,<\/a> wi\u0119c prawdopodobie\u0144stwo, \u017ce wyst\u0105pi\u0105 r\u00f3wnocze\u015bnie jest znikome.<\/p>\n\n\n\n<p><strong>Jak cz\u0119sto procesory si\u0119 myl\u0105?<\/strong> Ot\u00f3\u017c du\u017co cz\u0119\u015bciej ni\u017c mo\u017cna by si\u0119 by\u0142o spodziewa\u0107. Erraty procesor\u00f3w licz\u0105 dziesi\u0105tki stron i raczej nie zawieraj\u0105 wszystkich istniej\u0105cych b\u0142\u0119d\u00f3w, a jedynie te wykryte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co mo\u017cna powiela\u0107 lub dywersyfikowa\u0107?<\/h2>\n\n\n\n<p>Decyduj\u0105c si\u0119 na jedn\u0105 z metod powielania lub dywersyfikacji, warto jeszcze wyja\u015bni\u0107 co mo\u017cna powiela\u0107 lub dywersyfikowa\u0107. Istniej\u0105 2 opcje: mo\u017cna powieli\u0107 pojedynczy komponent lub ca\u0142y system. Na czym polega r\u00f3\u017cnica? Popatrzmy na prosty schemat systemu sk\u0142adaj\u0105cego si\u0119 z 3 element\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/05\/1.png\"><img decoding=\"async\" width=\"750\" height=\"253\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/05\/1.png\" alt=\"\" class=\"wp-image-13815\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/05\/1.png 750w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/05\/1-300x101.png 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/figure>\n\n\n\n<p>Najbardziej awaryjny jest element C, mamy zatem 2 opcje.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Powieli\u0107 ca\u0142y system:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/2.png\"><img decoding=\"async\" width=\"750\" height=\"467\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/2.png\" alt=\"\" class=\"wp-image-22658\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/2.png 750w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/2-300x187.png 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Powieli\u0107 newralgiczny element:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/3.png\"><img decoding=\"async\" width=\"750\" height=\"366\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/3.png\" alt=\"\" class=\"wp-image-22660\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/3.png 750w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/07\/3-300x146.png 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/figure>\n\n\n\n<p>Nale\u017cy sobie zada\u0107 pytanie, kt\u00f3ra opcja jest lepsza. Tu odpowied\u017a zale\u017cy od specyfiki systemu, jednak <strong>w wi\u0119kszo\u015bci przypadk\u00f3w taniej i \u0142atwiej powieli\u0107 pojedynczy komponent ni\u017c ca\u0142y system.<\/strong><\/p>\n\n\n\n<p>Duplikacja systemu oznacza wi\u0119ksz\u0105 z\u0142o\u017cono\u015b\u0107 ca\u0142ego rozwi\u0105zania (a wi\u0119c i awaryjno\u015b\u0107). Mo\u017ce wymusi\u0107 potrzeb\u0119 synchronizacji tych system\u00f3w lub po prostu wi\u0119ksze koszty ni\u017c duplikacja pojedynczego elementu.<\/p>\n\n\n\n<p>Systemy dzia\u0142aj\u0105ce w architekturze 1oo2 (lub zbli\u017conej np. 1oo3), mog\u0105 korzysta\u0107 z <strong>funkcjonalno\u015bci hot swap. <\/strong>Polega ona na utrzymaniu w gotowo\u015bci zapasowego systemu\/system\u00f3w i w momencie, gdy wykryjemy awari\u0119 pierwszego systemu, system zapasowy przejmuje jego funkcje \u201ew locie\u201d, w taki spos\u00f3b, aby ci\u0105g\u0142o\u015b\u0107 funkcjonowania zosta\u0142a zachowana.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Safety bag<\/h2>\n\n\n\n<p>Safety bag jest specyficzn\u0105 form\u0105 dywersyfikacji. Czasami wyst\u0119puj\u0105c\u0105 pod nazw\u0105 \u201c<strong>diverse monitor<\/strong>\u201d. W sk\u0142ad tej architektury wchodz\u0105 2 elementy: system oraz monitor. System ma wi\u0119ksz\u0105 swobod\u0119 dzia\u0142ania i jest przewa\u017cnie du\u017co bardziej skomplikowany. Monitor z kolei b\u0119dzie du\u017co prostszy, a jego zadanie polega na tym, aby ca\u0142y uk\u0142ad nie opu\u015bci\u0142 strefy bezpiecze\u0144stwa.<\/p>\n\n\n\n<p>Warto zaznaczy\u0107, \u017ce <strong>poprawno\u015b\u0107 dzia\u0142ania nie jest r\u00f3wna bezpiecze\u0144stwu<\/strong>, tak wi\u0119c monitor nie gwarantuje poprawnego dzia\u0142ania, a tylko dzia\u0142anie bezpieczne. W momencie, gdy monitor zauwa\u017cy, potencjalne niebezpiecze\u0144stwo, przejmuje kontrol\u0119 i reaguje, aby wprowadzi\u0107 system w stan bezpieczny.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>Powy\u017cszy tekst opisuje najprostsze metody modyfikacji w\u0142a\u015bciwo\u015bci system\u00f3w przy pomocy ich architektury. Zbi\u00f3r dost\u0119pnych rozwi\u0105za\u0144 jest oczywi\u015bcie du\u017co szerszy. Przedstawiony opis jest dosy\u0107 og\u00f3lny, gdy\u017c powy\u017csze rozwi\u0105zania mog\u0105 by\u0107 stosowane zar\u00f3wno w warstwach mechanicznych, elektronicznych jak i softwarowych.<\/p>\n\n\n\n<p>Jednak nawet tak og\u00f3lny opis pokazuje, \u017ce nie jeste\u015bmy w stanie zbudowa\u0107 systemu, kt\u00f3ry zwraca w 100% poprawn\u0105 odpowied\u017a i jest dost\u0119pny przez 100% czasu. Nale\u017cy wi\u0119c pami\u0119ta\u0107, aby potrzeby naszego systemu zidentyfikowa\u0107 na jak najwcze\u015bniejszym etapie projektowania, gdy\u017c pozwoli to na nadanie mu takiego kszta\u0142tu, kt\u00f3ry zmaksymalizuje cechy przez nas po\u017c\u0105dane.<\/p>\n\n\n\n<p>Ponadto decyzja o tym, aby przyk\u0142adowo powieli\u0107 element czy podsystem w p\u00f3\u017aniejszych fazach projektu, b\u0119dzie bardziej kosztowna ni\u017c taka sama decyzja podj\u0119ta na samym pocz\u0105tku.<\/p>\n\n\n\n<p><strong>Konflikt <\/strong><strong>reliability z availability<\/strong>, nie jest jedynym, kt\u00f3ry nale\u017cy mie\u0107 na uwadze projektuj\u0105c system. We wst\u0119pie wymieni\u0142em kilka innych, jednak jest to temat na osobny artyku\u0142.<\/p>\n\n\n\n<p>Ostatecznie: to co musimy, co powinni\u015bmy, a czego nie wolno nam robi\u0107, b\u0119dzie definiowa\u0107 norma \u201cbran\u017cowa\u201d zwi\u0105zana z przeznaczeniem naszego systemu. Norm\u0105 bazow\u0105 traktuj\u0105c\u0105 o bezpiecze\u0144stwie jest \u201cIEC 61508: Functional Safety of Electrical\/Electronic\/Programmable Electronic Safety-related Systems\u201d, a przyk\u0142adowe normy uszczeg\u00f3\u0142awiaj\u0105ce to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ISO 26262 \u2013 automotive.<\/li>\n\n\n\n<li>IEC 62279 \u2013 rail.<\/li>\n\n\n\n<li>IEC 61513 \u2013 power plants.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<p>[1] H. J. &amp;. H. Sch\u00e4be, \u201cComputer architectures and safety integrity level apportionment\u201d, T\u00dcV InterTraffic GmbH, K\u00f6ln, Germany, 2004<\/p>\n\n\n\n<p>[2] <a href=\"https:\/\/books.google.pl\/books\/about\/Embedded_Software_Development_for_Safety.html?id=y5KpDwAAQBAJ&amp;redir_esc=y\" target=\"_blank\" rel=\"noopener\" rel=\"nofollow\" >C. Hobbs, Embedded Software Development for Safety-Critical Systems, 2015.<\/a><\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli interesuj\u0105 Ci\u0119 tematyka Embedded, zach\u0119camy do zapoznania si\u0119 z publikacjami naszych specjalist\u00f3w:<a href=\"https:\/\/sii.pl\/blog\/branchless-programming-czyli-programowanie-bezgaleziowe\/?category=development-na-twardo&amp;tag=jezyk-programowania%2Cembedded%2Cinstrukcje-warunkowe%2Cprogramowanie-bezgaleziowe&amp;preview_id=12949&amp;preview_nonce=8b545a04e8&amp;preview=true&amp;_thumbnail_id=12973\" target=\"_blank\" rel=\"noopener\"> Branchless programming czyli programowanie &#8222;bezga\u0142\u0119ziowe<\/a>&#8221; i&nbsp;<a href=\"https:\/\/sii.pl\/blog\/en\/practical-use-of-cryptography-on-the-example-of-instant-messaging-application\/?category=hard-development&amp;tag=embedded-en&amp;preview_id=13415&amp;preview_nonce=e1c97dd4ff&amp;preview=true&amp;_thumbnail_id=13436\" target=\"_blank\" rel=\"noopener\">Praktyczne wykorzystanie kryptografii na przyk\u0142adzie komunikatora<\/a>&nbsp;oraz <a href=\"https:\/\/sii.pl\/blog\/maszyny-wirtualne-interpretery-czesc-i-architektura\/?category=development-na-twardo&amp;tag=embedded%2Cinterpreter%2Cmaszyna-wirtualna&amp;preview_id=12175&amp;preview_nonce=59d5f79300&amp;preview=true&amp;_thumbnail_id=12196\" target=\"_blank\" rel=\"noopener\">cyklem dotycz\u0105cym Maszyn wirtualnych &#8211; interpreter\u00f3w.<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;13813&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;6&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 6)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Cechy system\u00f3w bezpiecznych reliability i availability a architektura&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 6)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ka\u017cdy system posiada architektur\u0119. W idealnym \u015bwiecie, gdy pracujemy wed\u0142ug wytycznych V-modelu, zostanie ona zaprojektowana jeszcze przed napisaniem pierwszej linii &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/cechy-systemow-bezpiecznych-reliability-i-availability-a-architektura\/\">Continued<\/a><\/p>\n","protected":false},"author":361,"featured_media":13820,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":6,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[563],"class_list":["post-13813","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-embedded"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2022\/05\/Cechy-systemow-bezpiecznych-reliability-i-availability-a-architektura.png","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/13813"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/361"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=13813"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/13813\/revisions"}],"predecessor-version":[{"id":22662,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/13813\/revisions\/22662"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/13820"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=13813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=13813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=13813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}