Czym jest system rozproszony?

Przegląd systemów rozproszonych i architektur mikrousług

Kev Zettler — zdjęcie portretowe
Kev Zettler

Full stack web developer


System rozproszony to zbiór programów komputerowych, które wykorzystują zasoby obliczeniowe w wielu oddzielnych węzłach obliczeniowych, aby osiągnąć wspólny cel. Systemy rozproszone mają za zadanie eliminować z systemu wąskie gardła lub centralne punkty awarii.

Co się dzieje, gdy aplikacja jest tworzona jako pojedyncza, możliwa do wdrożenia jednostka, która działa całkiem dobrze, ale z czasem jej rozmiar i złożoność wzrasta? Jej utrzymanie staje się często trudniejsze, tempo rozwoju spada, a ryzyko awarii wzrasta. W takim przypadku ścieżka ewolucyjna polega na przekształceniu monolitu w system rozproszony, zwykle w architekturę mikrousług.

Czym jest system rozproszony?


System rozproszony to zbiór programów komputerowych, które wykorzystują zasoby obliczeniowe w wielu oddzielnych węzłach obliczeniowych, aby osiągnąć wspólny cel. Znany jest także jako przetwarzanie rozproszone lub rozproszone bazy danych, a jego działanie polega na tym, że poszczególne węzły komunikują się i synchronizują za pośrednictwem wspólnej sieci. Te węzły zazwyczaj reprezentują oddzielne fizyczne urządzenia sprzętowe, ale mogą to również być oddzielne procesy oprogramowania lub inne rekursywne systemy zamknięte. Systemy rozproszone mają za zadanie eliminować z systemu wąskie gardła lub centralne punkty awarii.

Rozproszone systemy komputerowe mają następujące cechy:

Współdzielenie zasobów — system rozproszony może współdzielić sprzęt, oprogramowanie lub dane.

Przetwarzanie równoczesne — wiele komputerów może przetwarzać tę samą funkcję jednocześnie.

Skalowalność — wydajność obliczeniową i przetwarzania można skalować w razie potrzeby po rozszerzeniu o dodatkowe komputery.

Wykrywanie błędów — można łatwiej wykrywać awarie.

Transparentność — węzeł może uzyskiwać dostęp do innych węzłów w systemie i komunikować się z nimi.

ikona magazynu kodu
materiały pokrewne

Microservices vs. monolithic architecture

ikona trzech pierścieni
POZNAJ ROZWIĄZANIE

Zarządzanie komponentami za pomocą rozwiązania Compass

Czym różni się system scentralizowany od systemu rozproszonego?


Obraz porównania systemu scentralizowanego i rozproszonego

Scentralizowany system obliczeniowy to taki, w którym wszystkie obliczenia są wykonywane przez jeden komputer znajdujący się w pojedynczej lokalizacji. Główną różnicą między systemami scentralizowanymi i rozproszonymi jest schemat komunikacji między węzłami systemu. Stan systemu scentralizowanego jest zawarty w centralnym węźle, do którego klienci mają dostęp w sposób indywidualny. W systemie scentralizowanym wszystkie węzły mają dostęp do węzła centralnego, co może prowadzić do przeciążenia sieci i jej spowolnienia. System scentralizowany ma pojedynczy punkt awarii, natomiast system rozproszony nie ma pojedynczego punktu awarii.

Czy systemy rozproszone są tożsame z mikrousługami?


Architektura mikrousług jest jednym z rodzajów systemu rozproszonego, ponieważ polega na podziale aplikacji na osobne komponenty lub „usługi”. Przykładowo w architekturze mikrousług mogą istnieć usługi odpowiadające funkcjom biznesowym (płatnościom, użytkownikom, produktom itp.), w których każdy odpowiadający im komponent obsługuje logikę biznesową związaną z daną funkcją. System zawiera wówczas wiele nadmiarowych kopii usług, dzięki czemu nie ma centralnego punktu awarii dla danej usługi.

Czym jest śledzenie rozproszone?


Śledzenie rozproszone to metoda używana do profilowania lub monitorowania wyniku żądania wykonywanego w systemie rozproszonym. Monitorowanie systemu rozproszonego może być trudne, ponieważ każdy węzeł ma swój własny strumień dzienników i wskaźników. Aby uzyskać dokładny widok systemu rozproszonego, te oddzielne wskaźniki węzłów muszą być zagregowane w całościowy obraz.

Żądania kierowane do systemów rozproszonych zazwyczaj nie uzyskują dostępu do całego zbioru węzłów w systemie, lecz do części tego zbioru lub ścieżki przechodzącej przez węzły. Śledzenie rozproszone ujawnia najczęściej używane ścieżki w systemie rozproszonym i umożliwia zespołom analizowanie i monitorowanie tych ścieżek. Funkcje śledzenia rozproszonego są instalowane w każdym węźle systemu, a następnie umożliwiają zespołom odpytywanie systemu w celu uzyskania informacji o kondycji węzłów i wydajności przetwarzania żądań.

Korzyści, wady i zagrożenia związane z systemami rozproszonymi


Systemy rozproszone często pomagają poprawić niezawodność i wydajność systemu. Poprawa niezawodności jest możliwa dzięki usunięciu centralnych punktów awarii i wąskich gardeł. Węzły systemu rozproszonego zapewniają nadmiarowość, dzięki czemu w przypadku awarii jednego węzła istnieją inne węzły, które są gotowe przejąć jego funkcję. Wydajność ulega poprawie, ponieważ węzły można łatwo skalować w poziomie i w pionie. Jeśli system jest poddawany dużemu obciążeniu, można dodać kolejne węzły, aby pomóc w jego przyjęciu. W celu obsługi większego obciążenia można także zwiększyć wydajność pojedynczego węzła.

Z drugiej jednak strony te korzyści mogą być okupione „niekontrolowanym rozwojem”, gdy system staje się zbyt złożony, a jego utrzymanie staje się wymagające. W miarę wzrostu złożoności systemu zespoły mogą mieć trudności z efektywnym organizowaniem, zarządzaniem i ulepszaniem tych systemów. Częściowo problemem może być zrozumienie, w jaki sposób poszczególne komponenty są ze sobą powiązane lub kto jest właścicielem danego komponentu oprogramowania. Utrudnia to określenie, w jaki sposób wprowadzać zmiany w komponentach, aby zmaksymalizować ich sprawność operacyjną i uniknąć negatywnych skutków nie tylko dla komponentów zależnych, ale także dla klientów. Gdy system zawiera wiele repozytoriów, do organizowania kodu systemu rozproszonego i zarządzania nim mogą być potrzebne specjalistyczne narzędzia, takie jak Atlassian Compass.

Architektury systemów rozproszonych


Istnieje wiele rodzajów systemów rozproszonych. Oto najczęściej spotykane:

Klient-serwer

W architekturze klient-serwer można wyróżnić dwa podstawowe zadania. Klient odpowiada za prezentację interfejsu użytkownika, który następnie łączy się przez sieć z serwerem. Serwer odpowiada za obsługę logiki biznesowej i zarządzanie stanem. Jeśli serwer nie jest nadmiarowy, architektura klient-serwer może łatwo przekształcić się w architekturę scentralizowaną. W prawdziwie rozproszonej konfiguracji klient-serwer istnieje wiele węzłów serwera umożliwiających rozproszenie połączeń klientów. Większość nowoczesnych architektur klient-serwer składa się z klientów, które łączą się z zamkniętym systemem rozproszonym na serwerze.

Architektura wielopoziomowa

Architektura wielopoziomowa rozszerza architekturę klient-serwer. Serwer w architekturze wielopoziomowej jest dzielony na węzły o większym stopniu szczegółowości, które umożliwiają wyodrębnienie dodatkowych obowiązków serwera backendu, takich jak przetwarzanie danych i zarządzanie nimi. Te dodatkowe węzły służą do asynchronicznego przetwarzania długo trwających zadań i odciążają pozostałe węzły backendu, które mogą skupić się na odpowiadaniu na żądania klientów i współpracy z magazynem danych.

Architektura peer-to-peer

W systemie rozproszonym peer-to-peer każdy węzeł zawiera kompletną instancję aplikacji. Nie ma podziału na węzły do prezentacji i przetwarzania danych. Węzeł zawiera warstwy prezentacji i warstwy obsługi danych. Równoważne węzły mogą zawierać kompletne dane stanu całego systemu.

Zaletą systemów peer-to-peer jest ekstremalna nadmiarowość. Gdy węzeł peer-to-peer zostaje zainicjowany i aktywowany, wyszukuje inne węzły i łączy się z nimi, a następnie synchronizuje swój stan lokalny ze stanem pochodzącym z większego systemu. Ta cecha oznacza, że awaria jednego węzła w systemie peer-to-peer nie powoduje zakłóceń w pracy żadnego z pozostałych węzłów. Oznacza to również, że system peer-to-peer będzie działać mimo awarii.

Architektura zorientowana na usługi

Architektura zorientowana na usługi (SOA) jest prekursorem mikrousług. Główna różnica między architekturą SOA a mikrousługami dotyczy zakresu węzłów — w mikrousługach istnieje on na poziomie funkcji. W mikrousługach węzeł obejmuje logikę biznesową służącą do obsługi określonego zestawu funkcji, np. przetwarzania płatności. Mikrousługi zawierają wiele odrębnych węzłów logiki biznesowej, które łączą się z niezależnymi węzłami baz danych. W odróżnieniu od nich węzły architektury SOA obejmują całą aplikację lub dział firmy. Granica usług dla węzłów SOA zazwyczaj obejmuje cały system baz danych w obrębie węzła.

Ze względu na swoje zalety mikrousługi stają się coraz popularniejszą alternatywą dla architektury SOA. Mikrousługi oferują większą komponowalność, co pozwala zespołom na ponowne wykorzystanie funkcji dostarczanych przez małe węzły usług. Są też bardziej niezawodne i umożliwiają bardziej dynamiczne skalowanie w pionie i poziomie.

Przypadki użycia systemów rozproszonych

Z systemów rozproszonych korzysta wiele nowoczesnych aplikacji. Systemami rozproszonymi są aplikacje internetowe i mobilne o dużym natężeniu ruchu. Użytkownicy łączą się w trybie klient-serwer, gdzie klientem jest przeglądarka internetowa lub aplikacja mobilna. Serwer jest wówczas swoim własnym systemem rozproszonym. Nowoczesne serwery internetowe działają zgodnie ze schematem systemu wielopoziomowego. Moduł równoważenia obciążenia służy do delegowania żądań do wielu węzłów logicznych serwera, które komunikują się za pośrednictwem systemów kolejek komunikatów.

Kubernetes jest popularnym narzędziem używanym w przypadku systemów rozproszonych, ponieważ pozwala utworzyć system rozproszony z kolekcji kontenerów. Kontenery tworzą węzły systemu rozproszonego, a następnie Kubernetes zarządza komunikacją sieciową między węzłami, a także obsługuje dynamiczne skalowanie w poziomie i pionie węzłów systemu.

Innym dobrym przykładem systemów rozproszonych są kryptowaluty, takie jak bitcoin i ethereum, które są systemami rozproszonymi typu peer-to-peer. Każdy węzeł w sieci kryptowaluty jest niezależną replikacją pełnej historii rejestru waluty. Gdy węzeł waluty zostanie aktywowany, uruchamia się, łącząc się z innymi węzłami i pobierając pełną kopię rejestru. Ponadto kryptowaluty obejmują klientów lub „portfele”, które łączą się z węzłami rejestru za pomocą protokołu JSON RPC.

Wnioski…


Systemy rozproszone są powszechnie stosowane w większości nowoczesnych rozwiązań związanych z oprogramowaniem. Bazują na nich aplikacje mediów społecznościowych, usługi strumieniowego przesyłania wideo, sklepy internetowe i wiele innych. Systemy scentralizowane w naturalny sposób przekształcają się w systemy rozproszone, aby poradzić sobie ze skalowaniem. Korzystanie z mikrousług jest popularnym i szeroko stosowanym sposobem na utworzenie systemu rozproszonego.

Mimo że systemy rozproszone są bardziej skomplikowane w budowie i utrzymaniu, Atlassian Compass pozwala poradzić sobie z tą złożonością. Jest to platforma środowiska programistycznego, która ułatwia nawigowanie po rozproszonej architekturze, gromadząc w centralnej lokalizacji z możliwością wyszukiwania niepowiązane informacje o wynikach działań inżynieryjnych i zespołach nad nimi współpracujących.

Kev Zettler
Kev Zettler

Kev jest wiodącym web deweloperem i przedsiębiorcą z ponad dziesięcioleciem doświadczenia w tworzeniu produktów i zespołów za pomocą metodologii Agile. Jest zapalonym twórcą, autorem i edukatorem w zakresie nowych technologii open source, takich jak DevOps, kryptowaluty i VR/AR. W wolnym czasie bierze udział w jamach poświęconych tworzeniu gier indie.


Udostępnij ten artykuł
Następny temat

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up