<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Cloud engineering &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<atom:link href="https://nearshore-it.eu/pl/tag/cloud-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>https://nearshore-it.eu/pl/</link>
	<description>We are Nearshore Software Development Company with 14years of experience in delivering a large scale IT projects in the areas of PHP, JAVA, .NET, BI and MDM.</description>
	<lastBuildDate>Tue, 27 Jan 2026 08:25:50 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nearshore-it.eu/wp-content/uploads/2023/01/cropped-inetum-favicon-300x300-1-32x32.png</url>
	<title>Cloud engineering &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<link>https://nearshore-it.eu/pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach</title>
		<link>https://nearshore-it.eu/pl/artykuly/azure-service-bus/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/azure-service-bus/#respond</comments>
		
		<dc:creator><![CDATA[Bartosz Brandt]]></dc:creator>
		<pubDate>Mon, 26 Jan 2026 14:30:09 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Application development]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=37834</guid>

					<description><![CDATA[Azure Service Bus to dojrzały broker komunikatów klasy enterprise, który w ekosystemie Microsoft Azure odpowiada za niezawodną komunikację między mikroserwisami i systemami zewnętrznymi. Artykuł pokazuje, jak kolejki, topics, subskrypcje i sesje pozwalają budować systemy odporne na przeciążenia i awarie oraz dlaczego wzorce takie jak publish/subscribe, request–response, outbox i inbox są dziś fundamentem architektury event-driven. Jeśli projektujesz skalowalne aplikacje i chcesz świadomie wybrać model komunikacji — ten materiał pomoże Ci podjąć właściwe decyzje architektoniczne.]]></description>
										<content:encoded><![CDATA[
<p>Podczas tworzenia nowoczesnych aplikacji coraz rzadziej wybierana jest architektura monolityczna. W dzisiejszych czasach znacznie częściej są to modularne monolity lub <a href="https://nearshore-it.eu/pl/artykuly/mikroserwisy-nowa-jakosc-w-miedzynarodowych-projektach-it/">mikroserwisy</a>. Często również spotykamy integracje z systemami zewnętrznymi oraz architekturę event-driven, które sprawiają, że kluczowym elementem staje się niezawodna komunikacja pomiędzy komponentami. W ekosystemie Microsoft Azure rolę tę bardzo często pełni usługa Service Bus – dojrzały broker komunikatów klasy enterprise.</p>



<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#czym-jest-usluga-service-bus-i-dlaczego-microsoft-stawia-na-komunikaty-w-chmurze">1.  Czym jest usługa Service Bus i dlaczego Microsoft stawia na komunikaty w chmurze?</a></li>
                    <li><a href="#kolejki-topics-i-subskrypcje-oraz-sesje-jak-dziala-usluga-azure-service-bus">2.  Kolejki, Topics i subskrypcje oraz sesje – jak działa usługa Azure Service Bus?</a></li>
                    <li><a href="#azure-service-bus-queue-vs-topic-kiedy-wybrac-ktore-rozwiazanie">3.  Azure Service Bus Queue vs Topic – kiedy wybrać które rozwiązanie?</a></li>
                    <li><a href="#azure-service-bus-patterns-wzorce-ktore-warto-znac">4.  Azure Service Bus Patterns – wzorce, które warto znać</a></li>
                    <li><a href="#monitoring-i-diagnostyka-azure-service-bus-alerts-i-integracja-z-application-insights">5.  Monitoring i diagnostyka: Azure Service Bus Alerts i integracja z Application Insights</a></li>
                    <li><a href="#zabezpieczenia-w-azure-service-bus-rbac-sas-i-protokol-amqp">6.  Zabezpieczenia w Azure Service Bus – RBAC, SAS i protokół AMQP</a></li>
                    <li><a href="#podsumowanie-co-warto-zapamiętać">7.  Podsumowanie – co warto zapamiętać?</a></li>
                    <li><a href="#czesto-zadawane-pytania">8.  Często zadawane pytania</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="czym-jest-usluga-service-bus-i-dlaczego-microsoft-stawia-na-komunikaty-w-chmurze">Czym jest usługa Service Bus i dlaczego Microsoft stawia na komunikaty w chmurze?</h2>



<p>Azure Service Bus pozwala oddzielić producentów komunikatów od ich konsumentów. Dzięki temu aplikacje nie muszą znać się nawzajem ani działać w tym samym czasie. Komunikaty mogą być bezpiecznie przechowywane, ponawiane i przetwarzane asynchronicznie, co znacząco poprawia stabilność całego systemu.</p>



<p>Z perspektywy architekta jest to jedno z kluczowych narzędzi do budowy systemów odpornych na przeciążenia i chwilowe awarie.</p>



<p>Azure Service Bus to zarządzana usługa message brokera, oferująca:</p>



<ul class="wp-block-list">
<li>kolejki (Queues),</li>



<li>tematy i subskrypcje (Topics &amp; Subscriptions),</li>



<li>transakcje,</li>



<li>obsługę kolejki utraconych wiadomości (dead-letter queue),</li>
</ul>



<p>Nowoczesne systemy IT konsekwentnie promują komunikację asynchroniczną za pomocą kolejek z kilku powodów:</p>



<ul class="wp-block-list">
<li>zwiększa skalowalność,</li>



<li>upraszcza rozwój mikroserwisów,</li>



<li>pozwala niezależnie wdrażać i rozwijać komponenty niezależnie od użytych technologii do ich wytworzenia,</li>



<li>pozwala lepiej wykorzystać zasoby chmurowe dostępne np. w środowisku Microsoft Azure.</li>
</ul>



<h2 class="wp-block-heading" id="kolejki-topics-i-subskrypcje-oraz-sesje-jak-dziala-usluga-azure-service-bus">Kolejki, Topics i subskrypcje oraz sesje – jak działa usługa Azure Service Bus?</h2>



<h3 class="wp-block-heading">Service Bus Queue – kolejki usługi service bus</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="756" height="620" src="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_1.png" alt="Service Bus Queue – kolejki usługi service bus " class="wp-image-37838" title="Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach 1" srcset="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_1.png 756w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_1-300x246.png 300w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_1-482x395.png 482w" sizes="(max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:16px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Kolejki w Azure Service Bus realizują model <strong>point-to-point</strong>, w którym każdy komunikat trafia do kolejki i jest przetwarzany <strong>przez jednego konsumenta</strong>. Nadawca i odbiorca są od siebie niezależni – komunikaty mogą być wysyłane i odbierane w różnym czasie, co zwiększa odporność systemu na awarie i chwilowe przeciążenia.</p>



<p>Usługa wykorzystuje mechanizm <strong>Peek-Lock</strong>, który tymczasowo blokuje komunikat po jego odebraniu. Dopiero po poprawnym przetworzeniu jest on usuwany z kolejki. W przypadku wystąpienia błędu może zostać ponownie udostępniony innemu odbiorcy lub trafić do <strong>dead-letter queue</strong>, co ułatwia diagnostykę problemów. Mechanizm Peek-Lock pozwala konsumentowi tymczasowo zablokować komunikat w kolejce. W przypadku wygaśnięcia blokady (np. z powodu timeoutu), komunikat staje się dostępny dla innych konsumentów, co może prowadzić do powtórnego odbioru.</p>



<p>Jedna kolejka może być obsługiwana przez wiele instancji konsumentów. Azure Service Bus automatycznie rozdziela komunikaty pomiędzy nich, zapewniając <strong>naturalny load balancing</strong> bez dodatkowej logiki po stronie aplikacji.</p>



<p>Kolejki sprawdzają się szczególnie dobrze w scenariuszach takich jak:</p>



<ul class="wp-block-list">
<li>przetwarzanie zadań w tle,</li>



<li>kolejkowanie żądań i ochrona systemów przed przeciążeniem,</li>



<li>równoważenie obciążenia pomiędzy wieloma instancjami usług,</li>



<li>asynchroniczna integracja systemów.</li>
</ul>



<h3 class="wp-block-heading">Topics i subskrypcje</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="756" height="1080" src="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_2.png" alt="Topics i subskrypcje " class="wp-image-37841" title="Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach 2" srcset="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_2.png 756w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_2-210x300.png 210w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_2-277x395.png 277w" sizes="(max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:16px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Topics w Azure Service Bus realizują wzorzec <strong>publish/subscribe</strong>, w którym jeden komunikat może zostać dostarczony do <strong><a href="https://nearshore-it.eu/pl/artykuly/systemy-rozproszone-niezalezne-od-platformy-wprowadzenie-do-dapr-io/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/systemy-rozproszone-niezalezne-od-platformy-wprowadzenie-do-dapr-io/">wielu niezależnych odbiorców</a></strong>. Producent wysyła komunikat do tematu (Topic), nie wiedząc, kto i ile systemów będzie go konsumować. Każda subskrypcja działa jak osobna kolejka, posiadająca własny stan, retry oraz dead-letter queue.</p>



<p>Największą zaletą Topics są <strong>subskrypcje z filtrami</strong>, które pozwalają określić, jakie komunikaty trafią do danego odbiorcy. Filtry SQL lub reguły oparte o właściwości komunikatu umożliwiają precyzyjne routowanie zdarzeń bez dodatkowej logiki po stronie producenta.</p>



<p>Każda subskrypcja może być obsługiwana przez wiele instancji konsumentów, co, podobnie jak w przypadku kolejek, umożliwia<strong> równoległe przetwarzanie i load balancing</strong>. Jednocześnie różne subskrypcje mogą przetwarzać ten sam komunikat w zupełnie inny sposób lub w innym tempie.</p>



<p>Topics i subskrypcje sprawdzają się szczególnie dobrze w scenariuszach takich jak:</p>



<ul class="wp-block-list">
<li>architektura event-driven,</li>



<li>propagacja zdarzeń domenowych,</li>



<li>integracja wielu systemów reagujących na te same zdarzenia,</li>



<li>oddzielenie logiki biznesowej od procesów pomocniczych (np. powiadomień, audytu, raportowania).</li>
</ul>



<p>Dzięki modelowi publish/subscribe Azure Service Bus Topics umożliwiają budowę elastycznych i łatwo rozszerzalnych systemów, w których dodanie nowego odbiorcy nie wymaga zmian po stronie nadawcy.</p>



<h3 class="wp-block-heading">Sesje</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="756" height="560" src="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_3.png" alt="Sesje - Azure Service Bus" class="wp-image-37844" title="Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach 3" srcset="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_3.png 756w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_3-300x222.png 300w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_3-495x367.png 495w" sizes="(max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:16px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Sesje w Azure Service Bus to mechanizm umożliwiający <strong>grupowanie powiązanych komunikatów</strong> i przetwarzanie ich w <strong>ściśle określonej kolejności</strong>. Każdy komunikat posiada SessionId, a wszystkie komunikaty z tym samym identyfikatorem trafiają do tej samej sesji i są obsługiwane sekwencyjnie przez jednego konsumenta.</p>



<p>W praktyce oznacza to, że choć kolejka lub subskrypcja może być przetwarzana równolegle przez wiele instancji odbiorców, to <strong>w ramach jednej sesji nigdy nie dochodzi do przetwarzania równoległego</strong>. Azure Service Bus blokuje sesję na czas jej obsługi przez konkretnego konsumenta, co eliminuje problemy z kolejnością i <a href="https://nearshore-it.eu/pl/artykuly/pulapki-wspolbieznosci-narzut-synchronizacji-watkow/">współbieżnością</a>.</p>



<p>Sesje są szczególnie przydatne w scenariuszach, gdzie:</p>



<ul class="wp-block-list">
<li>kolejność komunikatów ma znaczenie (np. workflow, procesy krok po kroku),</li>



<li>komunikaty dotyczą jednego obiektu biznesowego (np. OrderId),</li>



<li>wymagane jest przetwarzanie stanowe (stateful processing),</li>



<li>system musi zachować spójność bez skomplikowanej synchronizacji.</li>
</ul>



<p>Sesje mogą być używane zarówno w Queue, jak i w subskrypcjach Topiców. Dzięki nim Azure Service Bus łączy wysoką skalowalność z kontrolą kolejności, co jest trudne do osiągnięcia w klasycznych systemach kolejkowych bez dodatkowej logiki po stronie aplikacji.</p>



<h2 class="wp-block-heading" id="azure-service-bus-queue-vs-topic-kiedy-wybrac-ktore-rozwiazanie">Azure Service Bus Queue vs Topic – kiedy wybrać które rozwiązanie?</h2>



<p>Wybór pomiędzy <strong>Queue</strong> a <strong>Topic</strong> w Azure Service Bus zależy przede wszystkim od tego, <strong>ile systemów ma przetwarzać dany komunikat</strong> i w jaki sposób ma on być obsłużony.</p>



<p>Queue najlepiej sprawdzi się w scenariuszach typu point-to-point, gdzie komunikat ma zostać przetworzony dokładnie raz przez jeden komponent. Jest to idealne rozwiązanie dla zadań w tle, kolejkowania żądań czy równoważenia obciążenia pomiędzy wieloma instancjami tej samej usługi. Queue upraszcza architekturę i minimalizuje liczbę zależności pomiędzy komponentami.</p>



<p>Topic warto wybrać wtedy, gdy komunikat reprezentuje zdarzenie, na które powinno zareagować wiele niezależnych systemów. Dzięki subskrypcjom i filtrom możliwe jest selektywne dostarczanie komunikatów do różnych odbiorców bez modyfikowania producenta. Topic naturalnie wspiera architekturę event-driven i ułatwia dalszą rozbudowę systemu.</p>



<p>W praktyce często stosuje się oba mechanizmy jednocześnie:</p>



<ul class="wp-block-list">
<li>Queue do obsługi zadań i procesów technicznych,</li>



<li>Topic do publikowania zdarzeń domenowych.</li>
</ul>



<p>Dobrze dobrany model komunikacji upraszcza architekturę i pozwala skalować system bez kosztownych refaktoryzacji w przyszłości.</p>



<h2 class="wp-block-heading" id="azure-service-bus-patterns-wzorce-ktore-warto-znac">Azure Service Bus Patterns – wzorce, które warto znać</h2>



<h3 class="wp-block-heading"><strong>Azure&nbsp;Service Bus&nbsp;Request-Response&nbsp;pattern</strong></h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="490" src="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_4.png" alt="Azure Service Bus Request-Response pattern" class="wp-image-37847" title="Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach 4" srcset="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_4.png 756w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_4-300x194.png 300w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_4-495x321.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:16px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Request–Response Pattern w Azure Service Bus umożliwia realizację komunikacji dwukierunkowej w sposób <strong>asynchroniczny</strong>, bez konieczności bezpośredniego połączenia pomiędzy nadawcą a odbiorcą. Zamiast klasycznego wywołania synchronicznego (np. HTTP), klient wysyła komunikat z żądaniem do kolejki lub tematu, a odpowiedź otrzymuje jako osobny komunikat.</p>



<p>W praktyce klient wysyła żądanie do <strong>Request Queue</strong>, dołączając informacje pozwalające na korelację odpowiedzi (np. CorrelationId lub nazwę kolejki odpowiedzi). Usługa odbierająca żądanie przetwarza je w swoim tempie i publikuje wynik do Response Queue, z której klient odbiera odpowiedź.</p>



<p>Takie&nbsp;podejście&nbsp;zapewnia:&nbsp;</p>



<ul class="wp-block-list">
<li>brak blokowania zasobów po stronie klienta,</li>



<li>odporność na opóźnienia i chwilową niedostępność usług,</li>



<li>lepszą skalowalność w porównaniu do komunikacji synchronicznej.</li>
</ul>



<p>Request–Response Pattern sprawdza się szczególnie w scenariuszach, gdzie odpowiedź jest wymagana, ale nie musi być natychmiastowa – np. w integracjach między mikroserwisami, procesach długotrwałych czy komunikacji pomiędzy systemami o różnej wydajności. W połączeniu z mechanizmami Azure Service Bus, takimi jak retry i dead-letter queue, wzorzec ten pozwala budować niezawodne i elastyczne rozwiązania komunikacyjne.</p>



<h3 class="wp-block-heading">Outbox Pattern</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="490" src="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_5.png" alt="Outbox Pattern - Azure Service Bus" class="wp-image-37850" title="Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach 5" srcset="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_5.png 756w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_5-300x194.png 300w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_5-495x321.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:16px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Outbox Pattern to wzorzec architektoniczny, który rozwiązuje problem <strong>spójności pomiędzy zapisem danych a publikacją komunikatu</strong>. W systemach opartych na komunikatach często pojawia się ryzyko, że dane zostaną zapisane w bazie, ale zdarzenie nie trafi do brokera (lub odwrotnie). Outbox Pattern eliminuje ten problem.</p>



<p>W praktyce, zamiast wysyłać komunikat bezpośrednio do Azure Service Bus, aplikacja zapisuje go najpierw do tabeli Outbox w tej samej transakcji co dane biznesowe. Dzięki temu zapis danych i „intencja wysłania komunikatu” stają się operacją atomową. Osobny proces (np. background worker) odczytuje wpisy z Outboxa i publikuje je do Azure Service Bus.</p>



<p>Takie podejście zapewnia:</p>



<ul class="wp-block-list">
<li>brak utraty komunikatów,</li>



<li>odporność na awarie sieci i brokera,</li>



<li>możliwość bezpiecznego ponowienia wysyłki.</li>
</ul>



<p>Outbox Pattern jest szczególnie przydatny w architekturze mikroserwisów i systemach event-driven, gdzie zdarzenia domenowe muszą być publikowane w sposób <strong>pewny i powtarzalny</strong>. W połączeniu z mechanizmami Azure Service Bus, takimi jak ponowienia wysyłki czy deduplikacja, stanowi solidną podstawę do budowy niezawodnej komunikacji między systemami. Outbox Pattern szczególnie dobrze współpracuje z bazami danych wspierającymi transakcje, pozwalając na spójne zapisanie danych biznesowych i komunikatu w jednym kroku.</p>



<h3 class="wp-block-heading">Inbox Pattern</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="540" src="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_6.png" alt="nearshore 2026.01.20 graphic 6" class="wp-image-37854" title="Azure Service Bus – usługa, która usprawnia obsługę komunikatów i kolejki w nowoczesnych aplikacjach 6" srcset="https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_6.png 756w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_6-300x214.png 300w, https://nearshore-it.eu/wp-content/uploads/2026/01/nearshore_2026.01.20_graphic_6-495x354.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:16px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Inbox Pattern to wzorzec architektoniczny, który rozwiązuje problem <strong>wielokrotnego przetwarzania tego samego komunikatu</strong>. W systemach opartych na komunikatach – takich jak Azure Service Bus – ponowne dostarczenie komunikatu jest zachowaniem poprawnym (np. po błędzie lub timeoutach), dlatego aplikacja musi być na to przygotowana.</p>



<p>W praktyce każdy odebrany komunikat jest najpierw rejestrowany w <strong>Inboxie</strong> – najczęściej w postaci zapisu jego unikalnego identyfikatora (MessageId) w bazie danych. Dopiero jeśli komunikat nie był wcześniej przetwarzany, trafia on do logiki biznesowej. Duplikaty są bezpiecznie ignorowane, co zapewnia <strong>idempotentność</strong> operacji.</p>



<p>Inbox Pattern zapewnia:</p>



<ul class="wp-block-list">
<li>ochronę przed skutkami retry i ponownych dostarczeń,</li>



<li>spójność danych w przypadku awarii podczas przetwarzania,</li>



<li>możliwość bezpiecznego skalowania konsumentów.</li>
</ul>



<h2 class="wp-block-heading" id="monitoring-i-diagnostyka-azure-service-bus-alerts-i-integracja-z-application-insights">Monitoring i diagnostyka: Azure Service Bus Alerts i integracja z Application Insights</h2>



<p>Skuteczne wykorzystanie Azure Service Bus w środowisku produkcyjnym wymaga odpowiedniego <strong>monitoringu i diagnostyki</strong>, które pozwalają szybko reagować na problemy z przetwarzaniem komunikatów. Platforma Azure udostępnia w tym zakresie gotowe mechanizmy oparte o Azure Monitor.</p>



<p>Azure Service Bus publikuje szereg metryk, takich jak liczba aktywnych komunikatów, długość dead-letter queue czy czas przetwarzania. Na ich podstawie można konfigurować Alert Rules, które automatycznie powiadomią zespół o potencjalnych problemach, np. rosnącej liczbie komunikatów w kolejce lub błędach po stronie konsumentów.</p>



<p>Dla głębszej diagnostyki Service Bus integruje się z Application Insights, umożliwiając śledzenie komunikatów w kontekście całego przepływu aplikacji. Dzięki korelacji telemetrycznej możliwe jest przeanalizowanie, jak komunikat przechodzi przez kolejne komponenty systemu i gdzie pojawiają się opóźnienia lub błędy.</p>



<p>Połączenie alertów, metryk i telemetryki aplikacyjnej pozwala nie tylko reagować na incydenty, ale także <strong>proaktywnie wykrywać problemy</strong>, zanim wpłyną one na użytkowników końcowych.</p>



<h2 class="wp-block-heading" id="zabezpieczenia-w-azure-service-bus-rbac-sas-i-protokol-amqp">Zabezpieczenia w Azure Service Bus – RBAC, SAS i protokół AMQP</h2>



<p>Azure Service Bus oferuje mechanizmy bezpieczeństwa klasy enterprise, które pozwalają precyzyjnie kontrolować dostęp do komunikatów i chronić komunikację pomiędzy komponentami systemu. Usługa wspiera zarówno nowoczesne uwierzytelnianie oparte o <strong>Azure Active Directory</strong>, jak i tradycyjne mechanizmy kluczy dostępowych.</p>



<p>RBAC (Role-Based Access Control) umożliwia zarządzanie uprawnieniami przy użyciu ról przypisanych do użytkowników, aplikacji i tożsamości zarządzanych. Pozwala to na centralne i spójne zarządzanie dostępem do kolejek, tematów i subskrypcji, bez konieczności przechowywania wrażliwych danych, takich jak hasła czy klucze dostępu, w kodzie aplikacji. W kontekście Azure Service Bus można stosować predefiniowane role – między innymi Data Owner, Data Sender i Data Receiver – które pozwalają na granularne zarządzanie dostępem do wysyłania, odbioru lub pełnego zarządzania zasobami komunikacyjnymi.</p>



<p>Alternatywą lub uzupełnieniem RBAC są <strong>SAS (Shared Access Signatures)</strong>, czyli tokeny dostępu z określonym zakresem uprawnień i czasem ważności. SAS sprawdzają się w scenariuszach integracyjnych, gdzie wymagany jest ograniczony i kontrolowany dostęp do zasobów Service Bus.</p>



<p>Komunikacja z Azure Service Bus odbywa się z wykorzystaniem protokołu <strong>AMQP 1.0</strong>, który zapewnia wysoką wydajność, niezawodność oraz wsparcie dla scenariuszy enterprise. AMQP umożliwia stabilne połączenia, efektywne przesyłanie komunikatów i pełne wykorzystanie zaawansowanych funkcji usługi. Azure Service Bus obsługuje również protokół HTTP jako alternatywę dla AMQP w przypadku aplikacji, które nie wspierają AMQP. Zaleca się jednak korzystanie z AMQP w przypadku systemów wymagających niskiej latencji i trwałych połączeń.</p>



<p>Połączenie RBAC, SAS i AMQP pozwala budować bezpieczne, skalowalne i zgodne z najlepszymi praktykami rozwiązania komunikacyjne w chmurze Azure.</p>



<h2 class="wp-block-heading" id="podsumowanie-co-warto-zapamiętać">Podsumowanie – co warto zapamiętać?</h2>



<p>Azure Service Bus to kluczowe narzędzie komunikacyjne w chmurze Microsoft Azure, pozwalające na tworzenie nowoczesnych aplikacji opartych na architekturze asynchronicznej. Dzięki bogatemu zestawowi funkcji – takich jak kolejki, tematy i subskrypcje, sesje, oraz wsparcie dla wzorców projektowych (Request-Response,<br>Outbox, Inbox) – usługa umożliwia skalowalność, niezawodność i elastyczność systemów.</p>



<p>Zintegrowane mechanizmy bezpieczeństwa (RBAC, SAS, AMQP) oraz zaawansowane monitorowanie (Application Insights, Azure Monitor) gwarantują pełną kontrolę i stabilność rozwiązania, czyniąc je niezbędnym elementem w ekosystemie<br>nowoczesnych aplikacji chmurowych.</p>



<p>Jeżeli temat cię zaciekawił i chcesz korzystać z usługi w swoim projekcie, zajrzyj do <a href="https://learn.microsoft.com/en-us/azure/service-bus-messaging/" target="_blank" rel="noopener">Microsoft Learn</a> na Azure Portal, by uzyskać więcej informacji.</p>



<h2 class="wp-block-heading" id="czesto-zadawane-pytania">Często zadawane pytania:</h2>


<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1769434111748" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Co to jest Azure Service Bus i kiedy warto go używać?</strong></h3>
<div class="rank-math-answer ">

<p>Azure Service Bus to zarządzany broker komunikatów klasy enterprise w Microsoft Azure, który umożliwia asynchroniczną komunikację między komponentami systemu, takimi jak mikroserwisy, aplikacje czy zewnętrzne systemy. Warto go używać, gdy:<br />&#8211; Chcesz zwiększyć odporność systemu na przeciążenia i chwilowe awarie.<br />&#8211; Potrzebujesz niezawodnej komunikacji w systemach event-driven lub przy integracji między usługami.<br />&#8211; Tworzysz aplikacje wymagające kolejki, publish-subscribe, transakcyjnego przetwarzania lub obsługi sesji.</p>

</div>
</div>
<div id="faq-question-1769434170038" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Jakie są różnice pomiędzy kolejkami (Queue) a tematami (Topics) w Azure Service Bus?</strong> </h3>
<div class="rank-math-answer ">

<p>&#8211; Queue (kolejka): Każdy komunikat trafia do jednego odbiorcy (model point-to-point). Idealne dla zadań w tle, równoważenia obciążenia i ochrony systemu przed przeciążeniem.<br />&#8211; Topics (tematy): Komunikaty mogą być dostarczone do wielu odbiorców dzięki subskrypcjom (wzorzec publish-subscribe). Doskonałe dla architektury event-driven i integracji wielu systemów.</p>

</div>
</div>
<div id="faq-question-1769434197385" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Jak działają sesje w Azure Service Bus?</strong></h3>
<div class="rank-math-answer ">

<p>Sesje umożliwiają grupowanie komunikatów na podstawie SessionID i przetwarzanie ich w określonej kolejności (sekwencyjnie) przez jednego konsumenta. Dzięki blokowaniu sesji podczas obsługi wiadomości, Azure Service Bus gwarantuje, że komunikaty w ramach jednej sesji nie będą przetwarzane równolegle. Sesje są szczególnie przydatne tam, gdzie spójność i kolejność są kluczowe, np. w procesach workflow.</p>

</div>
</div>
<div id="faq-question-1769434224557" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Co to jest Dead-Letter Queue i kiedy jest używana?</strong> </h3>
<div class="rank-math-answer ">

<p>Dead-Letter Queue to specjalna kolejka w Azure Service Bus, w której umieszczane są komunikaty, które:<br />&#8211; Nie zostały poprawnie przetworzone po określonej liczbie prób.<br />&#8211; Zawierają błędy lub nie spełniają wymagań konsumenta. Dead-Letter Queue pomaga w diagnostyce problemów i zapewnia ich późniejsze rozwiązywanie.</p>

</div>
</div>
<div id="faq-question-1769434249989" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Jakie mechanizmy bezpieczeństwa oferuje Azure Service Bus?</strong> </h3>
<div class="rank-math-answer ">

<p>Azure Service Bus oferuje:<br />&#8211; RBAC (Role-Based Access Control): Zarządzanie uprawnieniami za pomocą ról przypisanych do użytkowników, aplikacji lub zarządzanych tożsamości, bez konieczności przechowywania sekretów.<br />&#8211; SAS (Shared Access Signature): Tokeny dostępu o ograniczonym czasie ważności i zakresie uprawnień, wygodne w scenariuszach integracyjnych.<br />&#8211; AMQP 1.0: Bezpieczny i niezawodny protokół komunikacyjny o wysokiej wydajności.</p>

</div>
</div>
<div id="faq-question-1769434273643" class="rank-math-list-item">
<h3 class="rank-math-question ">Jakie wzorce projektowe wspiera Azure Service Bus?</h3>
<div class="rank-math-answer ">

<p>Azure Service Bus wspiera kilka kluczowych wzorców projektowych:<br />&#8211; Request-Response Pattern: Asynchroniczna komunikacja dwukierunkowa, oparta na kolejce żądań i odpowiedzi.<br />&#8211; Outbox Pattern: Mechanizm zapewniający spójność między zapisami w bazie danych a publikacją komunikatów. Chroni przed utratą komunikatów w przypadku awarii.<br />&#8211; Inbox Pattern: Obsługa ponownych dostarczeń komunikatów poprzez rejestrowanie MessageID w celu zapewnienia idempotentności.</p>

</div>
</div>
<div id="faq-question-1769434308990" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Jak monitorować i diagnozować Azure Service Bus w środowisku produkcyjnym?</strong> </h3>
<div class="rank-math-answer ">

<p>Do monitorowania i diagnostyki możesz użyć: <br />&#8211; Azure Monitor: Śledzenie metryk takich jak liczba aktywnych komunikatów, czas przetwarzania, długość Dead-Letter Queue i częstotliwość błędów. <br />&#8211; Application Insights: Pozwala na korelację wiadomości w kontekście całego systemu, analizę opóźnień i lokalizację problemów. <br />&#8211; Alerts i reguły powiadomień w Azure Monitor umożliwiają proaktywne wykrywanie problemów i szybkie reagowanie. </p>

</div>
</div>
<div id="faq-question-1769434337858" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Czy mogę korzystać z protokołu HTTP z Azure Service Bus?</strong></h3>
<div class="rank-math-answer ">

<p>Tak, oprócz protokołu AMQP 1.0, Azure Service Bus pozwala na korzystanie z protokołu HTTP jako alternatywy. HTTP może być stosowane w prostszych scenariuszach, gdy AMQP nie jest dostępny lub wymagany. </p>

</div>
</div>
<div id="faq-question-1769434352885" class="rank-math-list-item">
<h3 class="rank-math-question ">Jakie praktyki pomagają poprawić skalowalność systemu przy użyciu Azure Service Bus?</h3>
<div class="rank-math-answer ">

<p>Aby zwiększyć skalowalność systemu:<br />&#8211; Korzystaj z mechanizmu retry i dead-letter queue.<br />&#8211; Wykorzystuj filtry w subskrypcjach Topics dla precyzyjnego routowania zdarzeń.<br />&#8211; Używaj kolejek dla zadań w tle oraz tematów dla propagacji zdarzeń domenowych w architekturze event-driven.<br />&#8211; Grupuj komunikaty za pomocą sesji, aby kontrolować ich kolejność.</p>

</div>
</div>
<div id="faq-question-1769434379306" class="rank-math-list-item">
<h3 class="rank-math-question "><strong>Jak zoptymalizować bezpieczeństwo w Azure Service Bus?</strong></h3>
<div class="rank-math-answer ">

<p>Aby poprawić bezpieczeństwo: <br />&#8211; Używaj RBAC do zarządzania dostępem, unikając przechowywania kluczy w aplikacjach. <br />&#8211; Generuj tokeny SAS o ograniczonych uprawnieniach i krótszym czasie ważności. <br />&#8211; Chroń strumienie komunikacji za pomocą protokołu AMQP, który wspiera szyfrowanie i autoryzację. </p>

</div>
</div>
</div>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/azure-service-bus/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Jak wygląda proces dostarczania oprogramowania oparty na CI/CD?</title>
		<link>https://nearshore-it.eu/pl/artykuly/proces-dostarczania-oprogramowania-ci-cd/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/proces-dostarczania-oprogramowania-ci-cd/#respond</comments>
		
		<dc:creator><![CDATA[Mateusz Mirecki]]></dc:creator>
		<pubDate>Wed, 28 Aug 2024 08:39:59 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=28712</guid>

					<description><![CDATA[Główna korzyść z CI to wczesne wykrywanie błędów, co prowadzi do szybszego wdrażania nowych funkcji, większej stabilności oprogramowania i lepszej współpracy między programistami.]]></description>
										<content:encoded><![CDATA[
<p>Aby zobrazować, jak CI działa w praktyce, można posłużyć się przykładem: kod źródłowy aplikacji został zmieniony, ponieważ powstała nowa funkcjonalność. Praca rozpoczyna się od utworzenia kopii głównego repozytorium kodu. System kontroli wersji przechowuje kod źródłowy w repozytorium. Aktualny stan aplikacji jest zwykle przechowywany w głównej gałęzi repozytorium (zwanej także jako „master&#8221;). Programista, zaczynając pracę nad nową funkcjonalnością, tworzy lokalnie kopię głównego repozytorium, która staje się bazą do stworzenia nowej funkcjonalności (a więc dokonania zmian w kodzie źródłowym).&nbsp;&nbsp;&nbsp;</p>



<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Automatyzacja-i-testowanie">1.  Automatyzacja i testowanie</a></li>
                    <li><a href="#Integracja-i-aktualizacja-">2.  Integracja i aktualizacja </a></li>
                    <li><a href="#Zarządzanie-błędami-i-powiadomienia-">3.  Zarządzanie błędami i powiadomienia </a></li>
                    <li><a href="#Praktyka-DevOps-">4.  Praktyka DevOps </a></li>
                    <li><a href="#Zalety-podejścia-DevOps">5.  Zalety podejścia DevOps</a></li>
                    <li><a href="#Automatyzacja-i-shift-left-testing-">6.  Automatyzacja i shift-left testing </a></li>
                    <li><a href="#Projektowanie-małych-komponentów-i-usług-">7.  Projektowanie małych komponentów i usług </a></li>
                    <li><a href="#Projektowanie-danych-testowych-wykorzystywanych-w-ciągłym-testowaniu-">8.  Projektowanie danych testowych wykorzystywanych w ciągłym testowaniu </a></li>
                    <li><a href="#Rola-testów-jednostkowych-w-ciągłym-testowaniu-">9.  Rola testów jednostkowych w ciągłym testowaniu </a></li>
                    <li><a href="#Jakie-narzędzia-wykorzystywane-są-w-procesie-dostarczania-oprogramowania-z-CI/CD?-">10.  Jakie narzędzia wykorzystywane są w procesie dostarczania oprogramowania z CI/CD? </a></li>
                    <li><a href="#Podsumowanie-">11.  Podsumowanie </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Automatyzacja-i-testowanie">Automatyzacja i testowanie</h2>



<p>Zmiany nie będą dotyczyły tylko kodu samej aplikacji, ale też testów (tworzenie testów jednostkowych nowej funkcjonalności). Jednym z kluczowych atrybutów ciągłej integracji jest wysoki stopień wykorzystania zautomatyzowanych testów. Po zakończeniu wprowadzania zmian na lokalnym komputerze wykonywany jest zautomatyzowany proces kompilacji (build). W procesie tym pobierany jest kod źródłowy z lokalnego repozytorium, który jest następnie kompilowany, łączony z plikiem wykonywalnym, a na końcu przeprowadzane są testy automatyczne. Build uznaje się za prawidłowy, gdy kompilacja oraz testy zakończą się poprawnie, bez błędów.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Integracja-i-aktualizacja">Integracja i<strong> </strong>aktualizacja</h2>



<p>Następnym krokiem jest zatwierdzenie zmian w repozytorium. Na tym etapie należy uwzględnić zmiany wprowadzone przez innych członków w zespole, ponieważ w międzyczasie zmiany innego programisty mogły zostać już zintegrowane z głównym repozytorium tworzonego oprogramowania. Należy więc najpierw zaktualizować lokalną gałąź z kodem z głównej gałęzi <strong>(master)</strong> i ponownie uruchomić zautomatyzowaną kompilację <strong>(build).</strong> Jeżeli w trakcie tego procesu pojawią się konflikty (zmiany w kodzie kolidujące ze zmianami wprowadzonymi przez innych programistów), należy je rozwiązać i ponownie uruchomić kompilację. Gdy zakończy się ona powodzeniem, zmiany można zatwierdzić i zintegrować z głównym repozytorium.&nbsp;</p>



<p>W tym momencie wykonywana jest ponowna kompilacja, lecz tym razem jest ona przeprowadzana na serwerze integracyjnym. Zdarza się, że podczas kompilacji na lokalnej stacji roboczej coś może zostać przeoczone, przez co główne repozytorium zostanie zaktualizowane w nieodpowiedni sposób. Dopiero gdy zmiany w głównym repozytorium zbudują się poprawnie na serwerze CI, można je będzie uznać za zakończone sukcesem.&nbsp;</p>



<p>Jeśli dojdzie do konfliktów w plikach zmienionych przez innych programistów, zwykle będą one wychwycone, gdy programista zatwierdzający zmiany utworzy zaktualizowaną kopię roboczą, a sama kompilacja zakończy się niepowodzeniem. Błąd jest szybko wyłapany, a zadaniem programistów jest zlokalizowanie źródła błędów i naprawienie ich. W środowisku CI należy unikać sytuacji, w których przez dłuższy czas kompilacje integracyjne kończą się błędem – trzeba je naprawić najszybciej, jak to możliwe.&nbsp;</p>



<p>Po pomyślnej kompilacji na serwerze ciągłej integracji nowe zmiany można wprowadzić na przykład na środowiska testowe, gdzie testerzy będą mogli przeprowadzać testy na aktualnej wersji oprogramowania zawierającej najnowsze zmiany.&nbsp;</p>



<h2 class="wp-block-heading" id="Zarządzanie-błędami-i-powiadomienia">Zarządzanie błędami i powiadomienia</h2>



<p>Na każdym etapie procesu ciągłej integracji po stronie serwera, w razie niepowodzenia w budowaniu projektu, można zaimplementować narzędzia raportujące błędy. W ten sposób, w przypadku wystąpienia błędu w którymś kroku kompilacji – odpowiedni użytkownicy mogą zostać powiadomieni, na przykład za pomocą wiadomości e-mail lub powiadomienia na firmowym czacie.&nbsp;</p>



<p>Przykładowy ogólny schemat procesu ciągłej integracji:&nbsp;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="762" height="426" src="https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_2.png" alt="chemat procesu ciągłej integracji CI" class="wp-image-28713" title="Jak wygląda proces dostarczania oprogramowania oparty na CI/CD? 7" srcset="https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_2.png 762w, https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_2-300x168.png 300w, https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_2-495x277.png 495w" sizes="auto, (max-width: 762px) 100vw, 762px" /></figure></div>


<h2 class="wp-block-heading" id="Praktyka-DevOps">Praktyka DevOps</h2>



<p>Termin DevOps pochodzi z połączenia dwóch słów: development i operations (programowanie i operacje). Służy do określenia podejścia do rozwoju oprogramowania zakładającego zmniejszanie barier pomiędzy zespołami deweloperskimi i operacyjnymi firmy. Celem DevOps jest skrócenie czasu wprowadzenia produktu na rynek. Oznacza to przyjęcie i wdrożenie pewnych praktyk w celu skrócenia czasu od identyfikacji nowego wymagania do momentu jego wdrożenia dla klientów. W podejściu tym wykorzystywana jest omawiana ciągła integracja i ciągłe dostarczanie, które pomagają skrócić czas wprowadzenia produktu na rynek i stworzyć oprogramowanie lepszej jakości.&nbsp;</p>



<h3 class="wp-block-heading" id="Historia-i-rozwój">Historia i rozwój</h3>



<p>Celem DevOps jest skrócenie czasu wprowadzenia produktu na rynek. Filozofia DevOps narodziła się w 2008 roku podczas konferencji Agile w Toronto, kiedy&nbsp; Patrick Debois wygłosił wykład pod tytułem „Infrastructure and Operations“. Wyjaśnił w nim zastosowanie podejścia Agile do budowy infrastruktury, a na koniec zaproponował lepszą metodę komunikacji oraz pomysły, dzięki którym programiści mogliby „ poszerzać swoje horyzonty”, w sensie pogłębiania wiedzy systemowej niezbędnej do zapewnienia płynniejszego procesu wydawania oprogramowania. Mijały lata, a podejście DevOps stawało się coraz bardziej popularne, a w ślad za nim pojawiła się nowa rola w świecie IT – inżynier DevOps.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading" id="Rola-inżyniera-DevOps">Rola inżyniera DevOps</h3>



<p>Inżynier DevOps stanowi swego rodzaju pomost pomiędzy programistami a działem operacyjnym. W większości przypadków rola, jaką przyjmuje, jest ich mieszanką (inżynierowie ci muszą posiadać wiedzę niezbędną do doradzania i zarządzania problemem z obu dyscyplin). W niektórych przypadkach odpowiedzialność inżyniera DevOps związana jest z ciągłą integracją i dostarczaniem. Inne obowiązki obejmują zarządzanie infrastrukturą, zazwyczaj w postaci kodu (IaC) oraz pomoc we wdrażaniu optymalnych praktyk DevOps w całej firmie. Czasem inżyniera DevOps postrzega się go także jako osobę odpowiedzialną głównie za utrzymanie oprogramowania w środowisku produkcyjnym i automatyzację procesów, rozwiązywanie problemów, administrowanie systemem.&nbsp; Rola inżyniera DevOps jest zróżnicowana i może zmieniać się w zależności od firmy.&nbsp;</p>



<h2 class="wp-block-heading">Zalety podejścia DevOps</h2>



<h3 class="wp-block-heading">Efektywność i współpraca&nbsp;</h3>



<p>Zespoły, które wdrażają podejście DevOps, stają się bardziej wydajne, dzięki czemu tworzone oprogramowanie wydawane jest nie tylko szybciej, ale też jest bardziej stabilne. Lepsza współpraca i zwiększona produktywność pozwalają też osiągać cele biznesowe, takie jak szybsze wprowadzenie produktu na rynek czy utrzymanie jego niezawodności i stabilności w każdych warunkach. Zastosowanie metodyki DevOps nie tylko pozwala zautomatyzować i optymalizować procesy za pomocą technologii. Jest to przede wszystkim zmiana kultury wewnątrz organizacji i ludzi zaangażowanych w ten proces.&nbsp;&nbsp;</p>



<p>Wdrożenie kultury DevOps wymaga głębokich zmian w dotychczasowym sposobie pracy zespołów i przestrzegania określonych zasad, jednak te zmiany pozwalają stworzyć środowisko pracy o wysokiej wydajności.&nbsp;&nbsp; Cechą charakterystyczną DevOps jest ścisła współpraca między zespołami. Różne zespoły, na przykład zespoły deweloperów i odpowiedzialne za operacje, muszą dzielić się swoimi procesami, priorytetami i problemami. Muszą także wspólnie planować pracę oraz cele i środki związane z ich osiągnięciem. W miarę jak zespoły dostosowują się do nowej rzeczywistości, obowiązki w poszczególnych rolach również zaczynają się poszerzać. Na przykład deweloperzy stają się odpowiedzialni nie tylko za tworzenie aplikacji w fazie programowania, ale też za wydajność i stabilność w fazie działania. Jednocześnie zespół operacji uwzględnia nadzór, zabezpieczenia i zgodność w fazach planowania i programowania.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Elastyczność i reaktywność&nbsp;</h3>



<p>Elastyczność zespołów pozwala na wydawanie oprogramowania w krótszych cyklach. Łatwiej jest planować wdrażanie zmian i zarządzać ryzykiem – to droga do stworzenia stabilnego produktu. Krótsze cykle wydawania nowych wersji pozwalają także sprawniej reagować na zmiany zachodzące na rynku, dzięki czemu można szybciej dostosować się do zmian potrzeb klientów i nie odstawać od konkurencji. Podejście DevOps stanowi state-of-the-art nowoczesnego tworzenia oprogramowania i jest dziś pierwszym wyborem wielu firm z tego powodu, że promuje najlepsze praktyki niezbędne do poprawy jakości oprogramowania. DevOps wymaga zmiany nie tylko w sposobie myślenia o infrastrukturze, ale także w&nbsp; zakresie dobrego projektowania i organizowania wewnętrznej infrastruktury firmy.&nbsp;&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Ciągłe testowanie&nbsp;</h3>



<p>Ciągłe testowanie (Continuous Testing, CT) to umiejętne wykorzystanie pewnych narzędzi i technik. Cytując <a href="https://sjsi.org/ist-qb/do-pobrania/" target="_blank" rel="noreferrer noopener">sylabus ISTQB</a>, ciągłe testowanie to:&nbsp;&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>„Podejście obejmujące proces wczesnego, częstego, szerokiego, automatycznego testowania w celu otrzymania możliwie szybko informacji zwrotnej o poziomie ryzyka biznesowego związanego z aplikacją przed jej wydaniem”.&nbsp;&nbsp;</p>
</blockquote>



<p></p>



<p>Podejście to znacznie skraca czas potrzebny do wykonania testów manualnych.&nbsp;</p>



<p>Głównym celem wprowadzenia podejścia CI/CD jest poprawa jakości wydawanego oprogramowania, a ciągłe testowanie i kontrola powinny być częścią tego procesu.&nbsp; Celem ciągłego testowania jest zapewnienie, że wydawane oprogramowanie będzie niezawodne.&nbsp; W tym celu tworzy się różnego rodzaju testy, które mogą być wykonywane automatycznie za każdym razem, gdy oprogramowanie jest budowane.&nbsp;</p>



<h3 class="wp-block-heading">Poziomy testów w ciągłym testowaniu&nbsp;</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="762" height="320" src="https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_3.png" alt="Poziomy testów w ciągłym testowaniu " class="wp-image-28716" style="width:1160px;height:auto" title="Jak wygląda proces dostarczania oprogramowania oparty na CI/CD? 8" srcset="https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_3.png 762w, https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_3-300x126.png 300w, https://nearshore-it.eu/wp-content/uploads/2024/08/blog_2024.05.16_graphic_3-495x208.png 495w" sizes="auto, (max-width: 762px) 100vw, 762px" /></figure></div>


<ol start="1" class="wp-block-list">
<li><strong>Testy jednostkowe</strong> – bazę testów automatycznych stanowią testy jednostkowe. Są one wykonywane za każdym razem, gdy oprogramowanie jest kompilowane i budowane.&nbsp;&nbsp;</li>
</ol>



<ol start="2" class="wp-block-list">
<li><strong>Testy integracyjne</strong> – kolejnym poziomem testów, który należy włączyć, są testy integracyjne. Są one przeprowadzane po testach jednostkowych i wykorzystują rzeczywiste dane. Testy integracyjne są ważną fazą w ciągłym testowaniu, ponieważ odpowiadają za testowanie całego systemu, a nie tylko tworzonego kodu.&nbsp;&nbsp;</li>
</ol>



<ol start="3" class="wp-block-list">
<li><strong>Testy akceptacyjne (E2E)</strong> – ostatnią fazą są testy akceptacyjne. W tej fazie wykonywane są testy przygotowane przez zespół QA w celu przetestowania systemu z punktu widzenia użytkownika. Celem tej fazy jest weryfikacja wymagań użytkownika i ich walidacja.&nbsp;</li>
</ol>



<h3 class="wp-block-heading">Kontrola kodu&nbsp;</h3>



<p>Oprócz różnych faz testowania, istnieje także faza kontroli kodu. Polega ona na sprawdzeniu kodu przy wykorzystaniu zestawu reguł wykorzystywanych do sporządzenia raportu na temat samego oprogramowania. Można ją podzielić na dwie fazy:&nbsp;&nbsp;</p>



<ol start="1" class="wp-block-list">
<li><strong>Przegląd kodu&nbsp;</strong>wykonywany przez programistę, który nie jest&nbsp; jego autorem. Przed integracją z główną gałęzią (master) kod musi zostać zatwierdzony. Członkowie zespołu sprawdzają kod i dodają komentarze, jeśli jakieś fragmenty wymagają zmian. W tym przypadku autor kodu dokonuje zmian na ich podstawie, a po skończonej pracy kod ponownie trafia do przeglądu. Jeśli nikt nie będzie miał zastrzeżeń – kod zostanie zaakceptowany i scalony z główną gałęzią.&nbsp;</li>



<li><strong>Faza statycznej analizy</strong> jest wykonywana przez odpowiednie narzędzia. Kod może zostać wtedy zweryfikowany przez pewne reguły, na przykład sprawdzające złożoność metod.&nbsp;&nbsp;</li>
</ol>



<p></p>



<h2 class="wp-block-heading">Automatyzacja i shift-left testing&nbsp;</h2>



<p>Ciągłe testowanie wykorzystuje podejścia automatyzacji do przyspieszenia testowania poprzez przyjęcie podejścia shift-left testing, które łączy etapy wytwarzania oprogramowania i zapewniania jakości. Takie podejście może obejmować zestaw przepływów pracy testów automatycznych, które można łączyć z narzędziami raportującymi i metrykami w celu otrzymania jasnego obrazu jakości oprogramowania.&nbsp;</p>



<p>Zapewnia to zespołom projektowym otrzymanie szybkiej informacji zwrotnej na temat jakości oprogramowania. Pozwala również testować na wcześniejszych etapach wytwarzania oprogramowania oraz zwiększyć pokrycie testami, eliminując wąskie gardła testowe, takie jak: dostęp do współdzielonych środowisk testowych czy oczekiwanie na stabilny interfejs użytkownika.&nbsp;</p>



<p><strong>Ciągłe testowanie niesie ze sobą szereg korzyści, takich jak:</strong>&nbsp;</p>



<p></p>



<ul class="wp-block-list">
<li>Integrowanie zespołów testowych, deweloperskich i operacyjnych na każdym etapie cyklu życia oprogramowania.&nbsp;</li>



<li>Pozwala na wdrożenie testów automatycznych w takim zakresie, jak to tylko możliwe, aby stale testować kluczowe funkcje.&nbsp;</li>



<li>Szybkie i ciągłe informacje zwrotne, które są istotne również dla biznesu.&nbsp;</li>



<li>Usunięcie wąskich gardeł w kwestii dostępności środowisk testowych, które mogą być stale dostępne.&nbsp;</li>



<li>Pozwala na stałe i aktywne zarządzanie jakością w całym etapie dostarczania oprogramowania. &nbsp;</li>
</ul>



<h3 class="wp-block-heading">Fundamenty ciągłego testowania&nbsp;</h3>



<p>Ciągłe testowanie opiera się na kombinacji określonych narzędzi i technik. Odpowiednie ich wdrożenie tworzy system, dzięki któremu znacząco można ograniczyć liczbę błędów przedostających się na środowiska rozwojowe lub produkcyjne. Większość błędów ma bardzo krótką żywotność, ponieważ są one wyłapywane przez testy. Odpowiednie zaimplementowanie tego podejścia powinno rozpoczynać się na jak najwcześniejszym etapie cyklu życia oprogramowania, aby móc je odpowiednio budować, aktualizować i (w razie potrzeby) refaktoryzować. Sama budowa i działanie zależą w głównej mierze od potrzeb projektowych – inne testy i techniki będą wykorzystywane do testowania sklepu internetowego, inne do testowania systemów w branży automotive. Lecz niezależnie od przypadku, cel pozostanie ten sam – uzyskanie jak najszybciej informacji zwrotnej w przypadku wystąpienia błędu.&nbsp;</p>



<h2 class="wp-block-heading">Projektowanie małych komponentów i usług&nbsp;</h2>



<p>Idea ciągłego testowania polega na maksymalnym zautomatyzowaniu procesów testowania i wdrażania oraz zapewnieniu, że każdy komponent aplikacji może zostać poddany testom, gdy tylko zostanie opracowany. Przykłady, które mogą ułatwić implementację tego podejścia to: projektowanie małych komponentów i usług oraz projektowanie danych testowych wykorzystywanych w ciągłym testowaniu.&nbsp;</p>



<p>Projektowanie małych komponentów i usług – nowe komponenty powinny nie tylko spełniać określone funkcje w trakcie działania programu, ale również być w pełni testowalne niezależnie od innych komponentów. Celem jest zapewnienie, że każda w pełni przetestowana usługa będzie spełniała swoje zadania zgodnie z założeniami, aby w trakcie ich łączenia i przejścia do etapu testów integracyjnych komponenty bezproblemowo współpracowały ze sobą.. Należy więc już na etapie projektowania odpowiednio przygotować architekturę i ograniczyć sprzężenie komponentów tak bardzo, jak to możliwe. W efekcie zyskamy komponenty bardziej stabilne, które zmniejsza ryzyko, że jakakolwiek zmiana dokonana w komponencie „A&#8221; spowoduje nieoczekiwaną zmianę zachowania w innych komponentach. Ograniczenie połączeń między nimi upraszcza proces testowania, rozwiązywania problemów oraz konserwacji. Dodatkowo w łatwiejszy sposób można izolować ewentualne problemy – analizie zostanie poddany konkretny komponent, bez potrzeby przeszukiwania ich grup i zależności między nimi.&nbsp;</p>



<h2 class="wp-block-heading">Projektowanie danych testowych wykorzystywanych w ciągłym testowaniu&nbsp;</h2>



<p>Posiadanie w pełni zautomatyzowanego rozwiązania do zarządzania danymi testowymi jest niezbędne do solidnego wdrożenia ciągłego testowania. Złym podejściem byłoby na przykład kopiowanie produkcyjnej bazy danych w celu utworzenia danych testowych, nie anonimizując uprzednio wrażliwych danych. Tworzenie nowych zestawów danych testowych od zera dla każdej serii testów również nie jest dobrym pomysłem ze względu na bardzo słabą efektywność, zwłaszcza gdy nie są generowane automatycznie.&nbsp;</p>



<p>Jak zatem stworzyć skuteczne rozwiązania do generowania i zarządzania danymi testowymi? Z pomocą przychodzą pewne charakterystyki, do których można zaliczyć na przykład:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Tworzenie i generowanie danych testowych&nbsp;</strong><br>Daje możliwość tworzenia nowych, zbiorczych zestawów danych uwzględniających zależności, tak jakby pochodziły ze środowiska produkcyjnego.&nbsp;</li>



<li><strong>Możliwość pobrania pewnego podzbioru danych produkcyjnych&nbsp;</strong><br>Na podstawie określonych kryteriów, maskowania wrażliwych pól i umieszczania ich w środowisku testowym, zachowując ich integralność referencyjną. Najtrudniejsza w realizacji jest ostatnia część: wrażliwe pola muszą być zamaskowane w taki sposób, aby zachować oryginalne powiązania między danymi. Przykładowo, jeśli wartość numeru PESEL musi zostać zamaskowana i zastąpiona niepowiązaną wartością, każde odwołanie do tego numeru PESEL w bazie danych musi zostać zamaskowane tą samą wartością.&nbsp;</li>



<li><strong>Możliwość maskowania i transformacji danych&nbsp;</strong><br>Rozwiązanie powinno też zapewnić możliwość automatycznego porównania danych wstępnie zamaskowanych, aby upewnić się, że nie doszło do ich utraty i że proces maskowania nie spowodował błędów w ich integralności.&nbsp;</li>



<li><strong>Możliwość przesyłania danych&nbsp;</strong><br>Proces polegający na przesyłaniu wyodrębnionych, zamaskowanych danych na środowiska testowe, z zachowaniem integralności. Proces ten powinien obejmować funkcje dodawania, edytowania, aktualizacji i usuwania.&nbsp;</li>



<li><strong>Możliwość odświeżania danych&nbsp;</strong><br>Polega na okresowym przeglądzie i usuwaniu starych pakietów danych testowych oraz zamienianiu ich na nowy zestaw.&nbsp;</li>



<li><strong>Ekstrakcja danych i tworzenie ich podzbiorów&nbsp;</strong><br>Pozwala na tworzenie mniejszych kopii danych produkcyjnych zdefiniowanych za pomocą określonych kryteriów.&nbsp;</li>



<li><strong>„Postarzanie&#8221; danych&nbsp;</strong><br>Technika, w której dane są zmieniane w celu dopasowania ich do określonych, specyficznych warunków i wykorzystania ich w pewnych procesach (na przykład symulacji określonej godziny lub daty).&nbsp;</li>



<li><strong>Możliwość tworzenia i wyodrębniania danych testowych&nbsp;</strong></li>



<li><strong>Zarządzanie zbiorami danych&nbsp;</strong></li>



<li>Wykorzystanie narzędzi, które umożliwiają nie tylko zarządzanie wieloma zbiorami danych, ale także ich archiwizację i wersjonowanie. &nbsp;</li>
</ul>



<h2 class="wp-block-heading">Rola testów jednostkowych w ciągłym testowaniu&nbsp;</h2>



<p>Podstawę testów w podejściu ciągłego testowania, zgodnie z piramidą testów, stanowią testy jednostkowe. Są one najszybsze w wykonaniu i sprawdzają działanie oprogramowania we wczesnej fazie jego wytwarzania. Powinno ich więc być jak najwięcej (przy zachowaniu odpowiedniego stosunku liczby do jakości – nie jest prawdą, że większa liczba testów stanowi o jakości).&nbsp;&nbsp;</p>



<h3 class="wp-block-heading">Projektowanie testów jednostkowych&nbsp;</h3>



<p>Zdarza się, że testy jednostkowe są źle zaprojektowane i zamiast jednostek testują kompletne przypadki użycia (wywołanie metod, asercje, wywołanie większej liczby metod i tworzenie większej liczby asercji). Takie testy są zwykle niestabilne, a błędy wykryte w jednej części kodu mogą maskować inne błędy i utrudniać ich wykrycie. Aby temu zapobiec, należy przeanalizować takie testy, wyodrębnić z nich poszczególne, testowane funkcjonalności i asercje i rozbić je na mniejsze testy sprawdzające każdą funkcjonalność z osobna.&nbsp;</p>



<h3 class="wp-block-heading">Implementacja testów na różnych poziomach&nbsp;</h3>



<p>Testowanie bardziej złożonych ścieżek, dajmy na to przypadków użycia, powinno zostać zaimplementowane na przykład w testach akceptacyjnych. W ciągłym testowaniu można wykonywać wszystkie rodzaje testów, lecz im wyższy poziom testów, tym liczba przypadków testowych powinna być mniejsza (są one mniej stabilne, czas ich wykonywania jest dłuższy, wykrywają błędy w późniejszych etapach, przez co wydłuża się czas naprawy, a koszt rośnie).&nbsp;</p>



<p>Dotyczy to zwłaszcza testów UI (User Interface), gdy testowana jest logika biznesowa i zachowanie interfejsu użytkownika. Może tu dojść do wielu współzależnych awarii. Oddzielenie warstwy interfejsu od systemu bazowego, aby logika biznesowa mogła zostać opatrzona zaślepkami (mock) jest istotną zmianą zbliżającą nas do większej stabilności testów.&nbsp;</p>



<p>Jednym z podejść jest uruchamianie testów jednostkowych w sposób ciągły, a testów wyższych poziomów – na żądanie (nie muszą one być uruchamiane automatycznie w trakcie budowy projektu w narzędziu ciągłej integracji – zamiast tego, istnieje możliwość uruchomienia ich w sposób manualny, gdy potrzeba).&nbsp;</p>



<h3 class="wp-block-heading">Rola podejścia TDD&nbsp;</h3>



<p>Praktykowanie podejścia TDD (Test-Driven Development) w wytwarzaniu oprogramowania ułatwia zrozumienie i wdrożenie ciągłego testowania. W TDD testy tworzone są przed implementacją funkcjonalności. Najpierw tworzony jest mały test, po którym następuje implementowanie powiązanego fragmentu całej funkcjonalności. Następnie dokonuje się refaktoryzacji w celu ulepszenia kodu i wyeliminowania ewentualnych powieleń. Dzięki ciągłemu testowaniu otrzymujemy natychmiastową informację zwrotną na każdym z tych kroków. Nie tylko z tego jednego testu, który jest w danym momencie pisany, lecz ze wszystkich powiązanych testów, bez dodatkowego wysiłku i zaangażowania ze strony programisty. Dzięki temu może on skupić się w pełni na projektowaniu i pisaniu kodu, zamiast rozpraszać się koniecznością uruchamiania testów.&nbsp;</p>



<h3 class="wp-block-heading">Cel ciągłego testowania&nbsp;</h3>



<p>Zarówno w podejściu TDD, jak i w ciągłym testowaniu, celem jest jak najszybsze uzyskanie informacji zwrotnej. Pod wieloma względami naturalnym rezultatem skutecznego stosowania TDD jest dobrej jakości zestaw testów. Różnica polega na tym, że stosując ciągłe testowanie, zyskuje się dodatkowe źródła informacji zwrotnych. Stary aksjomat podejścia TDD mówi, że testy sprawdzają poprawność kodu, z kolei kod weryfikuje poprawność testów. Testy sprawdzają również projekt kodu – źle zaprojektowany kod jest trudny do przetestowania. &nbsp;</p>



<h2 class="wp-block-heading">Jakie narzędzia wykorzystywane są w procesie dostarczania oprogramowania z CI/CD?&nbsp;</h2>



<h3 class="wp-block-heading">Jenkins&nbsp;</h3>



<p>Jenkins to serwer ciągłej integracji (CI) typu open source.&nbsp; Kontroluje kilka etapów procesu dostarczania oprogramowania, takie jak testowanie, kompilacja i wdrażanie. Popularność tego narzędzia wynika między innymi z jego możliwości śledzenia i monitorowania powtarzalnych działań pojawiających się w trakcie prac nad projektem. Każda zmiana w aplikacji jest kompilowana i testowana, a w razie wykrycia błędu Jenkins ostrzeże zespół o problemach.&nbsp;</p>



<p><strong>Wdrożenie kodu na produkcję</strong>&nbsp;</p>



<p>Jednym z podstawowych zastosowań Jenkinsa jest możliwość wdrażania kodu na produkcję. Jeśli wszystkie testy opracowane dla danej funkcji lub releasu zakończą się powodzeniem, Jenkins może automatycznie opublikować kod na środowisku staging lub produkcyjnym (jest to właśnie przykład Continuous Deployment opisanego w poprzednim artykule).&nbsp;</p>



<p><strong>A</strong><strong>ut</strong><strong>o</strong><strong>matyzacja </strong><strong>w</strong><strong>orkflow</strong><strong> i różnych zadań</strong><strong></strong>&nbsp;</p>



<p>Innym przypadkiem, w którym można użyć Jenkinsa, jest m.in. automatyzacja workflow. Na przykład, gdy programista pracuje na kilku środowiskach, w pewnym momencie zajdzie konieczność instalacji lub aktualizacji pewnych komponentów na każdym z nich. Jeśli instalacja lub aktualizacja wymaga wykonania wielu kroków, przeprowadzenie jej ręcznie może skutkować pojawieniem się błędów, a dodatkowo będzie czasochłonne. Zamiast tego wszystkie kroki potrzebne do finalizacji można odpowiednio skonfigurować w Jenkinsie. Dzięki temu cały proces będzie stabilny i szybki, bo też zawsze będzie wykonywany identycznie.&nbsp;</p>



<p><strong>Konfiguracja zadań</strong>&nbsp;</p>



<p>Jenkins umożliwia tworzenie zadań (Jenkins Jobs) na różne sposoby. Konfigurację można stworzyć całkowicie przez UI, przeklikując odpowiednie opcje, lecz lepszym wyborem jest utworzenie pliku konfiguracyjnego i zdefiniowanie w nim wszystkich niezbędnych kroków. W Jenkinsie wykorzystuje się w tym celu skrypty pisane w języku Groovy. Zaletą w stosowaniu tej opcji jest dodatkowo to, że plik konfiguracyjny można przechowywać wraz z kodem dotyczącej go aplikacji. Dzięki temu mamy zapewnione wersjonowanie zmian i powstaje kopia zapasowa, przydatna w przypadku wystąpienia awarii.&nbsp;</p>



<p><strong>Rozszerzalność poprzez pluginy</strong>&nbsp;</p>



<p>Możliwości Jenkinsa można rozszerzać dzięki wielu pluginom dostępnym na stronie https://plugins.jenkins.io/. Ich liczba pozwala na dowolne skonfigurowanie serwera pod konkretne potrzeby, począwszy od zmiany wyglądu elementów interfejsu użytkownika po możliwość integracji z zewnętrznymi serwisami lub aplikacjami czy modyfikujące kroki w tworzonych jobach.<strong> </strong>&nbsp;</p>



<h3 class="wp-block-heading">GitLab&nbsp;</h3>



<p>Innym narzędziem, o którym warto wspomnieć, jest GitLab. Serwis ten nie tylko pozwala na tworzenie i przechowywanie repozytoriów kodu, ale także udostępnia narzędzia do wersjonowania oprogramowania, zarządzania zadaniami oraz procesami CI/CD. Pozwala on wszystkim członkom zespołu współpracować na wszystkich etapach projektu, upraszczając tworzenie oprogramowania.&nbsp;</p>



<p><strong>Funkcjonalności GitLaba</strong>&nbsp;</p>



<p>GitLab to internetowe repozytorium Git, które umożliwia zespołom programistów planowanie, kodowanie, testowanie, wdrażanie i monitorowanie zmian tworzonego oprogramowania w jednym miejscu. Natomiast Git to dobrze wszystkim znany system kontroli wersji.&nbsp;</p>



<p>Jedną z istotnych możliwości jest śledzenie błędów: GitLab posiada wbudowany system umożliwiający zespołom tworzenie, przypisywanie i śledzenie błędów. Zapewnia także tablicę zarządzania projektami z konfigurowalnymi przepływami pracy (workflow) w celu wizualizacji zadań i postępów.&nbsp;</p>



<p>Inną kluczową funkcjonalnością GitLaba są zintegrowane potoki CI/CD (pipelines). Dzięki temu można łatwo zautomatyzować procesy testowania, budowania i wdrażania, zapewniając dokładne testowanie zmian w kodzie przed połączeniem z główną bazą kodu i wdrożeniem w środowisku produkcyjnym.&nbsp;</p>



<p>GitLab posiada także wewnętrzny system wiki, umożliwiający zespołom tworzenie i utrzymywanie dokumentacji projektowej.&nbsp;</p>



<h2 class="wp-block-heading">Podsumowanie&nbsp;</h2>



<p>Podejście Continuous Integration wraz z Continuous Development i Continuous Testing stanowią komplementarne praktyki. Continuous Development umożliwia obserwowanie wdrażanych zmian w czasie rzeczywistym i jednocześnie eliminuje proces ręcznego śledzenia zmian. Błędy znalezione na jak najwcześniejszym etapie są najszybsze i najtańsze w naprawie.&nbsp;</p>



<p>Budowanie aplikacji wraz z przeprowadzeniem testów na lokalnym środowisku może zająć kilka minut, a ich przeprowadzenie daje pewność, że wprowadzone zmiany będą przygotowane do integracji z główną gałęzią repozytorium. Czasem zmiany mogą budzić szczególne wątpliwości –&nbsp;&nbsp; na przykład, gdy modyfikacji wymagają pliki konfiguracyjne. W takim przypadku można wykonać pełną kompilację i uruchomić wszystkie testy, aby mieć pewność, że zmiana nie spowodowała błędów w innych obszarach aplikacji, a kod jest bezpieczny i może zostać dodany do głównego repozytorium.&nbsp;</p>



<p>Ciągła integracja ma na celu identyfikowanie problemów, ale może również posłużyć jako narzędzie do zmniejszania kosztów uruchamiania testów wyższego poziomu – wykrycie błędów na etapie testów jednostkowych sprawi, że testy z pozostałych poziomów będą bardziej stabilne, co daje dodatkową pewność co do jakości.&nbsp;at the capabilities are within the connectivity management framework. At Inetum, we are a partner of Cumulocity IoT, which has a network of partners providing platform-compatible devices with substantial connectivity capabilities.</p>



<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/proces-dostarczania-oprogramowania-ci-cd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Usługa Azure Active Directory w aplikacjach multi-tenant</title>
		<link>https://nearshore-it.eu/pl/artykuly/usluga-azure-active-directory/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/usluga-azure-active-directory/#respond</comments>
		
		<dc:creator><![CDATA[Adam Sosinski]]></dc:creator>
		<pubDate>Thu, 22 Jun 2023 11:24:13 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/usluga-azure-active-directory/</guid>

					<description><![CDATA[Budowanie systemu do zarządzania poświadczeniami od podstaw jest bardzo trudnym zadaniem i wymaga ogromnej wiedzy z zakresu bezpieczeństwa. Na szczęście na rynku dostępne są gotowe rozwiązania, takie jak np. Azure Active Directory (AAD).]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">PRZEJDŹ DO:</p>
    <ol>
                    <li><a href="#Active-Directory?-">1.  Czym jest usługa Azure Active Directory? </a></li>
                    <li><a href="#-multi-tenant?-">2.  Czym jest aplikacja multi-tenant? </a></li>
                    <li><a href="#ługą-Azure-AD">3.  Rozpocznij pracę z usługą Azure AD </a></li>
                    <li><a href="#Rejestrowanie-aplikacji-multi-tenant-">4.  Rejestrowanie aplikacji multi-tenant </a></li>
                    <li><a href="#Logowanie-do-aplikacji-jako-użytkownik-zewnętrznyu002du002d">5.  Logowanie do aplikacji jako użytkownik zewnętrzny  </a></li>
                    <li><a href="#Aplikacja-multi-tenant-wywołująca-wewnętrzne-API-">6.  Aplikacja multi-tenant wywołująca wewnętrzne API </a></li>
                    <li><a href="#Zarządzanie-tożsamościami-–-ograniczanie-dostępu-do-aplikacji-">7.  Zarządzanie tożsamościami – ograniczanie dostępu do aplikacji </a></li>
                    <li><a href="#Usługa-Azure-AD-od-Microsoft-–-podsumowanie-">8.  Usługa Azure AD od Microsoft – podsumowanie </a></li>
            </ol>
</div>


<p>Zarządzanie dostępami do aplikacji jest zagadnieniem poruszanym w przypadku niemal każdego systemu. Dbając o odpowiednie uwierzytelnianie, nie tylko ograniczamy możliwości pozyskania czy modyfikowania wrażliwych danych, ale mamy również większą elastyczność w przypadku tzw. User Experience, poprzez definiowanie ról czy właściwości związanych z danym użytkownikiem.&nbsp;</p>



<h2 class="wp-block-heading" id="Active-Directory?-">Czym jest usługa Azure Active Directory?&nbsp;</h2>



<p><strong>Azure Active Directory (AAD)</strong> jest serwisem chmurowym firmy Microsoft pozwalającym na zarządzanie dostępami i tożsamościami. Korzystając z tego rozwiązania, możemy również rejestrować nasze aplikacje i określać zasady dostępności. Przy czym rozważamy tutaj zarówno dostępy użytkowników, jak i innych aplikacji. Do zarejestrowanego rozwiązania w danej dzierżawie (<strong>z ang. tenant</strong> ) dostęp mogą mieć wszystkie obiekty (użytkownicy, aplikacje) ją współdzielące. AAD pozwala również na „udostępnianie” aplikacji innym najemcom, dzięki czemu nie musimy martwić się o zarządzanie użytkownikami zewnętrznymi naszej aplikacji. Tak skonfigurowane rozwiązanie nazywamy <a href="https://nearshore-it.eu/pl/artykuly/multi-tenant-czy-single-tenant/" target="_blank" rel="noreferrer noopener">multi-tenantowym.</a>&nbsp;</p>



<h2 class="wp-block-heading" id="-multi-tenant?-">Czym jest aplikacja multi-tenant?&nbsp;</h2>



<p>Aplikacja typu multi-tenant<strong> pozwala obsługiwać wielu dzierżawców poprzez jedną instancję</strong>. Przy tego typu rozwiązaniach istotne jest, aby klient nie miał dostępu do danych należących do innych najemców. Jest to najczęściej rozwiązywane poprzez logikę biznesową lub rozdzielenie baz danych tak, aby każdy klient miał własną.&nbsp;</p>



<p>Aplikacja wielodostępowa zarejestrowana w Azure Active Directory pozwala przenieść zarządzanie użytkownikami i określanie poziomu dostępu do rozwiązania na barki administratora danego dzierżawcy. Zmniejsza to koszty związane z utrzymywaniem użytkowników po stronie dostawcy usługi.&nbsp;&nbsp;</p>



<p>Należy jednak pamiętać, że kwestia dostępu do poszczególnych elementów aplikacji jest dalej rozwiązywana przez programistów poprzez definiowanie odpowiednich polityk w kodzie.&nbsp;</p>



<h2 class="wp-block-heading" id="ługą-Azure-AD">Rozpocznij pracę z usługą Azure AD</h2>



<p>Firma Microsoft udostępnia administratorom materiały niezbędne do zarządzania usługami w Azure Portalu.&nbsp; Dokumentacja zawiera też odpowiedzi na często zadawane pytania. Wszelkie informacje są dostępne na stronie <a href="https://learn.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-whatis" target="_blank" rel="noreferrer noopener">Microsoft Azure Active Directory,</a>  gdzie można się dowiedzieć wszystkiego na temat zarządzania tożsamością i dostępami w chmurze. Jeżeli jeszcze nie korzystasz z usług Microsoft Azure, warto zacząć właśnie w tym miejscu.&nbsp;&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Rejestrowanie-aplikacji-multi-tenant-">Rejestrowanie aplikacji multi-tenant&nbsp;</h2>



<p>Podczas rejestracji nowej aplikacji jesteśmy zobligowani do wybrania, jakiego rodzaju konta chcemy wspierać. Wybierając opcję zaznaczoną poniżej, dajemy możliwość dostępu innym dzierżawcom. Jeżeli mamy wątpliwości, którą opcję wybrać, pod sekcją znajduje się link z krótkim opisem, na co zezwala każda z nich.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_1.png" alt="azure active directory " class="wp-image-8744" title="Usługa Azure Active Directory w aplikacjach multi-tenant 9"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Zarejestrowanie obiektu aplikacji powoduje utworzenie aplikacji biznesowej, a dokładniej jednostki usługi (z ang. Service Principal). To właśnie do jednostki usługi są podpinane dostępy użytkownika do aplikacji. Dokładnie ten sam mechanizm jest wykorzystywany w przypadku zewnętrznych klientów.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_2.png" alt="azure active directory " class="wp-image-8746" title="Usługa Azure Active Directory w aplikacjach multi-tenant 10"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Logowanie-do-aplikacji-jako-użytkownik-zewnętrzny--">Logowanie do aplikacji jako użytkownik zewnętrzny&nbsp;&nbsp;</h2>



<p>Przy pierwszej próbie logowania do aplikacji jesteśmy poproszeni o udzielenie zgody dla danej aplikacji. W zależności od ustawień dzierżawcy będziemy mogli sami jej udzielić lub będzie ona wymagała zatwierdzenia przez administratora.&nbsp;&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_3-1.png" alt="azure active directory" class="wp-image-8751" style="width:762px;height:573px" title="Usługa Azure Active Directory w aplikacjach multi-tenant 11"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Warto nadmienić, że administrator udziela zgody dla wszystkich użytkowników, przez co tylko pierwsze logowanie do aplikacji jakimkolwiek użytkownikiem będzie wywoływać prośbę o udzielenie uprawnień.&nbsp;&nbsp;</p>



<p>Przy samoakceptacji (<strong>self-consent</strong>) będzie ona wywoływana indywidualnie dla każdego użytkownika przy pierwszej próbie logowania.&nbsp;</p>



<p>Tu u niektórych z was mogą pojawić się obawy: czy zezwalając na dostęp do danych użytkownika, przydzielamy go dostawcy, u którego aplikacja została zarejestrowana? Spokojnie, nie do końca tak jest. Podobnie jak w przypadku dzierżawcy pierwotnego tworzona jest jednostka usługi jako aplikacja biznesowa, i to w zależności od ustawionych dostępów względem niej nasze rozwiązanie pozyskuje informacje o aktualnie zalogowanym użytkowniku.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_4.png" alt="azure active directory " class="wp-image-8759" title="Usługa Azure Active Directory w aplikacjach multi-tenant 12"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Gdy DevOps lub inżynier rejestruje aplikację i chce, aby logowano się do niej przez Microsoft, docelowa aplikacja z docelowymi dostępami używanymi przy logowaniu utworzy się automatycznie podczas rejestracji. Nie ma wówczas potrzeby, by użytkownicy wyrażali zgodę dla aplikacji w tej dzierżawie.&nbsp;</p>



<p><strong>Przeczytaj także: </strong><a href="https://nearshore-it.eu/pl/artykuly/wprowadzenie-do-swiata-azure-iot/">Czym jest Azure IoT? Jakie daje możliwości? Jaki jest koszt usług i gdzie zdobyć niezbędną wiedzę?</a></p>



<h2 class="wp-block-heading" id="Aplikacja-multi-tenant-wywołująca-wewnętrzne-API-">Aplikacja multi-tenant wywołująca wewnętrzne API&nbsp;</h2>



<p>Często, zwłaszcza w przypadku mikroserwisów, zdarza się, że nasza aplikacja komunikuje się z inną poprzez jej API. Kiedy dzieje się to<strong> w modelu serwis do serwisu</strong>, wystarczy, że zagwarantujemy dostęp w dzierżawie dostawcy. Sytuacja komplikuje się, kiedy chcemy aby aplikacja komunikowała się poprzez API w imieniu zalogowanego użytkownika.&nbsp;</p>



<p>Dla rozwiązania multi-tenantowego musimy zagwarantować, że API ma swojego reprezentanta u najemcy w postaci jednostki usługi, co <strong>wymusza publiczną dostępność szablonu API</strong>. Wszystko za sprawą mechanizmu weryfikacji dostępów, który tak naprawdę ma miejsce ramach tenanta, tj. dzierżawcy użytkownika.&nbsp;Dlatego należy dokładnie przemyśleć model komunikacji między aplikacjami.&nbsp;</p>



<p>Istotne jest, aby w zarejestrowanym obiekcie aplikacji API zdefiniować aplikację webową jako jedną ze zautoryzowanych – dzięki temu klient będzie mógł zezwolić na dostęp do API, a tym samym jednostka usługi zostanie zarejestrowana w jego dzierżawie.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_5.png" alt="azure active directory " class="wp-image-8760" title="Usługa Azure Active Directory w aplikacjach multi-tenant 13"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Zarządzanie-tożsamościami-–-ograniczanie-dostępu-do-aplikacji-">Zarządzanie tożsamościami – ograniczanie dostępu do aplikacji&nbsp;</h2>



<p>Jak już wspomniałem, w momencie pojawienia się aplikacji biznesowej u danego dzierżawcy każdy użytkownik ma do niej dostęp. Możemy jednak to ograniczyć.&nbsp;&nbsp;</p>



<p>Jeżeli chcemy, aby tylko określeni użytkownicy czy też grupa użytkowników miała dostęp, musimy ustawić naszą jednostkę usługi w taki sposób, żeby wymagała przypisania.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_6.png" alt="azure active directory " class="wp-image-8761" title="Usługa Azure Active Directory w aplikacjach multi-tenant 14"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Wtedy, aby użytkownik bądź grupa miała dostęp, aplikacja musi widnieć w przypisanych do użytkownika lub grupy.&nbsp;</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.05.31_graphic_7.png" alt="azure active directory " class="wp-image-8762" title="Usługa Azure Active Directory w aplikacjach multi-tenant 15"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Innym sposobem na modyfikowanie dostępów do aplikacji jest dostęp warunkowy, który pozwala wymuszać pewne zachowania bądź blokować dostęp w zależności od ustawionych scenariuszy. Opcja ta jest jednak dostępna w wersji Premium Azure Active Directory.&nbsp;Informacje o planach cenowych i dostępnych usługach znajdziesz na stronie<a href="https://azure.microsoft.com/pl-pl/pricing/details/active-directory/" target="_blank" rel="noreferrer noopener"> Microsoft Azure.</a>&nbsp;</p>



<h2 class="wp-block-heading" id="Usługa-Azure-AD-od-Microsoft-–-podsumowanie-">Usługa Azure AD od Microsoft – podsumowanie&nbsp;</h2>



<p>Aplikacja wielodostępowa pozwala zredukować koszty poprzez współdzielenie jednej instancji przez wielu klientów. Zastosowanie Azure Active Directory do zarejestrowania takiego rozwiązania ogranicza dodatkowo koszty związane z utrzymywaniem użytkowników, gdyż niejako korzystamy z tych należących do najemcy. To od administratora dzierżawcy, który chce mieć dostęp, zależy, komu i w jakim zakresie chce go przydzielić.&nbsp;</p>



<p>Niestety ograniczamy się wtedy tylko do klientów Microsoft, przez co możemy być mniej konkurencyjni. Jeżeli chcielibyśmy mieć rozwiązanie dostępne dla klientów niezależnie od dostawcy poświadczeń którego używają, ciekawą opcją jest <strong>Azure Active Directory B2C z Single Sign-On</strong>.&nbsp;&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/usluga-azure-active-directory/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Wprowadzenie do DSC (Desired State Configuration)</title>
		<link>https://nearshore-it.eu/pl/artykuly/desired-state-configuration/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/desired-state-configuration/#respond</comments>
		
		<dc:creator><![CDATA[Kamil Niewęgłowski]]></dc:creator>
		<pubDate>Tue, 09 May 2023 05:02:35 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/desired-state-configuration/</guid>

					<description><![CDATA[Gdy konfigurujemy maszyny wirtualne, możemy wcześniej stworzyć ich obraz albo… Wykorzystać możliwości, jakie daje Desired State Configuration. Czym jest DSC? Jakie ma zalety? Dowiedz się, w jakiej sytuacji warto wykorzystać usługi takie jak Microsoft Azure Automation DSC. ]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">PRZEJDŹ DO:</p>
    <ol>
                    <li><a href="#(Desired-State-Configuration)">1.  Czym właściwie jest DSC?</a></li>
                    <li><a href="#zalety">2.  Zalety </a></li>
                    <li><a href="#zastosowanie-">3.   Zastosowanie w praktyce </a></li>
                    <li><a href="#sytuacjach-">4.  W jakich sytuacjach DSC nie zadziała?  </a></li>
                    <li><a href="#Desired-State-Configuration-–-architektura">5.  Architektura </a></li>
                    <li><a href="#esired-State-Configuration">6.  Microsoft Azure Automation Desired State Configuration </a></li>
                    <li><a href="#Podsumowanie">7.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="(Desired-State-Configuration)">Czym właściwie jest DSC (Desired State Configuration)?</h2>



<p>DSC (Desired State Configuration) jest to sformalizowany sposób, który pozwala skonfigurować środowisko tak, aby przybrało ono oczekiwany przez nas stan. Jeśli przykładowo chcemy, aby na danej maszynie znajdowała się aplikacja (np. jakiś program antywirusowy) w określonej wersji, to możemy to osiągnąć właśnie za pomocą DSC. Może to być jedna aplikacja, może być ich wiele, jesteśmy tutaj właściwie nieograniczeni. Może potrzebujemy odpowiednio skonfigurowanego serwera IIS? Nie ma problemu. A może chcemy mieć pewną strukturę katalogów na dysku z konkretnymi plikami? Z DSC wszystko jest możliwe, ale ktoś słusznie pewnie zauważy, że możemy to wszystko również osiągnąć za pomocą przygotowanego wcześniej obrazu do stworzenia maszyny wirtualnej. Co różni tę opcję od DSC? Sprawdźmy!</p>



<h2 class="wp-block-heading" id="zalety">Desired State Configuration – zalety</h2>



<ol class="wp-block-list">
<li><strong>Łatwiejsza konfiguracja</strong></li>
</ol>



<p>Wyobraźmy sobie, że posiadamy maszynę wirtualną – serwer. Chcemy ten serwer skonfigurować: zainstalować różne aplikacje, zabezpieczenia, wprowadzić zmiany w rejestrze. W zależności od tego, jak duża jest to konfiguracja, musimy wykonać odpowiednio dużą liczbę kroków. Moglibyśmy to rozpisać w następujący sposób:</p>



<ul class="wp-block-list">
<li><strong>Zainstaluj Firefox w wersji X</strong></li>



<li><strong>Zainstaluj Dotnet Core w wersji X</strong></li>



<li><strong>Dodaj regułę X w MS Defenderze</strong></li>



<li><strong>Usuń wpis X w rejestrze</strong></li>
</ul>



<p>Aby wykonać każdy z tych kroków manualnie, będziemy się posiłkować różnymi narzędziami. Jeśli ta konfiguracja jest złożona, mogą pojawić się problemy z kompatybilnością. Jedno narzędzie może nie działać z innym w danej wersji albo mogą sobie wzajemnie nadpisywać pracę. Tu z pomocą przychodzi właśnie DSC. <strong>Zostało stworzone</strong> w tym celu, <strong>aby wziąwszy rozwiązania kilku dostawców, można było używać ich ze sobą bezkonfliktowo. </strong>Służy do tego sformalizowanie reguł, których powinni się trzymać dostawcy komponentów, jakich chcemy używać.</p>



<ol start="2" class="wp-block-list">
<li><strong>Idempotentność</strong></li>
</ol>



<p>Inną zaletą takiego podejścia jest idempotentność, czyli możliwość wykonywania wielokrotnie tej samej operacji bez zmiany wyniku. Dzięki temu mamy pewność, że za każdym razem, gdy zastosujemy pewną konfigurację, stan systemu się nie zmieni i będzie taki, jakiego oczekujemy. Warto zauważyć, że stosowane jest tutaj podejście deklaratywne, co jest kolejną zaletą takiego rozwiązania. Definiujemy zatem stan, jaki chcemy zastać, zamiast zastanawiać się nad poszczególnymi etapami, które pozwolą nam do tego stanu dojść.</p>



<ol start="3" class="wp-block-list">
<li><strong>Kompatybilność</strong></li>
</ol>



<p>Na początku wspomniałem o tym, że DSC pomaga w zarządzaniu komponentami tak, aby były one kompatybilne ze sobą. Oznacza to, że <strong>DSC jest pewnego rodzaju ustandaryzowaną metodą tworzenia tych komponentów.</strong> Jest to szereg reguł, które, stosowane podczas tworzenia komponentu, dają nam zapewnienie, że komponenty te będą mogły być wykorzystywane przez wielu odbiorców. Nie jest to jedynie zależność komponent – odbiorca. To również gwarancja, że komponenty te mogą być ze sobą łączone i nie oddziałują na siebie wzajemnie.</p>



<h2 class="wp-block-heading" id="zastosowanie-">Desired State Configuration – zastosowanie w praktyce</h2>



<p>Kompatybilność komponentów i ich idempotentność to niejedyne zalety DSC. Daje nam on również pewność, że cokolwiek by się działo, nasza maszyna wróci do stanu określonego w początkowej konfiguracji. W wyjątkowej sytuacji (np. gdy nastąpiły jakieś nieodwracalne zmiany) takiego stanu nie uda się odtworzyć, ale zostaniemy o tym fakcie poinformowani i będziemy mogli odpowiednio zareagować. O możliwościach reagowania szerzej napiszę w moim kolejnym artykule, w którym skupię się na <strong>Azure AA DSC</strong>.</p>



<p>Tymczasem wyobraźmy sobie, że serwer został przez nas skonfigurowany i pozostawiony w pewnym stanie. Pod naszą nieobecność ktoś, kto być może nie znał trybu pracy zespołu, albo ten tryb nie był odpowiednio określony, dokonał pewnej zmiany, która wpłynęła na serwer w taki sposób, że stan przestał być poprawny. Bez DSC po powrocie do pracy moglibyśmy być zaskoczeni, że wystąpiły jakieś nieoczekiwane zmiany. <strong>DSC dba o to, aby w takiej sytuacji środowisko cały czas było przywracane do stanu, w jakim je pozostawiliśmy i opisaliśmy</strong>. Jeśli skonfigurowałem serwer do konkretnego stanu, to ten stan ma być utrzymany.</p>



<p>Żeby lepiej to zobrazować – załóżmy, że na serwerze trzymamy jakieś pliki konfiguracyjne w katalogu X, co zostało zdefiniowane w konfiguracji DSC. Tworzy ona odpowiedni katalog i przenosi do niego poszczególne pliki z wybranego źródła zewnętrznego. Ktoś zalogował się na nasz serwer i nieumyślnie ten katalog usunął. DSC szybko wychwyci, że tego katalogu nie ma, i na nowo go odtworzy bez zakłócania pracy serwera.</p>



<h2 class="wp-block-heading" id="sytuacjach-">W jakich sytuacjach DSC nie zadziała?</h2>



<p>Wyżej wspomniałem, że DSC nie zawsze pozwoli przywrócić odpowiedni stan. Podam prosty przykład. Powiedzmy, że w ramach działania DSC chcemy zainstalować aplikację. Aplikacja ta musi być najpierw pobrana, ale ktoś na serwerze w firewallu zablokował ruch wychodzący. W takiej sytuacji DSC nie poradzi sobie z tym zadaniem, bo „nie wie”, że taka blokada powstała. My otrzymamy informację, że ten krok nie został wykonany, co prawdopodobnie sprowokuje nas do przejrzenia logów i trafienia na informację, że nie udało się połączyć z danym adresem do pobrania pliku. Ostatecznie po głębszej analizie zorientujemy się, że ruch ten jest zablokowany, ale będzie to wymagało naszego zaangażowania. Jedyne, co DSC będzie próbować robić, to pobrać plik z podanego adresu.</p>





<h2 class="wp-block-heading" id="Desired-State-Configuration-–-architektura">Desired State Configuration – architektura</h2>



<p>Powyższe przykłady w pewien sposób obrazują już, jak wygląda architektura DSC. Możemy tu wyróżnić następujące elementy:</p>



<ul class="wp-block-list">
<li><strong>Usługa Desired State Configuration</strong></li>



<li><strong>Zasoby (Powershell Gallery)</strong></li>



<li><strong>Konfiguracja</strong></li>



<li><strong>Nody (instancje wirtualnych maszyn – serwerów)</strong></li>
</ul>



<p>Wszystkie one współpracują ze sobą, tworząc spójną całość – architekturę DSC. Jeżeli chcielibyśmy szczegółowo omówić ten wątek, to należy skupić się na dwóch najważniejszych modelach, które spajają powyższe, czyli Push oraz Pull.</p>



<h3 class="wp-block-heading">Model Push</h3>



<p>Jak sama nazwa wskazuje, model Push polega na „<strong>wypychaniu</strong>” – w tym przypadku wypychamy konfiguracje na nody. Model push jest to aktywna działalność użytkownika w celu dodania konfiguracji na jednym lub <strong>wielu node’ach / serwerach</strong>. W modelu tym nasze działanie skupia się na skompilowaniu oraz wypchnięciu konfiguracji <strong>za pomocą <strong>komend PowerShell</strong>. </strong>Ten model stosowany jest, gdy zależy nam na tym, żeby wszystkie maszyny otrzymały taką samą konfigurację w możliwie jak najbardziej zbliżonym czasie. Wymaga on zatem odpowiedniego zaplanowania i wdrożenia.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.27_graphic_1.png" alt="Desired State Configuration" class="wp-image-7693" title="Wprowadzenie do DSC (Desired State Configuration) 16"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Model Pull</h3>



<p>Model Pull polega natomiast na połączeniu maszyn z zewnętrzną usługą, gdzie zostaje im przypisana konfiguracja. Serwer Pull zawiera w tym przypadku wszystkie niezbędne konfiguracje oraz zasoby, wymagane do poprawnego rozmieszczenia konfiguracji na poszczególnych node’ach. Taka konfiguracja na serwerze Pull zostaje zaciągnięta wraz ze wszystkimi niezbędnymi zależnościami, a stan node’a jest monitorowany z poziomu usługi serwera Pull. Każdy z node’ów, który jest wpięty do takiej usługi, co pewien czas odpytuje serwer zgodnie z lokalną konfiguracją.</p>



<p>Służy do tego <strong>LCM (local configuration manager)</strong>, który dba o to, aby odpytać serwer Pull, pobrać konfigurację i ją wykonać. Dodatkowo, oprócz samego odpytywania serwera Pull w interwałach czasowych, LCM dba również o to, aby monitorować stan konfiguracji na bieżącej maszynie (<strong>compliance check</strong>). Informuje nas o tym, czy wszystkie nasze maszyny poprawnie pobrały najnowszą konfigurację i prawidłowo ją wykonały. Stosowanie tego modelu jest szczególnie przydatne, gdy część maszyn jest czasowo offline. Gdy tylko przejdą w tryb online, automatycznie pobiorą i wykonają najnowszą konfigurację.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.04.27_graphic_2.png" alt="Desired State Configuration" class="wp-image-7694" title="Wprowadzenie do DSC (Desired State Configuration) 17"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jakie są znane rodzaje usług obsługujących metodę Pull? Na chwilę obecną są to:</p>



<ul class="wp-block-list">
<li><strong>Azure Automation Desired State Configuration</strong></li>



<li><strong>Usługa Pull w systemie Windows Server</strong></li>



<li><strong>DSC SMB Pull server</strong></li>
</ul>



<h2 class="wp-block-heading" id="esired-State-Configuration">Microsoft Azure Automation Desired State Configuration</h2>



<p>W czasach, gdy chmura jeszcze raczkowała, implementacja polegała na pisaniu odpowiednich skryptów i konfigurowaniu własnego serwera do zarządzania nimi. Dziś Microsoft w pełni już wspiera to rozwiązanie i zintegrował je ze swoją chmurą, co jest wygodne i przekłada się na opisane przeze mnie korzyści. Niedawno podjęta została decyzja, że usługa DSC Pull servera w systemach Windows Server przestanie być rozwijana, a wszelkie prace zostaną przekierowane na usługę na platformie Azure.</p>



<p><strong>Azure Automation Desired State Configuration jest dedykowaną usługą oferowaną i zalecaną przez Microsoft w większości scenariuszy</strong>. Dzięki niej jesteśmy w stanie wdrożyć automatyzację konfiguracji i zarządzania<strong> serwerami Windows i Linux</strong>. DSC umożliwia użytkownikom definiowanie ustawień, tzw. konfiguracji, w skrypcie PowerShell lub innych językach, takich jak <strong>JSON</strong> lub <strong>MOF</strong>, które reprezentują wymagany stan zasobów w sposób deklaratywny. Po zdefiniowaniu tych konfiguracji mogą być one przypisane do node’ów.</p>



<p>Azure Automation DSC oferuje wiele funkcji ułatwiających zarządzanie konfiguracją, w tym:</p>



<ul class="wp-block-list">
<li><strong>Zarządzanie konfiguracją</strong></li>



<li><strong>Raportowanie stanu oraz poprawności na poszczególnych instancjach (node’ach)</strong></li>



<li><strong>Raporty, które umożliwiają użytkownikom śledzenie konfiguracji swoich zasobów</strong></li>
</ul>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Desired State Configuration jest potężnym narzędziem, które daje nam możliwość zarządzania konfiguracjami (<strong>Configuration Management</strong>) na serwerach. Pozwala zminimalizować złożoność zadań związanych z zarządzaniem konfiguracją, zwiększyć niezawodność i zapewnić zgodność z zasadami bezpieczeństwa wedle potrzeb.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/desired-state-configuration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aplikacje multi-tenant vs single-tenant</title>
		<link>https://nearshore-it.eu/pl/artykuly/multi-tenant-czy-single-tenant/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/multi-tenant-czy-single-tenant/#respond</comments>
		
		<dc:creator><![CDATA[Piotr Rzeznik]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 14:13:00 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/multi-tenant-czy-single-tenant/</guid>

					<description><![CDATA[W 2022 roku ilość danych firmowych przechowywanych w chmurze (w porównaniu z tymi przechowywanymi na serwerach on-premise) sięgnęła 60%. Wzrost zainteresowania przeniesieniem usług i aplikacji do chmury sprawia, że coraz więcej menedżerów IT przed podjęciem decyzji poszukuje informacji o najbardziej przystępnych modelach rozwoju aplikacji. Dwa najchętniej wykorzystywane podejścia SaaS to single-tenant i multi-tenant, które różnią się m.in. w zakresie implementacji, dystrybucji oprogramowania i możliwości dostosowania w zależności od potrzeb. W artykule wyjaśniam, czym są oraz jakie są zalety rozwiązań single-tenant i multi-tenant.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Multi-tenant-vs-single-tenant">1.  Multi-tenant vs single-tenant</a></li>
                    <li><a href="#Czym-jest-rozwiązanie-single-tenant?">2.  Czym jest rozwiązanie single-tenant?</a></li>
                    <li><a href="#Czym-jest-rozwiązanie-multi-tenant?">3.  Czym jest rozwiązanie multi-tenant?</a></li>
                    <li><a href="#Implementacja-–-jak-działa-rozwiązanie-single-tenant?">4.  Implementacja – jak działa rozwiązanie single-tenant?</a></li>
                    <li><a href="#Zalety-i-wady-modelu-single-tenant">5.  Zalety i wady modelu single-tenant</a></li>
                    <li><a href="#Znaczenie-modelu-multi-tenant--w-rozwoju-oprogramowania">6.  Znaczenie modelu multi-tenant  w rozwoju oprogramowania</a></li>
                    <li><a href="#Multi-tenant-w-chmurze">7.  Multi-tenant w chmurze</a></li>
                    <li><a href="#Rodzaje-architektury-multi-tenant-">8.  Rodzaje architektur multi-tenant</a></li>
                    <li><a href="#Zalety-i-wady-multi-tenant-">9.  Zalety i wady modelu multi-tenant</a></li>
                    <li><a href="#Implementacja-multi-tentant-vs-single-tenant---podsumowanie:-">10.  Implementacja multi-tentant vs single-tenant – podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Multi-tenant-vs-single-tenant">Multi-tenant vs single-tenant</h2>



<p>Podejścia multi-tenant i single-tenant często bywają porównane do współwynajmu mieszkania <strong>(multi-tenant)</strong> bądź wynajmowania go na wyłączność <strong>(single-tenant)</strong>. Każde z tych rozwiązań ma pewne wady i zalety. Wynajmując mieszkanie z innymi, dzielimy się opłatami z pozostałymi lokatorami, ale nie mamy wpływu na to, w jaki sposób gospodarują przestrzenią, ile zużywają wody, prądu itp. Wynajmując mieszkanie na wyłączność, łatwiej kontrolujemy rachunki i mamy większą swobodę, możemy też wprowadzać więcej zmian w swoim otoczeniu, ale musimy liczyć się z większymi kosztami. A jak to wygląda w praktyce w przypadku naszej aplikacji?</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.22_graphic_1.png" alt="Multi tenant" class="wp-image-5499" title="Aplikacje multi-tenant vs single-tenant 18"></figure></div>


<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Czym-jest-rozwiązanie-single-tenant?">Czym jest rozwiązanie single-tenant?</h2>



<p>Rozwiązanie single-tenant to architektura, w której pojedyncza instancja aplikacji wraz z infrastrukturą służy tylko jednemu klientowi. Rozwiązania single-tenant (w dosłownym tłumaczeniu: pojedyncza dzierżawa) są powszechnie wdrażane w modelach dostarczania oprogramowania jako usługi (czyli w modelu SaaS) lub w usługach w chmurze dostarczanych do klientów docelowych (serwisy typu Netflix, Slack, Shopify itp.).</p>



<p>W architekturze single-tenant klient, nazywany <strong>tenantem </strong>(lub dzierżawcą, najemcą), będzie miał dedykowaną mu pojedynczą instancję aplikacji SaaS. Dostawca będzie pomagać w zarządzaniu instancją oprogramowania i dedykowaną infrastrukturą, jednocześnie zapewniając prawie pełną kontrolę temu właśnie najemcy w zakresie dostosowywania oprogramowania i infrastruktury.</p>



<p>Cechą charakterystyczną rozwiązań single-tenant jest to, że zwykle pozwalają użytkownikom zachować kontrolę i w wysokim stopniu zaangażować się w dostosowanie rozwiązania, a także cechuje je niezawodność, bezpieczeństwo i możliwość tworzenia kopii zapasowych. Ponieważ dzierżawcy znajdują się w oddzielnym środowisku, nie są związani w taki sam sposób, w jaki byliby, korzystając ze wspólnej infrastruktury w modelu multi-tenant (o którym poniżej).</p>



<p><strong>Przeczytaj także:</strong></p>



<ul class="wp-block-list">
<li><a href="https://nearshore-it.eu/pl/artykuly/jak-postawic-serwer-tcp-na-azure/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/jak-postawic-serwer-tcp-na-azure/">Serwer TCP na platformie Azure</a></li>



<li><a href="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/">Kim jest DevOps i jak wspiera projekty IT?</a></li>
</ul>



<h2 class="wp-block-heading" id="Czym-jest-rozwiązanie-multi-tenant?">Czym jest rozwiązanie multi-tenant?</h2>



<p>Multi-tenant to architektura, w której pojedyncza instancja aplikacji obsługuje wielu klientów. Dzierżawcy mogą mieć uprawnienia do dostosowywania niektórych części aplikacji, takich jak kolor interfejsu użytkownika lub reguły biznesowe, ale nie mogą modyfikować kodu aplikacji.</p>



<p>W architekturze wielodostępnej wiele instancji aplikacji działa w środowisku współdzielonym. Takie rozwiązanie jest możliwe, ponieważ każdy najemca jest zintegrowany fizycznie, ale oddzielony na poziomie logiki biznesowej.</p>



<p>Oznacza to, że pojedyncza instancja oprogramowania będzie działać na jednym serwerze, a następnie obsługiwać wielu najemców. Aplikacje dostarczane przez dostawcę często są podobne. Mogą mieć elementy wspólne, jak na przykład widoki czy logikę do zarządzania użytkownikami. Te obszary będą współdzielić konfigurację, która będzie identyczna dla określonej liczby najemców.</p>



<p>Aplikacje multi-tenant mogą być używane przez tych samych użytkowników, ekrany, reguły i schematy baz danych. Użytkownicy mogą dostosowywać reguły biznesowe i schematy baz danych.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.22_graphic_2.png" alt="multi-tenant" class="wp-image-5500" title="Aplikacje multi-tenant vs single-tenant 19"></figure></div>


<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Implementacja-–-jak-działa-rozwiązanie-single-tenant?">Implementacja – jak działa rozwiązanie single-tenant?</h2>



<p>W architekturze single-tenant każdy najemca będzie miał<strong> własną bazę danych i instancję oprogramowania </strong>(aplikacji), która izoluje dane każdego z najemców. Ponadto ta architektura dopuszcza tylko jedną instancję per serwer SaaS. Każda część oprogramowania może być albo specjalnie zaimplementowana dla danego najemcy, albo najemca może <strong>dostosować interfejs </strong>użytkownika po instalacji. Po wdrożeniu oprogramowania najemcy mogą zazwyczaj <strong>dostosować oprogramowanie</strong> do potrzeb konkretnego środowiska, ale nie mają dostępu do kodu źródłowego.</p>



<p>Dane każdego najemcy powinny również mieć kopię zapasową, dzięki czemu w przypadku utraty danych będą oni mieć możliwość łatwego i szybkiego ich przywrócenia. Ponadto dzierżawcy mogą samodzielnie zdecydować, <strong>kiedy będą instalowane dostępne aktualizacje</strong>, zamiast czekać, aż zrobi to dostawca.</p>



<p>W ostatnim czasie powszechne jest <strong>chmurowe wdrażanie rozwiązań single-tenant.</strong> W większości przypadków, jeśli ktoś korzysta z usług chmury prywatnej lub oferty chmury innej firmy, najprawdopodobniej jest to właśnie system z tzw. jednym dzierżawcą. Dzieje się tak, ponieważ najemca byłby jedynym klientem posiadającym dostęp do tej instancji, z opcjami bezpieczeństwa i zarządzania, a także indywidualnymi kontrolami.</p>



<h2 class="wp-block-heading" id="Zalety-i-wady-modelu-single-tenant">Zalety i wady modelu single-tenant</h2>



<h3 class="wp-block-heading">Zalety</h3>



<p>Single-tenant niesie ze sobą pewne zauważalne zalety, które są kluczowe przy podejmowaniu decyzji o wyborze rozwiązań architektonicznych. Do korzyści można zaliczyć:</p>



<ul class="wp-block-list">
<li><strong>Przenośność</strong> – instancje single-tenant można przenosić za pośrednictwem usług chmurowych lub SaaS.</li>



<li><strong>Bezpieczeństwo danych</strong> – nawet jeśli dojdzie do wycieku/naruszenia danych jednego najemcy u tego samego dostawcy usług (service providera), to inny najemca będzie bezpieczny, ponieważ jego dane są przechowywane w osobnej instancji.</li>



<li><strong>Dostosowanie aplikacji </strong>– wszystkie dane klienta są oddzielne, dzięki temu ten model daje duże możliwości w zakresie dostosowania oprogramowania.</li>



<li><strong>Niezawodność </strong>– rozwiązania single-tenant są uważane za niezawodne, ponieważ ich wydajność jest oparta tylko na jednej instancji, a więc niezależna od działania wielu innych instancji pozostałych najemców.</li>



<li><strong>Przywracanie i odzyskiwanie po awarii</strong> – odizolowane kopie zapasowe umożliwiają użytkownikom szybkie odzyskiwanie usług w przypadku awarii i utraty danych.</li>
</ul>



<h3 class="wp-block-heading">Wady</h3>



<p>Biorąc pod uwagę wszystkie potencjalne zalety single-tenant, jest to nadal rzadziej używana opcja spośród konkurencyjnych architektur, co może wynikać z niektórych jej wad. Główne wady podejścia single-tenant to:</p>



<ul class="wp-block-list">
<li><strong>Wysokie koszty &#8211; </strong>hosting jednej instancji SaaS per klient może nieść ze sobą znaczne koszty, ponieważ taka sama liczba zasobów potrzebna w środowisku jest opłacana przez tylko jednego najemcę.</li>



<li><strong>Złożone zarządzanie &#8211;</strong> skomplikowane procesy, które mogą pojawić się, gdy po raz pierwszy zaczniesz wdrażać i dostosowywać SaaS dla jednego najemcy.</li>



<li><strong>Niewykorzystane zasoby &#8211;</strong> w słabiej zoptymalizowanych systemach nie wszystkie zasoby mogą być wykorzystane, co spowoduje, że system będzie mniej wydajny.</li>
</ul>



<h2 class="wp-block-heading" id="Znaczenie-modelu-multi-tenant--w-rozwoju-oprogramowania">Znaczenie modelu multi-tenant&nbsp; w rozwoju oprogramowania</h2>



<p>Multi-tenant on-premise to z reguły stare rozwiązania, a ich korzenie sięgają klasycznych architektur mainframe, w których wiele aplikacji i użytkowników współdzieliło jedną platformę sprzętową. Wraz z wprowadzeniem i przyjęciem nowoczesnej wirtualizacji sprzętowej pojawiły się <strong>możliwości współdzielenia sprzętu</strong> między wieloma instancjami oprogramowania, takimi jak maszyny wirtualne i zainstalowane na nich aplikacje. Rozwiązanie to zyskało popularność <strong>zwłaszcza w centrach danych. </strong>Wszystko to umożliwia wielu użytkownikom współdzielenie jednej infrastruktury sprzętowej.</p>



<h2 class="wp-block-heading" id="Multi-tenant-w-chmurze">Multi-tenant w chmurze</h2>



<p>Wraz z eksplozją zainteresowania migracją do chmury podejście multi-tenant odnotowało najbardziej spektakularne zastosowanie w usługach chmurowych. Architektury multi-tenant można znaleźć zarówno w środowiskach chmury publicznej, jak i prywatnej. Umożliwiają oddzielenie danych każdego najemcy od pozostałych. Na przykład w chmurze publicznej z wieloma najemcami te same serwery będą używane w hostowanym środowisku do udostępniania zasobów wielu użytkownikom. W ramach tych serwerów każdy użytkownik otrzymuje oddzielną i zabezpieczoną przestrzeń logiczną do uruchamiania aplikacji i przechowywania danych.</p>



<h2 class="wp-block-heading" id="Rodzaje-architektury-multi-tenant-">Rodzaje architektury multi-tenant&nbsp;</h2>



<p>Istnieją trzy główne typy modeli wielodostępnych, wszystkie o różnym poziomie złożoności i wiążące się z różnymi kosztami. Każdy model jest tradycyjnie omawiany w kategoriach aplikacji i bazy danych.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.22_graphic_3.png" alt="Typy architektury Multi-Tenant" class="wp-image-5502" title="Aplikacje multi-tenant vs single-tenant 20"></figure></div>


<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>Pojedyncza aplikacja, jedna baza danych –</strong> pojedyncza, współużytkowana baza danych to model wielodostępny z wielodostępną bazą danych. Jest to najprostsza forma spośród trzech typów modeli i ze względu na wykorzystanie współdzielonych zasobów charakteryzuje ją stosunkowo niski koszt dla najemców. To rozwiązane używa pojedynczego wystąpienia aplikacji i bazy danych do obsługi wielu jednoczesnych najemców i przechowywania danych. Korzystanie z jednej, współdzielonej bazy danych umożliwia łatwiejsze skalowanie, jednak koszty operacyjne mogą być wyższe.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Pojedyncza aplikacja, wiele baz danych –</strong> rozwiązanie obejmuje korzystanie z jednej bazy danych z wieloma schematami. Ten system dzierżawy używa pojedynczej instancji aplikacji z indywidualnymi bazami danych dla każdego najemcy. Ponadto ta architektura jest trudniejsza do skalowania i wiąże się z wyższymi kosztami oraz większym obciążeniem dla każdej bazy danych. Jest to warta zastosowania architektura, gdy dane pochodzące od różnych najemców są rozproszone. Wówczas każda aplikacja to mikroserwis, który posiada własną bazę danych i jest niezależny od innych.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Wiele aplikacji, wiele baz danych – </strong>ten typ architektury multi-tenant obsługuje dane w wielu bazach danych. Model ten jest dość złożony pod względem kosztów, zarządzania i utrzymania, ale podejście jest bezpieczne. Najemców można rozdzielić według wybranego kryterium.</li>
</ul>



<h2 class="wp-block-heading" id="Zalety-i-wady-multi-tenant-">Zalety i wady multi-tenant&nbsp;</h2>



<p>Multi-tenant wiąże się z kilkoma korzyściami, najważniejsze z nich to:</p>



<h3 class="wp-block-heading">Zalety:&nbsp;</h3>



<ul class="wp-block-list">
<li><strong>Korzystna cena</strong> – ten model jest tańszy w porównaniu z innymi architekturami hostingu dzierżawy.</li>



<li><strong>Różne modele rozliczeniowe</strong> – oferuje modele cenowe typu Pay for what you use i Pay as you go.</li>



<li><strong>Zapewnione aktualizacje </strong>– najemcy korzystający z oprogramowania dostawcy nie muszą martwić się o aktualizacje, ponieważ są one dostarczane przez dostawcę.</li>



<li><strong>Przyjazny hosting </strong>– najemcy nie muszą martwić się o sprzęt, na którym są hostowane ich dane.</li>



<li><strong>Łatwiejsza administracja </strong>– dostawcy mają do monitorowania i administrowania tylko jeden system.</li>



<li><strong>Skalowalność </strong>– architektura multi-tenant jest łatwo skalowalna.</li>
</ul>



<h3 class="wp-block-heading">Wady:&nbsp;</h3>



<ul class="wp-block-list">
<li><strong>Mniejsza elastyczność – </strong>aplikacje dostarczane przez dostawcę są zwykle mniej elastyczne niż aplikacje w innych architekturach dzierżawców (tenant architecture), takich jak single-tenant.</li>



<li><strong>Złożoność – </strong>jest to na ogół bardziej złożone niż single-tenant ze względu na dodatkową wirtualizację i zarządzanie potrzebne do odizolowania i zabezpieczenia każdego najemcy.</li>



<li><strong>Rygorystyczne zabezpieczenia –</strong> aplikacje wymagają bardziej rygorystycznego uwierzytelniania i kontroli dostępu ze względów bezpieczeństwa.</li>



<li><strong>Ryzyko niedostępności –</strong> w zależności od dostawcy, przestoje również mogą stanowić problem. Skutki uboczne, takie jak pojedynczy problem z serwerem dotykający wielu użytkowników, również mogą stanowić niepożądane ryzyko.</li>
</ul>



<h2 class="wp-block-heading" id="Implementacja-multi-tentant-vs-single-tenant---podsumowanie:-">Implementacja multi-tentant vs single-tenant &#8211; podsumowanie:&nbsp;</h2>



<p>Architektura single-tenant jest podobna do podejścia „jeden serwer, jedna aplikacja”, które przypomina tradycyjne centra danych, jakie były dostępne przed upowszechnieniem wirtualizacji serwerów. W hostowanych architekturach z jednym najemcą będzie miał on pojedynczą instancję dedykowanej mu aplikacji SaaS, w przeciwieństwie do modelu multi-tenant, gdzie usługi są współdzielone. Ponieważ każdy najemca znajduje się w oddzielnym środowisku fizycznym lub infrastrukturze, nie są oni związani w taki sam sposób, jak użytkownicy współdzielonej infrastruktury. Oznacza to, że <strong>architektury z jednym najemcą są znacznie bardziej konfigurowalne.</strong></p>



<p>Multi-tenant jest używany częściej, ponieważ większość lokalnych centrów danych, SaaS i innych usług w chmurze jest współdzielona. W porównaniu z pojedynczym dzierżawcą, <strong>multi-tenant jest tańszy, pozwala na bardziej efektywne wykorzystanie zasobów</strong> i <strong>ma niższe koszty utrzymania</strong>, a także niesie potencjał większej mocy obliczeniowej. Dzięki architekturze z wieloma dzierżawcami dostawca musi dokonywać aktualizacji tylko raz. W architekturze z jednym dzierżawcą dostawca musi z kolei zadbać o aktualizacje.</p>



<p>Mimo że rozwiązanie multi-tenant ma wiele zalet w porównaniu z single-tenant, możliwość wprowadzania znaczących zmian w oprogramowaniu jest utrudnione dla danego najemcy, ponieważ oprogramowanie jest współużytkowane przez innych najemców.</p>



<p><strong>Przeczytaj również:</strong> <a href="https://nearshore-it.eu/pl/artykuly/proces-dostarczania-oprogramowania-ci-cd/">Jak wygląda proces dostarczania oprogramowania oparty na CI/CD? </a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/multi-tenant-czy-single-tenant/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku</title>
		<link>https://nearshore-it.eu/pl/artykuly/jak-postawic-serwer-tcp-na-azure/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/jak-postawic-serwer-tcp-na-azure/#respond</comments>
		
		<dc:creator><![CDATA[Adam Sosinski]]></dc:creator>
		<pubDate>Wed, 08 Feb 2023 14:18:36 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/jak-postawic-serwer-tcp-na-azure/</guid>

					<description><![CDATA[Gdy rozwijamy aplikację, często zachodzi potrzeba integrowania jej z zewnętrznymi systemami. Zdarza się, że komunikacja z nimi jest niestabilna albo sama konfiguracja wymusza posiadanie fizycznych urządzeń, aby developer na etapie programowania mógł całościowo przetestować rozwiązanie. Programując pod kątem komunikacji z urządzeniem (gdy np. w kodzie jest jego adres IP), jesteśmy zależni od jego funkcjonalności i dostępności. Dobrą praktyką jest wtedy pewnego rodzaju odizolowanie naszego systemu, aby warunki zewnętrzne nie wpływały na codzienną pracę nad oprogramowaniem. Z tego artykułu dowiesz się, jak odpowiedzieliśmy na to wyzwanie, wdrażając komunikację po TCP z wykorzystaniem Azure. Jeżeli kiedykolwiek stanąłbyś przed zadaniem postawienia serwera TCP z wykorzystaniem Microsoft Azure, ten materiał przeprowadzi cię przez ten proces krok po kroku.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Przejdź do:</p>
    <ol>
                    <li><a href="#Serwer-TCP-na-platformie-Azure-–-ale-po-co?">1.  Serwer TCP na platformie Azure – ale po co?</a></li>
                    <li><a href="#Komunikacja-po-TCP-–-jakie-są-opcje?">2.  Komunikacja po TCP – jakie są opcje? </a></li>
                    <li><a href="#Konfigurujemy-Azure-Container-Instances">3.  Konfigurujemy Azure Container Instances </a></li>
                    <li><a href="#Czas-na-testy">4.  Testy</a></li>
                    <li><a href="#Problem-zmiany-adresu-IP-po-przeładowaniu…">5.  Problem zmiany adresu IP po przeładowaniu&#8230;   </a></li>
                    <li><a href="#Container-Apps-z-TCP-jako-kolejny-etap-ewolucji">6.  Container Apps z TCP jako kolejny etap ewolucji </a></li>
                    <li><a href="#Podsumowanie">7.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Serwer-TCP-na-platformie-Azure-–-ale-po-co?">Serwer TCP (Transmission Control Protocol) na platformie Azure – ale po co?</h2>



<p>W naszym projekcie, pracując nad rozwiązaniem pozwalającym systemom POS (ang. point of sale) na obsługiwanie płatności, musieliśmy <strong>zintegrować je z systemem obsługującym komunikację z terminalami płatniczymi</strong>. Wiązało się to z posiadaniem fizycznego urządzenia, w tym przypadku terminala, do celów testowych. Pracując w trybie zdalnym, z zespołem rozproszonym po kilku miastach w Polsce, niemożliwe było współdzielenie jednego takiego urządzenia. Zdecydowaliśmy, że do testów i na etapie pracy nad kodem będziemy <strong>używać stuba </strong>(czyt. staba) – aplikacji, która będzie zwracała predefiniowane odpowiedzi).</p>



<p>Lista wymagań wobec naszego zamiennika była bardzo krótka:</p>



<ul class="wp-block-list">
<li><strong>Komunikacja musi odbywać się po TCP</strong></li>



<li><strong>Żądanie musi zwracać oczekiwaną odpowiedź</strong></li>



<li><strong>Serwer musi być w stanie obsłużyć równoległe żądania</strong></li>
</ul>



<p>Gotowe rozwiązanie w .NET było przygotowane tak, aby można je było uruchomić lokalnie na Dockerze.</p>



<p>Po upewnieniu się, że stub spełnia nasze oczekiwania i bez ryzyka może zastąpić rzeczywistą integrację, postanowiliśmy użyć go do testów E2E (ang. end to end), które są elementem pipeline’u <a href="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it" data-type="URL" data-id="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it" target="_blank" rel="noreferrer noopener">DevOps</a>. W tym celu trzeba było aplikację umieścić gdzieś na platformie Azure, z której korzystaliśmy.</p>


<div class="image-with-text">
    <div class="container">
        <div class="tiles latest-news-once">
            <div class="tile" style="max-height: unset; height: 350">
                <div class="tile-image">
                                            <img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/2021.11.03_jpro_cover-3_min_c-1.jpg" alt="2021.11.03 jpro cover 3 min c 1" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 21">
                                    </div>
                <div class="tile-content fadeIn wow">
                    <h3>Azure Serverless workflow orchestration</h3>
<p>Automatyzacja procesów biznesowych jest naturalną transformacją. Poznaj rozwiązanie oparte na Azure Durable Function, które pozwoli ci przejść gładko przez ten proces.</p>
<p><a href="https://nearshore-it.eu/pl/artykuly/azure-serverless-workflow-orchestration/" class="btn btn-red btn-arrow">Przeczytaj artykuł</a></p>
                </div>
            </div>
        </div>
    </div>
</div>


<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Komunikacja-po-TCP-–-jakie-są-opcje?">Komunikacja po TCP – jakie są opcje?</h2>



<p>Największą trudnością w znalezieniu odpowiedniego zasobu okazał się wymagany rodzaj protokołu, niewspierany przez serwisy bazujące głównie na komunikacji po HTTP. Jakie mieliśmy opcje?</p>



<ol class="wp-block-list">
<li><strong>Maszyna wirtualna</strong> – można postawić maszynę wirtualną i na niej uruchomić aplikację, ale wymagałoby to dodatkowej konfiguracji dostępu do maszyny oraz utrudniało monitorowanie samej aplikacji.</li>



<li><strong>Azure Kubernetes Services</strong> – kolejną opcją jest AKS, który daje sporą elastyczność w kwestii automatyzacji zarządzania infrastrukturą, jednak na potrzeby prostego stuba jest to nadmiarowe rozwiązanie (wymagałoby odpowiedniej konfiguracji, a i tak nie wykorzystalibyśmy wielu opcji, jakie oferuje).</li>



<li><strong>Azure Container Instances </strong>– przeglądając portfolio usług Azure, natrafiłem na informację, że protokół TCP jest dostępny dla Azure Container Instances. Wyglądało to na idealne rozwiązanie, które można byłoby w prosty sposób uruchomić. Dodatkowym atutem była łatwość monitorowania i fakt, że lokalnie stub działał na kontenerze dockerowym.</li>
</ol>



<p><strong>Obejrzyj także wideo z&nbsp;serii BiteIT:</strong></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="BiteIT #58: Let`s secure your App Service on Azure | Marcin Niesyn" width="500" height="281" src="https://www.youtube.com/embed/fDSI_-OCCU8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading" id="Konfigurujemy-Azure-Container-Instances">Konfigurujemy Azure Container Instances</h2>



<p>Na potrzeby tego artykułu przygotowałem uproszczoną wersję docelowego rozwiązania. Działa ono jak echo, zwracając otrzymane żądanie do nadawcy, i to właśnie tę aplikację będę starał się udostępnić poprzez Azure Container Instances.</p>



<p>Poniżej fragment kodu serwera odpowiedzialny za obsługę żądań.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">private void Echo(IAsyncResult result) 

{ 

var listener = (TcpListener)result.AsynState!; 
	 

if (!_active) 

     { 

          return 

 
     } 
 
     var client = listener.EndAcceptTcpClient(result); 

     _logger.LogInformation(“Client connected from: {ip}”, 
     client.Client.RemoteEndPoint); 
     _allDone.Set(); 

     Task.Run(async () => 

     { 

          using (var stream = client.GetStream()) 

          var buffer = _array.Pool.Rent(256); 

         Array.Pool.Return(await stream.Echo(buffer), clearArray: true); 
     } 

     client. Close(); 

     }); 

 
} </pre>



<p>Jako osoby zajmujące się wytwarzaniem oprogramowania powinniśmy <strong>dążyć do automatyzowania powtarzalnych czynności</strong>, dlatego całą konfigurację zasobów umieściłem <strong>w plikach Bicep</strong>. Takie rozwiązanie pozwala używać raz zdefiniowanej konfiguracji wielokrotnie podczas wdrażania jej na platformie Azure.</p>



<p>Podstawowa konfiguracja Azure Container Instances wymaga zdefiniowania:</p>



<p>1. Zasobów, z jakich może korzystać skonteneryzowana aplikacja.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">resources: { 

     requests: {  

          cpu: 1  

          memoryInGB: 1  
     } 
} </pre>



<p>2. Lokalizacji obrazu, na podstawie którego będzie budowany kontener, wraz ze zdefiniowanymi portami zewnętrznymi.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">image: '${containerRegistryName}/tcp-server:latest’ 

ports: [  

{ 

port: port 

protocol 'TCP' 

} 

] </pre>



<p>3. Dostępu do rejestru, na którym znajduje się obraz.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">imageRegistryCredentials: [ 

{ 

server: containerRegistryName 

username: registryUserName 

password: registryPassword 

} 

] </pre>



<p>4. Konfiguracji adresu IP.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">IpAddress: { 

type: ‘Public’ 

ports: [  

    {  

port: port 

protocol: ‘TCP’  

    } 

          ] 

} </pre>



<p><strong>Najważniejsza rzecz, o której trzeba pamiętać, to aby wewnętrzny port odpowiadał portowi zewnętrznemu, inaczej komunikacja po TCP nie będzie działać.</strong></p>



<p>Poniżej cały plik Bicep dla konfiguracji Azure Container Instances:</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/TCP_01-762.png" alt="plik Bicep dla konfiguracji Azure Container Instances:" class="wp-image-8861" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 22"></figure>



<h2 class="wp-block-heading" id="Czas-na-testy">Czas na testy</h2>



<p>Po wdrożeniu na środowisko Azure mogliśmy upewnić się, że aplikacja działa i nasłuchuje na żądania.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_1.png" alt="Protokół tcp zapewnia usługi połączeniowe" class="wp-image-69569" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 23"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_2.png" alt="Segment tcp zawiera sumę kontrolną" class="wp-image-69571" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 24"></figure></div>


<p>Do celów testowych napisałem prostego klienta TCP jako test w xUnit.&nbsp;</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[Fact]  

public void MakeSingleCall() 

{ 

var buffer = _arrayPool.Rent(256); 

try 

{ 

using var client = GetClient(); 

using var stream = client.GetStream(); 

stream.Write(Encoding.UTF8.GetBytes(TestMessage)); 

 

          while (!stream.DataAvailable) 

          { 

               Thread.Sleep(1000); 

          } 

 

          StringBuilder sb = new(); 

          while (Stream.DataAvailable) 

         { 

         var readBytes = stream. Read(buffer); 

         Sb.Append(Encoding.UTF8.GetString(buffer[...readBytes])); 

         } 

         Assert.Equal(TestMessage, sb.ToString()); 

    } 

    finally   

    { 

           _arrayPoolReturn(buffer); 

    } 


} </pre>



<p>Do nawiązywania połączenia służy prywatna metoda GetClient.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">private static TcpClient GetClient() 

{  

var socketException = new SocketException(); 

ushort attempts = 0; 

while (attempts &lt; RetryAttempt) 

{ 

try  

{ 

TcpClient client = new (HostName, Port); 

return client; 

          } 

          catch (socketException  ex  

          { 

          socketException = ex; 

                attempts++; 

                Thread.Sleap(TimeSpan.FromSeconds(Math.Pow(2,  attempts))); 

                continue;   

 

          } 

     } 

     throw SocketException; 

} </pre>



<p>Jak widać, test zakończył się sukcesem, a w logach kontenera mamy informację o nawiązaniu połączenia.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_3.png" alt="TCP  pozwala przesyłać i odebrać dane między procesami " class="wp-image-69573" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 25"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_4.png" alt=" IP to identyfikator liczbowy" class="wp-image-69577" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 26"></figure></div>


<h2 class="wp-block-heading" id="Problem-zmiany-adresu-IP-po-przeładowaniu…">Problem zmiany adresu IP po przeładowaniu…</h2>



<p>Mógłbym w tym momencie przejść do podsumowania, jako że mamy działającą aplikację w Azure pozwalającą na komunikację po TCP. Niestety <a href="https://learn.microsoft.com/en-us/azure/container-instances/container-instances-stop-start" data-type="URL" data-id="https://learn.microsoft.com/en-us/azure/container-instances/container-instances-stop-start" target="_blank" rel="noreferrer noopener">w dokumentacji Azure Container Instances</a> jest informacja, że <strong>adres IP może się zmienić w przypadku przeładowania zasobu</strong>, co z kolei jest wymagane, aby pobrać najnowszą wersję obrazu aplikacji. Ryzyko zmiany adresu stuba sprawiało, że testy E2E nie mogły być częścią pipeline’u, ponieważ istniała możliwość, że będą fałszywie negatywne.</p>



<h3 class="wp-block-heading">…i rozwiązanie tego problemu</h3>



<p>Żeby nie wymuszać na kliencie serwera TCP pilnowania i zmieniania adresu IP po przeładowaniu zasobu, należy ten problem „schować” i obsłużyć wewnętrznie poprzez infrastrukturę. Na szczęście Azure zapewnia rozwiązania pozwalające to zrobić.</p>



<p>Docelowa architektura prezentuje się następująco:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_5.png" alt=" Czy Container Apps  z TCP może być nowym najczęściej stosowanym rozwiązaniem?" class="wp-image-69579" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 27"></figure></div>


<p>I składa się z:</p>



<ul class="wp-block-list">
<li><strong>Publicznego IP</strong></li>



<li><strong>Load balancera</strong></li>



<li><strong>Sieci wirtualnej (VNet)</strong></li>



<li><strong>Container registry</strong></li>



<li><strong>Container instances</strong></li>
</ul>



<p>Konfigurację w plikach Bicep podzieliłem na moduły per typ zasobu oraz jeden plik główny jako punkt startowy do postawienia wszystkich niezbędnych elementów.</p>



<p>Aby zmniejszyć liczbę adresów IP, jakie mogą zostać przydzielone do kontenera, zdefiniowana podsieć ma tylko 8 adresów, z czego 5 jest na wewnętrzne potrzeby Azure, co zostawia nas z 3 dostępnymi adresami.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">resource virtualNetwork ‘Microsoft.Network/virtualNetworks@2022-05-01'  existing = { 

name:shared-vnet' 

} 

 

resource subnet ‘Microsoft.Network/virtualNetworks/subnets@2022-05-01' = { 

   name’tcp-server-sub' 

   parent: virtualNetwork 

   properties: { 

 	   	addressPrefix: ‘10.1.2.0/29 

delegations: [ 

   { 

name: ACIDelegationService’  

properties: {  

   serviceName: ‘Microsoft.ContainerInstance/containerGroups’  

type: ‘Microsoft.Network/virtualNetworks/subnets/delegations’ 

   } 

] 

privateEndpointNetworkPolicies: ‘Disabled’ 

privateLinkServiceNetworkPolicies: ‘Enabled’  

   } 

   	} 

 
output subnetId string = subnet.id </pre>



<p>Konfigurując load balancer, należy ustawić pulę dla dostępu do wewnętrznego zasobu.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">backendAddressPools: [  

     {  

     name: ‘tcp-server-be' 

     properties: {  

     loadBalancerBackendAddresses: [  

     { 

     name: ‘tcp-server’ 

         properties: { 

         ipAddress: backendPrivateIPAddress 

  	     virtualNetwork: { 

         id:virtualNetworkId 

         } 

         } 

      } 

   ] 

 } 

 } 

] </pre>



<p>Gdzie „ipAddress” jest adresem dla Container Instances wewnątrz podsieci.</p>



<p>Dodatkowo zdefiniowałem sprawdzanie żywotności kontenera poprzez próbkowanie.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">probes: [ 

{ 

name: ‘tcp-server-hc' 

properties: {  

   protocol: ‘Tcp’  

   port: tcpPort 

   intervalInSeconds: 5  

   numberOfProbes: 1  

          } 

     } 

]  </pre>



<p>Wszystkie te ustawienia są niezbędne do ustalenia reguł przekierowywania ruchu z publicznego adresu IP na wewnętrzne.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">loadBalancingRules: [ 

   { 

name:  ‘tcp-server-lb-rule' 

   properties: { 

frontendPort: tcpPort 

   protocol: ‘Tcp’ 

   backendPort: tcpPort 

   disableOutboundSnat: true 

   frontendIPConfiguration: { 

id: resourceId( ‘Microsoft.Network/loadBalancers/frontendIPConfigurations’, ‘tcp-server-lb', ‘tcp-server-fe' ) 

} 

backendAddressPool: { 

id: resourceId( ‘Microsoft.Network/loadBalancers/backendAddressPools’, ‘tcp-server-lb', ‘tcp-server-be' ) 

} 

probe: { 

   	id: resourceId(‘ Microsoft.Network/loadBalancers/probes’, ‘tcp-server-lb', ‘tcp-server-hc' ) 

     } 

    } 

 } 

] </pre>



<p>Jedyna zmiana w konfiguracji Container Instances dotyczy ustawień adresu IP, który teraz jest prywatny i przydzielony z podsieci.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ipAddress: {  

type: ‘Private’  

ports: [ 

   { 

port: port  

protocol : ‘TCP’ 

        } 

     ] 

} 

subnetIds:[ 

          {  

id: subnetId 

} 

]     </pre>



<p>Taka konfiguracja dalej wymaga pilnowania adresu IP po restarcie kontenera i upewniania się, że jest taki sam jak ustawiony na load balancerze, ale staje się to problemem wewnętrznym.</p>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_6.png" alt=" class=" class="wp-image-69581" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 28"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_graphic_7.png" alt=" class=" class="wp-image-69583" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 29"></figure></div>


<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Container-Apps-z-TCP-jako-kolejny-etap-ewolucji">Container Apps z TCP jako kolejny etap ewolucji</h2>



<p>Pod koniec 2022 roku Azure dał możliwość <a href="https://learn.microsoft.com/en-us/azure/container-apps/ingress?tabs=bash#tcp" data-type="URL" data-id="https://learn.microsoft.com/en-us/azure/container-apps/ingress?tabs=bash#tcp" target="_blank" rel="noreferrer noopener">skonfigurowania Container Apps </a>dla komunikacji po TCP w wersji zapoznawczej.</p>



<p>Ponieważ Azure Container Apps ułatwia skalowanie oraz pozwala zautomatyzować podnoszenie wersji aplikacji po pojawieniu się nowego obrazu w rejestrze, postanowiłem się temu przyjrzeć.</p>



<p>Zgodnie z dokumentacją należy umieścić środowisko zarządzane wewnątrz podsieci. Istotne jest skonfigurowanie poprawnego zakresu CIDR – minimum /23.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">resource virtualNetwork ‘Microsoft.Network/virtualNetworks@2055-05-01' existing = { 

name: ‘shared-vnet’ 

     } 

     resource subnet ‘Microsoft.Network/virtualNetworks/subnets@2022-05-01 = { 

         name: ‘tcp-server-ca-sub' 

         parent: virtualNetwork 

         properties: {  

          addressPrefix: ‘10.1.0.0/23’ 

           } 

      } 

output subnetId string = subnet.id  </pre>



<p>Container Apps wymagają zdefiniowanego środowiska zarządzanego. Jak już wspomniałem, należy je umieścić wewnątrz podsieci, pamiętając o ustawieniu właściwości „<strong>internal</strong>” na false, aby aplikacja była dostępna z zewnątrz.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">vnetConfiguration: { 

infrastructureSubnetId: subnetId 

internal: false 

} </pre>



<p>Sama konfiguracja Container Apps wymaga zdefiniowania:</p>



<p>1. Szablonu dla rewizji, którą chcemy uruchomić.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">template: {  

containers: [  

{ 

          env: [ 

          { 

          name: ‘TcpServer_Port’ 

value: ‘${port}’ 

      } 

    ] 

    image: ‘${containerRegistryName}/tcp-server:latest’ 

    name: ‘tcp-server’ 

    probes: [ 

     { 

     periodseconds: 10 

     successThreshold: 1  

          tcpSocket: { 

         port: port 

     } 

     type: ‘Liveness’ 

    } 

] 

resources: { 

cpu: json(‘0.25’) 

memory: ‘0.5Gi’ 

} 
} 

] 

revisionSuffix: guid(‘tcp-server') 

}   </pre>



<p>        Dodałem, oczywiście, próbkowanie żywotności kontenera.</p>



<p>2. Punktu wejścia dla komunikacji zewnętrznej.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ingress: { 

allowInsecure: false 

     exposedPort: port 

     external: true 

     targetPort: port 

     transport: ‘tcp’ 

} </pre>



<p>3. Dostępu do Azure Container Registry, na którym znajduje się obraz aplikacji.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">registries: [  

   {  

server: ascoding.azurecr.io’ 

username: registryUsername 

passwordSecretRef:  registryPasswordSecretId 

   } 

] 

secrets: [  

   { 

name: registryPasswordSecretId 

value: registryPassword 

  } 

]  </pre>



<p>Przydatnym dodatkiem jest możliwość przechowywania informacji wrażliwych wewnątrz zasobu, <strong>bez konieczności podłączania zewnętrznego Key Vaulta.</strong></p>



<p>Po zakończonym wdrożeniu okazało się, że rozwiązanie Azure jest bardzo podobne do mojego.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/11/blog_2023.02.08_graphic_8.png" alt="blog 2023.02.08 graphic 8" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 30"></figure></div>


<p>I również działa.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/11/blog_2023.02.08_graphic_9.png" alt="blog 2023.02.08 graphic 9" title="Jak postawić serwer TCP (Transmission Control Protocol) na platformie Azure – krok po kroku 31"></figure></div>


<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Azure Container Instances pozwala na <strong>szybkie uruchamianie skonteneryzowanych aplikacji,</strong> które umożliwia zewnętrzną komunikację po TCP. Niestety, nie jest to rozwiązanie pozbawione wad (przypomnijmy: zmieniające się IP, brak skalowania), które utrudniają skonfigurowanie środowiska i w przypadku prostych aplikacji mogą być powodem do jego odrzucenia.&nbsp;</p>



<p>Na szczęście Azure wyszedł naprzeciw potrzebom użytkowników z nową usługą, jaką jest <strong>Container Apps, </strong>która jest relatywnie <strong>prosta do skonfigurowania i pozbawiona problemów, </strong>na jakie trafimy korzystając z Container Instances. Warto mieć to rozwiązanie na uwadze i śledzić nowe możliwości, jakie zespół developerów chmury Microsoft Azure będzie do niego dodawał.&nbsp;&nbsp;</p>



<p><strong>Przeczytaj także:</strong> <a href="https://nearshore-it.eu/pl/artykuly/big-data-azure/">Big Data w chmurze Azure</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/jak-postawic-serwer-tcp-na-azure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<media:content url="https://www.youtube.com/embed/fDSI_-OCCU8" medium="video" width="1280" height="720">
			<media:player url="https://www.youtube.com/embed/fDSI_-OCCU8" />
			<media:title type="plain">BiteIT #58: Let`s secure your App Service on Azure | Marcin Niesyn</media:title>
			<media:description type="html"><![CDATA[Let`s secure your App Service on AzurePodczas webinaru Marcin poruszy tematy zabezpieczenia aplikacji webowej na platformie Azure przed typowymi atakami zdef...]]></media:description>
			<media:thumbnail url="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.02.08_cover.jpg" />
			<media:rating scheme="urn:simple">nonadult</media:rating>
		</media:content>
	</item>
		<item>
		<title>Wprowadzenie do świata Azure IoT </title>
		<link>https://nearshore-it.eu/pl/artykuly/wprowadzenie-do-swiata-azure-iot/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/wprowadzenie-do-swiata-azure-iot/#respond</comments>
		
		<dc:creator><![CDATA[Bartosz Brandt]]></dc:creator>
		<pubDate>Wed, 18 Jan 2023 09:30:51 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[IoT]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/wprowadzenie-do-swiata-azure-iot/</guid>

					<description><![CDATA[Internet Rzeczy (ang. Internet of Things, w skrócie IoT) – to jedna z wiodących technologii w cyfrowej rewolucji. Właściwie każdy z nas ma z nim do czynienia w codziennym życiu. Dzięki komunikacji urządzeń i sprzętu w sieci, Internet Rzeczy jest obecny w naszej pracy, w domu, w miejscach publicznych, dając nam wiele możliwości w zakresie zbierania, monitorowania danych czy zarządzania inteligentnymi urządzeniami. Dostawcy usług chmurowych udostępniają usługi IoT w przystępnych modelach, dzięki którym developerzy mogą budować systemy Internetu Rzeczy i zarządzać nimi z jednego miejsca. W tym artykule chciałbym zwrócić waszą uwagę na ofertę Microsoftu. Czym jest Azure IoT? Jakie daje możliwości? Jaki jest koszt usług i gdzie zdobyć niezbędną wiedzę? Zapraszam do lektury!]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Spis treści</p>
    <ol>
                    <li><a href="#Czym-jest-Azure-IoT?">1.  Czym jest Azure IoT? </a></li>
                    <li><a href="#Dlaczego-warto-zainteresować-się-tematem-Azure-IoT?">2.  Dlaczego warto zainteresować się tematem Azure IoT? </a></li>
                    <li><a href="#Azure-IoT-Hub">3.  Azure IoT Hub </a></li>
                    <li><a href="#IoT-Edge">4.  IoT Edge  </a></li>
                    <li><a href="#IoT-–-protokoły-komunikacyjne">5.  IoT – protokoły komunikacyjne  </a></li>
                    <li><a href="#Rozwiązania-bezpieczeństwa-Azure-IoT">6.  Rozwiązania bezpieczeństwa Azure IoT  </a></li>
                    <li><a href="#Bezpieczenstwo-IoT">7.  Bezpieczenstwo IoT </a></li>
                    <li><a href="#Najczęściej-zadawane-pytania-(FAQ)">8.  Najczęściej zadawane pytania (FAQ) </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Czym-jest-Azure-IoT?">Czym jest Azure IoT?</h2>



<p>Skrót IoT (ang. Internet of Things) odnosi się do fizycznych urządzeń lub całej ich grupy, które za pomocą różnego rodzaju czujników i sensorów zbierają informacje z otaczającego je świata oraz komunikują się z innymi urządzeniami i systemami, wysyłając im dane za pomocą sieci Internet.</p>



<p><strong>Azure IoT jest kolekcją serwisów udostępnianych w modelu PaaS</strong> <strong>(Platform as a Service) lub SaaS (Software as a Service</strong>) zarządzanych przez firmę Microsoft. Zasoby te mogą służyć do zbierania danych oraz monitorowania i komunikacji pomiędzy milionami różnych fizycznych urządzeń. W najprostszej konfiguracji system IoT oparty o chmurę można zbudować już z jednego urządzenia peryferyjnego, które komunikuje się z wybranym zasobem dostępnym w portfolio Azure IoT.</p>



<p>Poniższa grafika przedstawia dostępne technologie, serwisy oraz rozwiązania z zakresu urządzeń Internet of Things oferowane przez firmę Microsoft. W tym artykule postaram się przybliżyć kluczowe usługi.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://cloudblogs.microsoft.com/industry-blog/en-gb/technetuk/2021/08/10/getting-started-with-azure-iot/" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.01.18_graphic_1.png" alt="Azure IoT" class="wp-image-69352" title="Wprowadzenie do świata Azure IoT  32"></a><figcaption class="wp-element-caption">Rys. 1. Dostępne portfolio produktów Azure IoT, źródło: <a href="https://cloudblogs.microsoft.com/industry-blog/en-gb/technetuk/2021/08/10/getting-started-with-azure-iot/" target="_blank" data-type="URL" data-id="https://cloudblogs.microsoft.com/industry-blog/en-gb/technetuk/2021/08/10/getting-started-with-azure-iot/" rel="noreferrer noopener">Microsoft</a></figcaption></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Dlaczego-warto-zainteresować-się-tematem-Azure-IoT?">Dlaczego warto zainteresować się tematem Azure IoT?</h2>



<p>W obecnych czasach urządzenia IoT obecne są w każdym obszarze naszego życia. Wykorzystujemy je w domach, samochodach, miejscach pracy czy w sektorze przemysłu. Postęp technologii i minimalizacja kosztów produkcji chipów w połączeniu z wszechobecną siecią Internet sprawia, że liczba dostępnych urządzeń wykorzystujących Internet Rzeczy rośnie w zawrotnym tempie. Prognozy przewidują, że będzie ono jeszcze szybsze – w 2023 roku według analityków zaobserwujemy <strong>22-procentowy wzrost,</strong> a w 2025 liczba dostępnych urządzeń IoT wyniesie <strong>27 mld.</strong></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/blog_2023.01.18_graphic_2-1920x1105-1.png" alt="Azure IoT" class="wp-image-69354" title="Wprowadzenie do świata Azure IoT  33"><figcaption class="wp-element-caption">Rys. 2. Dostępne urządzenia IoT wraz z prognozą wzrostu do 2025, źródło: <a href="https://iot-analytics.com/number-connected-iot-devices/" target="_blank" data-type="URL" data-id="https://iot-analytics.com/number-connected-iot-devices/" rel="noreferrer noopener">IoT Analytics</a></figcaption></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Rosnąca liczba dostępnych urządzeń IoT sprawia, że zarządzanie nimi, monitorowanie ich czy zbieranie danych z czujników staje się coraz bardziej problematyczne. Tutaj naprzeciw obecnie stawianym wymaganiom rynku wychodzi platforma Azure, oferując w swojej gamie wiele rozwiązań ułatwiających komunikację z milionami urządzeń peryferyjnych działających w czasie rzeczywistym. Firma Microsoft stara się optymalizować proces wdrażania swoich rozwiązań u klientów tak, aby następował on<strong> szybko i sprawnie, jednocześnie zmniejszając koszt jego wprowadzenia</strong>. Ułatwiają to między innymi udostępniane zestawy narzędzi dla programistów – tzn. SDK (ang. software development kit). Dostępne paczki pozwalają na łatwą obsługę:</p>



<ul class="wp-block-list">
<li>urządzeń IoT w językach oprogramowania .NET, Python, Node.js, Java oraz C.</li>



<li>wbudowanych urządzeń z ograniczonymi zasobami pamięciowymi oraz obliczeniowymi.</li>



<li>serwisami do zarządzania komunikacją z urządzeniami IoT.</li>
</ul>



<p>Szczegółowe informacje o dostępnych pakietach SDK można znaleźć bezpośrednio na <a href="https://learn.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-sdks" target="_blank" data-type="URL" data-id="https://learn.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-sdks" rel="noreferrer noopener">stronie producenta</a>.</p>



<p>Poza samymi zasobami umożliwiającymi komunikację z aparaturą Internetu Rzeczy Azure oferuje narzędzia, które pozwalają w prosty sposób analizować, przetwarzać, przechowywać i wizualizować odbierane dane.</p>



<p>Przeczytaj atykuł: <a href="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/">Kim jest DevOps i jak wspiera projekty IT?</a></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Microsoft, dzięki wachlarzowi swoich usług, pozwala developerom na stworzenie rozwiązania dostosowanego do indywidualnych wymagań stawianych przez klientów. Oferując przy tym prostotę w konfiguracji gotowego do działania środowiska. Poniższy diagram przedstawia, jakie możliwości w składaniu kompozycji zasobów oferuje platforma Azure:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/azure-iot-reference-architecture.png" alt="Azure IoT" class="wp-image-69356" style="width:986px" title="Wprowadzenie do świata Azure IoT  34"><figcaption class="wp-element-caption">Rys. 3. Dostępne rozwiązania IoT na platformie Azure. Źródło: <a href="https://learn.microsoft.com/en-us/azure/architecture/guide/iot/migrate-iot-solution-azure" target="_blank" data-type="URL" data-id="https://learn.microsoft.com/en-us/azure/architecture/guide/iot/migrate-iot-solution-azure" rel="noreferrer noopener">Microsoft</a></figcaption></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Warto dodać, że rozwiązania oparte o zasoby z zakresu Azure IoT pozwalają zapewnić bezpieczne połączenie dla milionów urządzeń.</p>



<h2 class="wp-block-heading" id="Azure-IoT-Hub">Azure IoT Hub</h2>



<p>IoT Hub jest głównym zasobem składającym się na rozwiązania z obszaru Azure IoT. Jest to <strong>usługa udostępniana w modelu PaaS pozwalająca na dwukierunkową komunikację pomiędzy urządzeniami IoT a chmurą.</strong> Za pomocą bezpiecznego połączenia umożliwia obsługę transferu ogromnej liczby danych oraz ciągły monitoring praktycznie dowolnych urządzeń.</p>



<p>IoT Hub wspiera kilka kanałów komunikacyjnych. Są to między innymi:</p>



<p><strong>Dane telemetryczne oraz alerty  </strong></p>



<p>Są to wiadomości wysyłane z urządzenia do chmury (ang.<strong> device-to-cloud</strong>). Po wysłaniu przez aparat tego typu wiadomości trafia ona do wewnętrznej kolejki IoT Hub, gdzie może być przechowywana do 7 dni. Następnie zewnętrzny serwis, np. aplikacja kliencka, za pomocą wbudowanego w IoT Hub punktu końcowego jest w stanie odebrać oczekujące wiadomości. Kanał ten przeznaczony jest szczególnie do obsługi wiadomości wysyłanych z dużą częstotliwością o maksymalnym rozmiarze do 256 KB. Najprostszym sposobem na przesyłanie tego typu wiadomości jest użycie na docelowym urządzeniu wspomnianej wcześniej paczki SDK w preferowanym języku programowania, która udostępnia prosty i czytelny interfejs komunikacyjny.</p>



<p><strong>Wiadomości sterujące urządzeniami</strong></p>



<p>Jest to komunikacja, która w przeciwieństwie do wyżej opisanej służy do przekazywania wiadomości z chmury, np. aplikacji klienckiej, do urządzenia (ang. cloud-to-device). <strong>W tym przypadku zasób IoT Hub również jest pośrednikiem komunikacji i wysyłane wiadomości trafiają w pierwszej kolejności do wspomnianej kolejki</strong>. W zależności od konfiguracji mogą oczekiwać na odebranie przez urządzenie do kilku dni. Jest to szczególnie przydatne w przypadku urządzeń, które nie mają zapewnionego ciągłego dostępu do sieci.</p>



<p><strong>Przesyłanie plików z urządzeń</strong></p>



<p>Kanał ten służy do przekazywania różnego rodzaju plików. Mogą to być np. nagrania wideo czy też – w celu ograniczenia zużywanego transferu – skompresowane paczki zawierające dane telemetryczne.<strong> Przekazywane z urządzenia pliki trafiają bezpośrednio do skonfigurowanego w IoT Hub kontenera na zasobie Azure Blob Storage.</strong></p>



<p><strong>Monitoring konfiguracji oraz stanów urządzeń</strong></p>



<p>Kanał ten został przez inżynierów Azure nazwany <strong>Device Twins</strong>. Służy przede wszystkim do przechowywania metadanych urządzenia w chmurze, monitorowania aktualnego stanu połączenia z urządzeniem i upewniania się, czy np. odbywa się ono przez sieć komórkową, czy Wi-Fi, oraz synchronizowania długotrwałych przepływów, takich jak stan etapów wgrywania nowej wersji dla urządzenia sprzętowego (firmware).</p>



<h2 class="wp-block-heading" id="IoT-Edge">IoT Edge</h2>



<p>Azure IoT Edge jest usługą używaną do wstępnej analizy danych przed ich wysłaniem do powyżej opisanego zasobu IoT Hub. Usługi te przeznaczone są dla klientów, którzy chcą przeprowadzić część agregacji danych bezpośrednio na urządzeniu, zamiast dokonywać ich w chmurze. Poprzez przeniesienie części obliczeń na graniczne urządzenia <strong>(IoT Edge Devices)</strong> można zminimalizować liczbę przesyłanych poprzez sieć danych, co może nieść ze sobą spore oszczędności w przypadku miejsc z trudno dostępną siecią. Dodatkową zaletą takiego rozwiązania może być między innymi możliwość wcześniejszej reakcji na zmianę statusu bądź wykrycie ustawionego limitu na danym parametrze.</p>



<p>Opisywana usługa składa się ze środowiska uruchomieniowego wraz z modułami brzegowymi, które są używane bezpośrednio na urządzeniu. Po stronie chmury znajduje się interfejs służący do zdalnego monitorowania urządzeń i zarządzania nimi przez usługę IoT Edge. </p>



<p>Dodatkowym atutem jest fakt, że <strong>środowisko uruchomieniowe usługi IoT Edge jest całkowicie bezpłatne </strong>i oferowane jako rozwiązanie typu open-source.</p>



<p>Przeczytaj także: <a href="https://nearshore-it.eu/pl/artykuly/azure-devops/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/azure-devops/">Azure DevOps – jak zacząć karierę?</a></p>



<h2 class="wp-block-heading" id="IoT-–-protokoły-komunikacyjne">IoT – protokoły komunikacyjne</h2>



<p>Urządzenia IoT służą przeważnie do zbierania danych z czujników i wysyłają je do backendowych serwisów, które następnie zajmują się ich przetwarzaniem. Opisywany typ urządzeń często posiada cechy takie jak:</p>



<ul class="wp-block-list">
<li>fizyczna lokalizacja w miejscu trudno dostępnym dla człowieka.</li>



<li>ograniczenia w dostępie do sieci Internet.</li>



<li>brak możliwości obsługi przez człowieka (często są to <a href="https://nearshore-it.eu/pl/artykuly/systemy-wbudowane/" target="_blank" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/systemy-wbudowane/" rel="noreferrer noopener">urządzenia wbudowane</a>).</li>



<li>brak graficznego interfejsu użytkownika.</li>



<li>wymaganie specyficznych dla danego przemysłu protokołów.</li>
</ul>



<p>Chcąc na nie odpowiedzieć, firma Microsoft zaleca używanie dedykowanych pakietów SDK ułatwiających rozpoczęcie pracy z aparaturą IoT. Zarówno paczki SDK, jak i sam zasób IoT Hub wspierają popularne protokoły komunikacyjne takie jak:</p>



<ul class="wp-block-list">
<li><strong>MQTT</strong> (Message Queue Telemetry Transport).</li>



<li><strong>MQTT</strong> przez WebSocket.</li>



<li><strong>AMQP </strong>(Advanced Message Queuing Protocol).</li>



<li><strong>AMQP </strong>przez WebSocket.</li>



<li><strong>HTTPS.</strong></li>
</ul>



<h2 class="wp-block-heading" id="Rozwiązania-bezpieczeństwa-Azure-IoT">Rozwiązania bezpieczeństwa Azure IoT</h2>



<p>Internet Rzeczy, prócz nieograniczonych wręcz możliwości, stwarza też wiele zagrożeń. Firmy stają przed nowymi wyzwaniami w zakresie bezpieczeństwa – do tej pory skupiało się ono na oprogramowaniu, a przy IoT dochodzi dodatkowa składowa, jaką jest<strong> połączony z oprogramowaniem świat rzeczywisty.</strong></p>



<p>Aby odpowiednio zdefiniować zagrożenia, konieczne jest ich modelowanie, m.in. za pomocą <a href="https://azure.microsoft.com/pl-pl/products/digital-twins/" data-type="URL" data-id="https://azure.microsoft.com/pl-pl/products/digital-twins/" target="_blank" rel="noreferrer noopener">Azure Digital Twins</a>. Procedura ta składa się z kilku kroków – modelowania aplikacji, zdefiniowania zagrożeń, ich ograniczenia i sprawdzenia wprowadzonych środków zaradczych. Celem jest zrozumienie, w jaki sposób atakujący mogą naruszyć system, i upewnienie się, że wdrożono konieczne zabezpieczenia.</p>



<p>Pozaj również powiązane produkty z portfolio Azure, które pomogą zadbać o bezpieczeństwo, takie jak <a href="https://azure.microsoft.com/pl-pl/overview/iot/security/" target="_blank" rel="noopener">Azure Defender dla IoT, Azure Sentinel czy Azure IoT Central.</a></p>



<h2 class="wp-block-heading" id="Bezpieczenstwo-IoT">Bezpieczeństwo IoT</h2>



<p>O ile urządzenia IoT mogą wydawać się zbyt małe czy wyspecjalizowane, by stanowić zagrożenie, prawdziwym niebezpieczeństwem jest ich powiązanie z siecią i możliwość ataku. Może on doprowadzić do kradzieży danych czy zakłócenia świadczenia usług, ale też wyrządzić szkody fizyczne w obiektach, a nawet stanowić zagrożenie dla obsługujących je lub zależnych od nich ludzi.</p>



<p>Podejmowane ataki można podzielić na 5 głównych obszarów:</p>



<ol class="wp-block-list">
<li><strong>Spoofing</strong> – podszywanie się, gdzie haker może anonimowo manipulować urządzeniem, przejąć je lub częściowo przechwycić przesył i obserwować dane z urządzenia.</li>



<li><strong>Tampering </strong>– manipulowanie urządzeniami, podczas którego atakujący może wymienić oprogramowanie na urządzeniu.</li>



<li><strong>Disclosure </strong>– ujawnianie informacji; gdzie atak polega na podsłuchiwaniu transmisji, przechwytywaniu informacji bez autoryzacji lub zagłuszaniu sygnału i odmowie uzyskania informacji. </li>



<li><strong>Denial of service</strong> – odmowa usługi, np. przez zakłócanie częstotliwości radiowych lub odcięcie przewodów; skutkiem może być niezdolność urządzenia do działania lub komunikacji.</li>



<li><strong>Elevation of privilege</strong> – przechwycenie uprawnień, np. gdy urządzenie wyspecjalizowane do określonych czynności zostaje zmuszone do robienia czegoś innego.</li>
</ol>



<p>Ochrona struktur IoT zakłada kompleksowe podejście z wykorzystaniem odpowiednich technologii i protokołów.</p>



<p>Zaleca się trzystopniowe podejście do ochrony danych, urządzeń i połączeń: </p>



<ol class="wp-block-list">
<li>Bezpieczne udostępnianie urządzeń. </li>



<li>Bezpieczne połączenie między urządzeniami i chmurą.</li>



<li>Zabezpieczenie danych w chmurze podczas przetwarzania i przechowywania.</li>
</ol>



<h2 class="wp-block-heading" id="Najczęściej-zadawane-pytania-(FAQ)">Najczęściej zadawane pytania (FAQ)</h2>


<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1674048687848" class="rank-math-list-item">
<h3 class="rank-math-question ">Czym jest cloud intelligence?</h3>
<div class="rank-math-answer ">

<p>Cloud intelligence jest szeroko pojętym przetwarzaniem danych w chmurze z wykorzystaniem między innymi sztucznej inteligencji oraz uczenia maszynowego. Platforma Azure oferuje wiele zasobów wspierających pracę z inteligentnym przetwarzaniem, co w połączeniu z opisywanymi rozwiązaniami IoT pozwala na zbudowanie ciekawych kompozycji spełniających nawet najbardziej wyszukane wymagania.</p>

</div>
</div>
<div id="faq-question-1674048703303" class="rank-math-list-item">
<h3 class="rank-math-question ">Co jest lepsze: AWS IoT czy Azure IoT?</h3>
<div class="rank-math-answer ">

<p>Która chmura jest lepsza dla  IoT? Nie da się jednoznacznie określić, który dostawca chmurowy jest lepszy dla rozwiązań typu IoT. Obie firmy udostępniają bardzo podobny zakres usług. Każdy projekt jest indywidualny i dopiero znając szczegóły jego specyfikacji, można potwierdzić, która platforma pozwoli je spełnić oraz który dostawca okaże się w danym przypadku tańszy.</p>

</div>
</div>
<div id="faq-question-1674048738503" class="rank-math-list-item">
<h3 class="rank-math-question ">Czy dostęp do Azure IoT jest bezpłatny? / Microsoft Azure IoT – jakie są koszty?</h3>
<div class="rank-math-answer ">

<p>Część z oferowanych przez firmę Microsoft usług pakietu Azure IoT jest bezpłatna, między innymi pakiety paczek SDK czy dostęp do IoT Edge. W przypadku głównego zasobu, jakim jest IoT Hub, koszt jego użycia uzależniony jest od liczby dostępnych wiadomości do przekazania w ciągu doby. u003cstrongu003eIstnieje również darmowy rodzaj, wspierający do 8000 wiadomości na 24 godziny, który w zupełności powinien wystarczyć, aby rozpocząć integrację ze światem Azure IoTu003c/strongu003e. Szczegółowe informacje na temat kosztów można znaleźć bezpośrednio u003ca href=u0022https://azure.microsoft.com/en-us/pricing/details/iot-hub/u0022 target=u0022_blanku0022 rel=u0022noreferrer noopeneru0022u003ew cenniku.u003c/au003e</p>

</div>
</div>
<div id="faq-question-1674048808503" class="rank-math-list-item">
<h3 class="rank-math-question ">Gdzie znajdę potrzebne źródła i dokumentację?</h3>
<div class="rank-math-answer ">

<p>Najlepszym miejscem do szukania dodatkowych informacji oraz aktualnej dokumentacji Azure IoT są oficjalne strony firmy Microsoft. Jest to przede wszystkim cały dział poświęcony u003ca href=u0022https://learn.microsoft.com/en-us/azure/iot-fundamentalsu0022 target=u0022_blanku0022 rel=u0022noreferrer noopeneru0022u003eInternet of Things.u003c/au003e Dokumentacja pakietów SDK wraz z całym kodem dostępna jest w serwisie u003ca href=u0022https://github.com/u0022 target=u0022_blanku0022 rel=u0022noreferrer noopeneru0022u003eGitHubu003c/au003e.</p>

</div>
</div>
<div id="faq-question-1674048837119" class="rank-math-list-item">
<h3 class="rank-math-question ">Jak zdobyć certyfikat Azure IoT?</h3>
<div class="rank-math-answer ">

<p>Aby zostać certyfikowanym developerem Azure IoT, należy zdać egzamin oferowany przez firmę u003ca href=u0022https://learn.microsoft.com/en-us/certifications/exams/az-220u0022 target=u0022_blanku0022 rel=u0022noreferrer noopeneru0022u003eMicrosoft AZ-220u003c/au003e. Więcej informacji o samym egzaminie można znaleźć bezpośrednio na stronie.</p>

</div>
</div>
<div id="faq-question-1674048854487" class="rank-math-list-item">
<h3 class="rank-math-question ">Jak poprawić bezpieczeństwo urządzeń Internetu Rzeczy?</h3>
<div class="rank-math-answer ">

<p>Po pierwsze, należy poznać najbardziej prawdopodobne zagrożenia, niezależnie od tego, czy są one możliwe w cyberprzestrzeni, czy w rzeczywistości.u003cbru003eu003cbru003ePo drugie, należy rozpoznać ryzyka, które niosą ze sobą wspomniane zagrożenia. u003cstrongu003eKluczowe jest przyznanie wysokich priorytetów tym, które najbardziej zagrażają biznesowi.u003c/strongu003eu003cbru003eu003cbru003ePo trzecie, należy wybrać konkretną strategię ochrony IoT, która przyniesie największe korzyści. Warto zaufać ekspertom, którzy w odpowiedni sposób zbadają poziom aktualnych zabezpieczeń i pomogą we wprowadzeniu zmian, kluczowych dla bezpieczeństwa danego środowiska.</p>

</div>
</div>
</div>
</div>


<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/wprowadzenie-do-swiata-azure-iot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DevOps Azure – jak zacząć karierę?</title>
		<link>https://nearshore-it.eu/pl/artykuly/azure-devops/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/azure-devops/#respond</comments>
		
		<dc:creator><![CDATA[Kamil Niewęgłowski]]></dc:creator>
		<pubDate>Wed, 28 Dec 2022 10:30:13 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[DevOps]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/azure-devops/</guid>

					<description><![CDATA[Rola DevOpsa jest jedną z bardziej złożonych i trudniejszych do sprecyzowania w branży IT. Nie chodzi tutaj o technologie, ale o samo określenie zakresu obowiązków – w każdej firmie można znaleźć jakieś różnice w tym obszarze. Przyznam, że początkowo sam miałem problem z określeniem, kim lub czym tak właściwie jest DevOps. Po kilku latach pracy na tym stanowisku mogę z pewnością stwierdzić, że DevOps to nie stanowisko – to kultura pracy, zbiór praktyk, narzędzi i procesów, które są od siebie zależne, a efektem ich stosowania jest dostarczanie skalowalnego, zautomatyzowanego rozwiązania. Czy można się zatem tego nauczyć tak, jak programowania w danym języku? Jak przejść od roli programisty do roli DevOpsa i z jakich źródeł czerpać wiedzę? Postaram się na to pytanie odpowiedzieć na przykładzie chmury Azure, z którą na co dzień pracuję. Zaczynajmy!]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Spis treści</p>
    <ol>
                    <li><a href="#Od-programisty-do-DevOpsa">1.  Od programisty do DevOpsa </a></li>
                    <li><a href="#Błądzenie-w-chmurze-–-czyli-od-czego-zacząć?">2.  Błądzenie w chmurze – czyli od czego zacząć? </a></li>
                    <li><a href="#Narzędzia-DevOps">3.  Narzędzia DevOps </a></li>
                    <li><a href="#Zasoby-–-platforma-Microsoft-Learn">4.  Zasoby – platforma Microsoft Learn </a></li>
                    <li><a href="#A-jak-poznać-proces-DevOps?">5.  A jak poznać proces DevOps? </a></li>
                    <li><a href="#CI/CD-(Continuous-Integration-/-Continuous-Delivery)">6.  CI/CD (Continuous Integration / Continuous Delivery) </a></li>
                    <li><a href="#IaaC-(Infrastructure-as-a-Code)">7.  IaaC (Infrastructure-as-a-Code) </a></li>
                    <li><a href="#Podsumowanie">8.  Podsumowanie </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Od-programisty-do-DevOpsa">Od programisty do DevOpsa</h2>



<p>W przypadku programowania wybierasz język, który wydaje się najbardziej interesujący i dostosowany do tego, co chcesz robić, albo… prosty w nauce. Kiedy poznasz podstawy składni, jedyne, co cię ogranicza, to twoja własna wyobraźnia. Na początku zastanawiasz się: „Co by tu napisać?”. Może kalkulator, może kółko i krzyżyk albo coś bardziej zaawansowanego z obsługą bazy danych lub zewnętrznych bibliotek?</p>



<p>Im więcej zrealizowanych projektów, tym więcej napotkanych wyzwań, a twoje umiejętności rosną z każdą kolejną linią kodu. Czujesz się biegle w składni, korzystasz już z zewnętrznych bibliotek, a na rozmowach o pracę możesz pochwalić się owocem swojej dotychczasowej nauki w postaci działających programów. Na kolejnym etapie zaczynasz obracać się w bardziej zaawansowanych projektach, które wymagają zastosowania i znajomości różnych podejść. Pojawiają się procesy, większy nacisk kładziony jest na jakość kodu, jego elastyczność, a z tym wiąże się nauka wzorców.</p>





<h2 class="wp-block-heading" id="Błądzenie-w-chmurze-–-czyli-od-czego-zacząć?">Błądzenie w chmurze – czyli od czego zacząć?</h2>



<p>A jak to wygląda w przypadku chmury? Zarówno przy programowaniu, jak i tutaj możemy wyróżnić dwa główne etapy nauki. Pierwszym z nich jest<strong> nauka narzędzia </strong>(Azure), a drugim – <strong>wzorców i procesów</strong>. Jest to oczywiście uproszczenie, bo zarówno narzędzia, jak i wzorce można jeszcze precyzyjniej skategoryzować, ale wszystko to zależy od poszczególnych projektów i ich wymagań.</p>



<h2 class="wp-block-heading" id="Narzędzia-DevOps">Usługa Azure DevOps &#8211; narzędzia</h2>



<p>Zaczęliśmy od narzędzi i tutaj wybór może paść na dowolną chmurę: Microsoft Azure, AWS, GCP – to najwięksi obecnie dostawcy na rynku. To, którą chmurę wybierzesz, nie ma wielkiego znaczenia, gdyż oferują one podobne usługi i w większości przypadków rozwiązanie jednej firmy ma swój odpowiednik w rozwiązaniu oferowanym przez inną. </p>



<h2 class="wp-block-heading">Od czego rozpocząć? Czyli &#8222;pakiet startowy&#8221; Azure DevOps</h2>



<p>To, od czego możesz zacząć i co pozwoli ci rozwinąć skrzydła, to poznanie samej chmury i tego, co oferuje. Przykładami takich zasobów, które warto poznać w ramach Azure, mogą być np.:</p>


<div class="special-content-box style-1">
    <div class="box">
                <div class="content">
                                </div>
    </div>
</div>



<p>Nie bez powodu podałem akurat te. Chciałem w ten sposób pokazać, że zasoby, poza realizowanymi przez nie odpowiedzialnościami, są również w pewien sposób od siebie zależne i ze sobą powiązane.</p>



<p>Na powyższym przykładzie możemy to zobrazować tak, że Virtual Machine należy do podsieci zdefiniowanej w Virtual Network, a dostęp do niej zdefiniowany jest poprzez skonfigurowany Network Security Group.</p>





<h2 class="wp-block-heading" id="Zasoby-–-platforma-Microsoft-Learn">Zasoby Azure DevOps – usługa Microsoft Learn&nbsp;</h2>



<p>Kiedy poznasz poszczególne zasoby oferowane przez chmurę, będziesz już mieć świadomość tego, w jakich przypadkach możesz je wykorzystać i jak się ze sobą komunikują. A z pomocą w nauce przyjdzie ci platforma <a href="https://learn.microsoft.com/en-us/" data-type="URL" data-id="https://learn.microsoft.com/en-us/" target="_blank" rel="noreferrer noopener">Microsoft Learn</a>. Ma ona trzy ważne zalety, o których chciałbym wspomnieć.</p>



<h5 class="wp-block-heading">1. Wybór ścieżki&nbsp;</h5>



<p>Po pierwsze, pozwala na wybór ścieżki, w której chcesz się kształcić. Może to być jedna z wielu, np.: </p>


<div class="special-content-box style-1">
    <div class="box">
                <div class="content">
                                </div>
    </div>
</div>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>W zależności od tego, którą ścieżkę obierzesz, będziesz mieć dostęp do modułów, które zapoznają cię z poszczególnymi zagadnieniami potrzebnymi w pracy na danym stanowisku. Zaletą takiego rozwiązania jest to, że nie musisz się zastanawiać, na czym spośród wielu możliwości się skupić, i możesz od razu zająć się zagadnieniami, które są ze sobą powiązane. Poznasz w ten sposób również charakter pracy w danej roli, dowiesz, czy jest to praca bardziej administracyjna, koncepcyjna lub developerska.</p>





<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<h5 class="wp-block-heading"><strong>   2. Certyfikacja&nbsp;</strong></h5>



<p>Po drugie – certyfikacja. Microsoft w zakresie wszystkich swoich rozwiązań oferuje ścieżkę certyfikacji. Nie jest ona darmowa, nie jest też prosta, a w wielu przypadkach wręcz można na niej pobłądzić. Jest to jednak<strong> najbardziej rozpoznawalne i uznawane potwierdzenie umiejętności na rynku pracy w zakresie technologii oferowanych przez Microsoft.</strong></p>



<p>Jeżeli zależy ci na udokumentowaniu swojej wiedzy i umiejętności, możesz skorzystać z modułów, które przygotują cię do wybranego przez siebie certyfikatu, co na pewno ułatwi szukanie pracodawcy. Warto jest się dobrze zapoznać z dostępnymi ścieżkami certyfikacji i dowiedzieć, jaka wiedza jest sprawdzana na poszczególnych egzaminach. Na każdą ze ścieżek składa się kilka egzaminów o różnym zakresie i podziale tematycznym. W przypadku typowego DevOpsa w chmurze<strong> Azure (DevOps Engineer)</strong> polecam skupić się na<a href="https://learn.microsoft.com/en-us/certifications/azure-fundamentals/" target="_blank" data-type="URL" data-id="https://learn.microsoft.com/en-us/certifications/azure-fundamentals/" rel="noreferrer noopener"> AZ-900 Microsoft Azure Fundamentals</a>. Certyfikat ten zapozna cię z koncepcją chmury oraz dostępnymi zasobami w Azure na podstawowym poziomie. Dalej możesz już obrać jedną z bardziej zaawansowanych ścieżek w zależności od tego, co cię interesuje. Wszystkie certyfikaty wraz z opisami dostępne są <a href="https://learn.microsoft.com/en-us/certifications/browse/?products=azure" target="_blank" data-type="URL" data-id="https://learn.microsoft.com/en-us/certifications/browse/?products=azure" rel="noreferrer noopener">na oficjalnej stronie Microsoftu.</a></p>



<h5 class="wp-block-heading"><strong>   3.  Ćwiczenie umiejętności&nbsp;&nbsp;</strong></h5>



<p>Trzecią zaletą tej platformy jest jej funkcjonalność. Wszystkie moduły są pogrupowane w poszczególne kategorie ze względu na technologię lub certyfikację, którą wybierzesz. Dodatkowo twoja aktywność jest na bieżąco śledzona i zapisywana, dzięki czemu wiesz, które materiały już przerobiłeś. Bardzo często na końcu każdego modułu lub ważnego zagadnienia umieszczane są linki do dodatkowych zasobów, które pozwolą ci pogłębić wiedzę odnośnie opisywanych zagadnień. Nie są one wymagane, ale na pewno pozwalają zdobyć bardziej szczegółowe pojęcie o zasobach i poznać możliwości, jakie oferują.</p>



<p>Oprócz lekcji w formie tekstowej pojawiają się również laboratoria. Są one zintegrowane ze stroną i można w prosty sposób poćwiczyć tworzenie i konfigurowanie zasobów tak, jak byśmy to robili w codziennej pracy.</p>



<h2 class="wp-block-heading" id="A-jak-poznać-proces-DevOps?">A jak poznać proces DevOps?</h2>



<p>Chmurę, na przykładzie Azure, można zatem poznać w dość przystępnej formie, którą opisałem powyżej. Inaczej sytuacja wygląda natomiast z samym procesem DevOps. Niestety w tym przypadku, chyba w każdej firmie trafimy na odstępstwa od modelowych procesów i trudno szukać miejsca, gdzie wszystko byłoby idealne. Warto jest zatem mieć ogólne pojęcie o tym, jak powinny przebiegać poszczególne procesy, jakie dają nam realne korzyści oraz kiedy powinniśmy je stosować.</p>



<p>Reszta zależy już od wielu składowych, takich jak: <strong>specyfika projektu, oczekiwania klienta, budżet, zaangażowanie i wiedza zespołów ze sobą współpracujących, a nawet narzędzia, których używają.</strong></p>



<h2 class="wp-block-heading">Jak wdrażać projekty? Pomocne wzorce</h2>



<p>Z pomocą przyjdą nam wzorce, czyli podobnie jak w programowaniu, szablony, które stosujemy i które w czysty, zorganizowany sposób pozwalają nam budować strukturę projektu, który będzie elastyczny i reużywalny. O jakich zatem wzorcach / praktykach mowa?</p>



<ol class="wp-block-list">
<li><strong>CI/CD</strong></li>



<li><strong>IaaC</strong></li>
</ol>



<p>Wymieniłem właśnie te, ponieważ<strong> uważam je za najważniejsze i podstawowe </strong>– bez nich żadna infrastruktura nie powinna funkcjonować. Jest ich oczywiście znacznie więcej, np.: SecOps, monitoring, konteneryzacja, orkiestracja, ale moim zdaniem są to bardziej złożone procesy wynikające z przyjętej technologii oraz specyfiki projektu. Przyjrzyjmy się zatem nieco bliżej dwóm wybranym przeze mnie wzorcom.]</p>



<h2 class="wp-block-heading" id="CI/CD-(Continuous-Integration-/-Continuous-Delivery)">CI/CD (Continuous Integration / Continuous Delivery)</h2>



<p><strong>CI/CD (Continuous Integration / Continuous Delivery)</strong> – to szablon przepływu procesów w projekcie od momentu zaplanowania, przez wdrożenie, ciągłe utrzymywanie i monitorowanie. CI/CD to esencja kultury DevOps i warto go poznać, aby zrozumieć, jakie niesie ze sobą korzyści. Do jego składowych należą procesy:</p>



<ul class="wp-block-list">
<li>Plan</li>



<li>Code</li>



<li>Build</li>



<li>Test</li>



<li>Release</li>



<li>Deploy</li>



<li>Operate</li>



<li>Monitor</li>
</ul>



<p>Na każdy z nich można poświęcić jeden artykuł, dlatego zachęcam do skupienia się na tym wzorcu, który niewątpliwie stanowić będzie solidny fundament w rozwoju jako DevOps.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.12.28_graphic_2.png" alt=" class=" class="wp-image-69148" title="DevOps Azure – jak zacząć karierę? 35"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="IaaC-(Infrastructure-as-a-Code)">IaaC (Infrastructure-as-a-Code)</h2>



<p><strong>IaaC (Infrastructure-as-a-Code)</strong> – czyli infrastruktura jako kod, jest to wzorzec, dzięki któremu jesteśmy w stanie budować skalowalną infrastrukturę w sposób zautomatyzowany. Istnieje wiele podejść do tego tematu. Dostawcy zasobów chmurowych oferują swoje rozwiązania, ale istnieją również na rynku narzędzia firm zewnętrznych. Możemy wyróżnić tutaj podejście deklaratywne, jak i imperatywne – oba są mniej lub bardziej świadomie stosowane. Warto zatem zapoznać się z różnicami między nimi (poruszę ten temat w kolejnym artykule) oraz z dostępnymi na rynku narzędziami do tworzenia IaaC, takimi jak:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile" style="grid-template-columns:auto 84%"><div class="wp-block-media-text__content">
<ul class="wp-block-list">
<li>Bicep</li>



<li>Terraform</li>



<li>Ansible</li>



<li>Pulumi</li>



<li>Chef</li>
</ul>
</div><figure class="wp-block-media-text__media"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.12.28_graphic_1.png" alt="devops" class="wp-image-69146 size-full" title="DevOps Azure – jak zacząć karierę? 36"></figure></div>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>W przypadku platformy Azure, <a href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview?tabs=bicep" target="_blank" data-type="URL" data-id="https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/overview?tabs=bicep" rel="noreferrer noopener">Bicep </a>jest dedykowanym językiem do pisania deklaratywnego kodu infrastruktury. Nie zastosujemy go w przypadku innych chmur (np. AWS czy GCP). Jeżeli zależy ci zatem na narzędziu opisującym infrastrukturę deklaratywnie i ze wsparciem dla pozostałych rozwiązań chmurowych, to polecam <a href="https://www.terraform.io/" target="_blank" data-type="URL" data-id="https://www.terraform.io/" rel="noreferrer noopener">Terraform</a>.</p>



<h2 class="wp-block-heading" id="Podsumowanie">Metodyki DevOps &#8211; podsumowanie</h2>



<p>W dobie zwinnego rozwoju oprogramowania i coraz szybszej transformacji cyfrowej już nikt nie kwestionuje potrzeby posiadania w zespole specjalisty, który może nie tylko budować aplikacje w chmurze, ale też je wdrażać. <strong>Warto zainteresować się kulturą DevOps – dla wielu programistów jest to naturalna droga rozwoju.</strong></p>



<p>Mam nadzieję, że po lekturze tego artykułu łatwiej będzie ci zrobić pierwszy krok w stronę rozwoju jako Azure DevOps. Jak widać powyżej, rola ta jest złożona i wymaga cierpliwości, ale jak to w życiu bywa, na wszystko potrzeba czasu. Powodzenia!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/azure-devops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Big Data w chmurze Azure </title>
		<link>https://nearshore-it.eu/pl/artykuly/big-data-azure/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/big-data-azure/#respond</comments>
		
		<dc:creator><![CDATA[Sebastian Stefanowski]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 10:28:20 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[NoSQL]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/big-data-azure/</guid>

					<description><![CDATA[W ostatnich 5 latach Microsoft rozwinął, i to znacznie, portfolio usług przetwarzania danych na platformie chmurowej Azure. Jako Inetum Polska mieliśmy okazję obserwować ten rozwój z bliska – jeden z naszych największych klientów z branży aerospace zdecydował się budować nową generację swojego systemu w oparciu o platformę Azure. Rozwijając ten system na przestrzeni lat, zbudowaliśmy unikalne doświadczenie w tym zakresie. Oczywiście, nie jest możliwe nawet pobieżne opisanie usług Azure'a w jednym artykule, ale postaram się tutaj skupić na najciekawszych elementach i usługach tej platformy w kontekście wzorcowej architektury Big Data.]]></description>
										<content:encoded><![CDATA[
<p></p>



<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Big-Data-w-chmurze-dla-każdego?">1.  Big Data w chmurze dla każdego?  </a></li>
                    <li><a href="#Ekosystem-Azure'a-a-architektura-Big-Data">2.  Ekosystem Azure&#8217;a a architektura Big Data </a></li>
                    <li><a href="#Usługi-składowania-danych-(bez-limitu)">3.  Usługi składowania danych (bez limitu) </a></li>
                    <li><a href="#Azure-Stream-Analytics-(AStA)-–-przetwarzanie-strumieniowe-PaaS">4.  Azure Stream Analytics (AStA) – przetwarzanie strumieniowe PaaS </a></li>
                    <li><a href="#Azure-Synapse-Analitics-i-Azure-Databricks-–-pojedynek-gigantów">5.  Azure Synapse Analitics i Azure Databricks – pojedynek gigantów </a></li>
                    <li><a href="#Azure-Synapse-Analytics-–-hurtownia-Big-Data">6.  Azure Synapse Analytics – hurtownia Big Data</a></li>
                    <li><a href="#Azure-Databricks-–-architektura-Lakehouse">7.  Azure Databricks – architektura Lakehouse </a></li>
                    <li><a href="#Cloud-przyszłością-Big-Data">8.  Cloud przyszłością Big Data  </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Big-Data-w-chmurze-dla-każdego?">Big Data w chmurze dla każdego?&nbsp;&nbsp;</h2>



<p>Termin <strong>„Big Data” </strong>oryginalnie został stworzony ponad 30 lat temu, ale jak wszystko w IT, w ciągu 3 dekad ewoluował i rozwijał się, towarzysząc ekspansji Internetu i źródeł informacji. Do niedawna był to termin opisujący systemy, na które mogły sobie pozwolić jedynie wielkie korporacje i wiodące startupy z dużym finansowaniem – wymagało to wszak wielkich nakładów kapitałowych na rozproszone klastry utrzymujące infrastrukturę Big Data. Nic dziwnego, że na wyłuskiwaniu informacji w wielkiej skali zbudowały swoją potęgę takie korporacje jak Google czy Facebook. Liderzy obserwujący, co się dzieje na rynku, nie mogli zaprzeczyć, że zbieranie i analiza dużych zbiorów danych może dać wymierne korzyści biznesowe.&nbsp;&nbsp;</p>



<p>Chęć zbudowania nowej wartości w oparciu o wielkoskalową analizę danych rosła, ale brak było odpowiednich narzędzi, aby sprawdzić potencjał drzemiący w danych, jednocześnie zachowując rozsądne koszty (np. w modelu <strong><em>try-before-buy</em></strong>). Na tę potrzebę odpowiedzieli dostawcy platform chmurowych, oferując w ostatnich latach ogromną ilość usług zorientowanych na przetwarzanie danych – niektóre wprost w <strong>modelu PaaS</strong> (Platform-as-Service). W wyniku tego możemy zaobserwować eksplozję popularności systemów chmurowych Big Data. Po prostu dzisiaj już każdego stać na to, żeby spróbować wycisnąć ze swoich wielkich zbiorów danych maksimum informacji i… wartości.&nbsp;&nbsp;</p>



<p><a href="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/">Przeczytaj także:<strong> Kim jest DevOps?</strong></a></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Ekosystem-Azure'a-a-architektura-Big-Data">Ekosystem Azure&#8217;a a architektura Big Data&nbsp;</h2>



<p>Na przestrzeni kilkunastu lat ugruntowały się dwa podstawowe modele wysokopoziomowej architektury Big Data – Lambda i Kappa. Model Lambda może uchodzić za fundamentalny. W jego skład wchodzą:&nbsp;</p>



<ul class="wp-block-list">
<li>Magazyny danych (ang. <em>Stores</em>).&nbsp;</li>



<li>Systemy przetwarzania wsadowego (ang. <em>Batch Layer</em>).&nbsp;</li>



<li>Systemy przetwarzania strumieniowego – w czasie zbliżonym do rzeczywistego (ang. <em>Speed Layer</em>, <em>Near-Realitme – Stream Processing Systems</em>).&nbsp;</li>



<li>Magazyny udostępniające dane i wyniki analiz (ang. <em>Serving Layer</em>).&nbsp;<br><br></li>
</ul>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_1.png" alt="Azure big data analytics " class="wp-image-67853" title="Big Data w chmurze Azure  37"><figcaption class="wp-element-caption">Źródło: materiały własne autora</figcaption></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>W modelu Lambda oba systemy przetwarzania danych są niezależne i równoległe. W międzyczasie powstała koncepcja architektury Kappa, w której model przetwarzania strumieniowego jest podstawowym elementem, a model przetwarzania wsadowego jest niejako procesem potomnym. Jest to model prostszy, ale bardziej wyspecjalizowany – odpowiedni w przypadku, gdy głównymi źródłami danych są dane napływające w czasie rzeczywistym (np. logi, tweety / wiadomości, komunikaty z urządzeń IoT).&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Usługi-składowania-danych-(bez-limitu)">Usługi składowania danych (bez limitu)&nbsp;</h2>



<p>Centralnym elementem każdego systemu Big Data są magazyny danych. W nich przechowujemy ogromne ilości surowych (nieprzetworzonych) danych, które zebraliśmy ze źródeł, ale także zbiory „potomne” powstałe w procesie transformacji, korelacji i analizy danych źródłowych. Azure umożliwia przechowywanie danych w dwóch typach magazynów: <strong>Azure Storage (AS) i Azure Data Lake Storage (ADLS). </strong>W przypadku obu usług rozliczani jesteśmy za rozmiar składowanych danych i operacje na nich wykonane (podstawowe: zapis i odczyt oraz inne). Magazyn Azure Storage oprócz możliwości składowania dużych plików (Blob) ma też „wbudowane” dodatkowe usługi:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Files </strong>– serwer plików udostępniający pliki z wykorzystaniem protokołu SMB.&nbsp;&nbsp;</li>



<li><strong>Tables </strong>– <a href="https://nearshore-it.eu/pl/artykuly/nosql-vs-sql-bazy-danych" data-type="jpro" data-id="62738">Baza NoSQL</a> działająca na zasadzie Klucz / Wartość (<em>Key / Value</em>).&nbsp;&nbsp;</li>



<li><strong>Queues </strong>– prosty system kolejkowy wymiany danych.&nbsp;&nbsp;</li>
</ul>



<p>Ponieważ każda z tych „dodatkowych” usług może łatwo zostać zastąpiona przez dedykowaną usługę Azure, to ciągle podstawową funkcją AS i ADLS jest składowanie dużych zbiorów danych.&nbsp;&nbsp;</p>



<p>Przyjrzyjmy się im bardziej szczegółowo:&nbsp;</p>



<h3 class="wp-block-heading">Azure Blob Storage (ABS)&nbsp;&nbsp;</h3>



<p>ABS pojawił się na Azure kilka lat temu. Jego podstawowe cechy to:&nbsp;</p>



<ul class="wp-block-list">
<li>Składowanie danych bez limitu (standardowy limit – który jednak można usunąć – to ponad 5 PB).&nbsp;&nbsp;</li>



<li>Limit dla pojedynczego pliku danych (blob) to 4,7 TB.&nbsp;&nbsp;</li>



<li>Występuje w dwóch podstawowych rodzajach (ang. <em>Tiers</em>) Standard i Premium (Premium jest lepiej przystosowany do obsługi plików o mniejszych rozmiarach).&nbsp;</li>



<li>Umożliwia składowanie w kilku warstwach (ang. <em>Access Tiers</em>) – Premium, Hot, Cool, Archive różniących się ceną, wydajnością i kosztem operacji – im „zimniejsza” warstwa, tym tańsze składowanie (przestrzeń), ale wolniejsze i droższe są operacje dostępu do danych.&nbsp;</li>
</ul>



<h3 class="wp-block-heading">Azure Data Lake Storage (ADLS)&nbsp;</h3>



<p>Usługa ADLS została zbudowana jako rozszerzenie ABS, umożliwiając składowanie danych w hierarchicznym systemie plików (ang. <em>Hierarchical Namespace</em>) – ABS składuje bowiem bloby w prostym systemie plików, opartym na słowniku Klucz / Wartość (ang. <em>Flat Namespace</em>). Użycie hierarchicznego systemu plików to niewątpliwie udogodnienie, co można zaobserwować przy atomowych operacjach dotyczących dużej liczby blobów, jak np. przeniesienie w inne miejsce. ADLS z takim systemem plików jest też bardziej wydajny, ale są dwa punkty, w których przegrywa ze starszą usługą:&nbsp;</p>



<ol class="wp-block-list">
<li>Jest trochę droższy w zakresie koszów operacji na danych.&nbsp;&nbsp;</li>



<li>Ma nieznacznie ograniczone możliwości, jeżeli chodzi o zabezpieczenie przed wszelkiego rodzaju katastrofami – magazyn ADLS może mieć redundantną kopię w innym rejonie świata, ale przełączenie na kopię może być uruchomione jedynie przez Microsoft, gdy zorientuje się, że coś nie działa. W przypadku starszej usługi ASB kopię może przełączyć sam użytkownik z poziomu portalu Azure&#8217;a. Niby to drobnostka, ale w przypadku systemów krytycznych dla biznesu może mieć znaczenie.&nbsp;</li>
</ol>



<h2 class="wp-block-heading" id="Azure-Stream-Analytics-(AStA)-–-przetwarzanie-strumieniowe-PaaS">Azure Stream Analytics (AStA) – przetwarzanie strumieniowe PaaS&nbsp;</h2>



<p>Jedną z ciekawszych usług przetwarzania danych udostępnionych przez Microsoft na platformie Azure jest Azure Stream Analytics (na potrzeby tego artykułu będę posługiwał się skrótem<strong> AStA</strong>, dla odróżnienia od <strong>ASA – Azure Storage Account i Azure Sunapse Analytics)</strong>. Jako że jest to usługa strumieniowego przetwarzania danych udostępniona w modelu PaaS, nie dotkniemy tu „serwerów” ani nie wybierzemy rozmiaru pamięci naszego silnika przetwarzania danych. Prawie wszystkie parametry skali przetwarzania sprowadzają się do przypisania do zadania magicznego czynnika Streaming Units (SU). <strong>Większe ilości SU przyznają więcej mocy procesora, pamięci do zadania, a także przy większych ilościach SU – większą liczbę instancji przetwarzających strumień danych równolegle. </strong>Zadania AStA mogą być wykonywane na wirtualnych klastrach współdzielonych z innymi klientami Microsoftu (multi-tenant), jak również na izolowanym i dedykowanym klastrze (usługa Azure Stream Analytics Cluster) z zastrzeżeniem, że dedykowany klaster nie może alokować mniej jednostek niż 36 SU<strong> (oznacza to większy koszt startowy).&nbsp;</strong></p>



<p>AStA oferuje ciekawy sposób oprogramowania zadań przetwarzania strumieniowego. Zadania tworzy się tu w formie kwerendy (lub zestawu kwerend) z użyciem konkretnego rozszerzenia, języka T-SQL. Innymi słowy – kod zadania ASA wygląda jak SQL, z zastrzeżeniem, że niektóre „wirtualne tabele” z których ASA czyta i do których pisze, to w rzeczywistości źródła danych strumieniowych (zwykle kolejki) i zbiory wyjściowe (tu mamy pełną gamę możliwości zapisywania wyników do kolejek wyjściowych, zbiorów na Azure Storage, baz SQL i NoSQL, hurtowni czy systemu BI). Trudno się oprzeć wrażeniu, że jest to rozwiązanie odzwierciedlające możliwości platformy open-source zaproponowanej przez Confluent.io i opartej na <a href="http://jcommerce.local/kariera/biteit/biteit-60-apache-kafka-jako-rozproszony-system-strumieniowego-przesylania" data-type="bite-it" data-id="51984" target="_blank" rel="noopener">systemie Kafka</a> i języku KSQL.&nbsp;</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_2.png" alt="Azure big data analytics " class="wp-image-67857" title="Big Data w chmurze Azure  38"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jako że podstawą analizy strumieniowej jest analiza kontekstowa wymiarze czasu, to język T-SQL usługi ASA został wyposażony w specjalne funkcje pozwalające agregować wyniki kwerendy po kluczach i w odpowiednich interwałach czasowych (agregaty per okno czasowe). Mamy tutaj takie możliwości jak:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Tumbling Window </strong>– stała agregacja jedynie po czasie – podsumowanie i generowanie wyników następuje zawsze po określonej liczbie sekund (periodycznie).&nbsp;</li>



<li><strong>Hoping Window</strong> – stała agregacja po czasie z przesunięciem – okna czasowe, w których obliczane są wyniki, mogą na siebie zachodzić, okno następne może się zacząć przed zakończeniem poprzedniego.&nbsp;</li>



<li><strong>Sliding Window </strong>– dynamiczna agregacja po czasie z oknami czasowymi stałej długości – ale granice okien czasowych są wyznaczane przez kolejne rekordy pojawiające się na wejściu – okna czasowe zatem zaczynają się i kończą w nieustalonych z góry momentach.&nbsp;</li>



<li><strong>Session Window</strong> – dynamiczna agregacja po czasie z oknami czasowymi różnej długości – okno czasowe jest wydłużane (sesja), jeżeli wybrane rekordy pojawiają się odpowiednio często.&nbsp;</li>
</ul>



<p>Innymi ciekawymi rozszerzeniami T-SQL na użytek ASA są funkcje geolokacyjne (ang. <em>Geospatial Functions</em>) oraz natywne możliwości czytania rekordów wejściowych, które są zakodowane w postaci obiektów najczęściej transportowanych wielkoskalowymi kolejkami AVRO i JSON. Jeżeli ktokolwiek chce szybko zbudować w Azure system strumieniowy, to z pewnością użycie AStA jest jednym z pomysłów, które warto rozważyć.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Azure-Synapse-Analitics-i-Azure-Databricks-–-pojedynek-gigantów">Azure Synapse Analitics i Azure Databricks – pojedynek gigantów&nbsp;</h2>



<p>W ostatnim czasie podstawowym frameworkiem do analizy zbiorów Big Data stał się Spark. Jego niezaprzeczalne walory oparte na rozproszonym przetwarzaniu z użyciem samej tylko pamięci zostały docenione przez całą rzeszę użytkowników na świecie. Konsekwencją tej popularności jest pojawienie się Databricks – komercyjnej platformy początkowo zorientowanej na to redukowanie niedogodności związanych z zarządzaniem klastrami Sparka (Managed-Spark). W odpowiedzi na popularność Databricks Microsoft przygotował swoją wersję platformy analitycznej Big Data. Oba rozwiązania konkurują ze sobą, starając się sprostać wymaganiom nowoczesnych systemów Big Data – każdy w trochę innym modelu.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Azure-Synapse-Analytics-–-hurtownia-Big-Data">Azure Synapse Analytics – hurtownia Big Data&nbsp;</h2>



<p>Azure Synapse Analytics wspiera bodaj najpopularniejszy model organizacji danych w nowoczesnych systemach danych. Wszystko zostało pomyślane w taki sposób, aby wspierać architekturę danych nazywaną kiedyś Two-Tier Data – zakładająca współistnienie dwóch równoległych głównych magazynów danych:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>DataLake</strong> – jako magazynu przechowującego dane nieustrukturyzowane oraz wstępnie przetworzone&nbsp;&nbsp;</li>



<li><strong>Hurtowni danych </strong>– jako źródła dla <a href="https://nearshore-it.eu/pl/artykuly/system-business-intelligence-narzedzie-do-precyzyjnego-zarzadzania" data-type="jpro" data-id="53275">systemów BI.&nbsp;</a></li>
</ul>



<p>Ten dwutorowy model powstał, gdy zorientowano się, że nie istnieje jedno rozwiązanie odpowiadające potrzebom wszystkich popularnych przypadków użycia danych. Hurtownie są znacznie wygodniejsze jako źródła danych dla systemów opartych na SQL (w tym BI), ale dużo mniej wygodne, jeżeli chodzi o eksplorację danych (<a href="https://nearshore-it.eu/pl/artykuly/ai-machine-learning-i-big-data-czym-sa-i-co-dalej" data-type="jpro" data-id="53773">Data Science</a>) oraz źródło danych do trenowania modeli sztucznej inteligencji (Machine Learning). Stąd pomysł, aby w systemie obydwa te byty istniały równolegle.&nbsp;</p>



<p></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_3.png" alt="Microsoft Azure data lake " class="wp-image-67861" title="Big Data w chmurze Azure  39"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Azure Synapse Analytics w pełni implementuje ten model. Centralnym elementem platformy jest tandem – wysoce skalowalna chmurowa hurtownia danych Azure Synapse DWH (<em>Built-in pool</em>) oraz środowisko zarządzalnych klastrów Spark do analiz danych w Data Lake. To jednak jeszcze nie wszystko. Pod jednym dachem Microsoft umieścił dodatkowe usługi przetwarzania danych.&nbsp;&nbsp;</p>



<p>Znajdziemy tu zintegrowane:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Data Factory </strong>– usługa integracji danych.&nbsp;</li>



<li><strong>Serverless SQL Pools</strong> – system serwerów SQL on-demand – gdzie użytkownik płaci jedynie za czas i zasoby zużyte do wykonania zapytania, bez ponoszenia kosztów serwera czy maszyny wirtualnej.&nbsp;</li>



<li><strong>Data Explorer</strong> – usługa analizy danych.&nbsp;</li>
</ul>



<p>Każdą z tych usług można oprogramować w ich natywnym języku (SQL, KustoQL, Python, Scala, a nawet C#).&nbsp;</p>



<p>Do dyspozycji mamy więc o wiele więcej niż prosty system hurtownia +&nbsp;Data Lake. Zyskujemy scentralizowaną platformę udostępniającą wszystko, co najlepsze pod dachem Microsoftu do analizy danych. Brawo za pomysł!&nbsp;</p>



<h2 class="wp-block-heading" id="Azure-Databricks-–-architektura-Lakehouse">Azure Databricks – architektura Lakehouse&nbsp;</h2>



<p><a href="https://azure.microsoft.com/en-us/services/databricks/" target="_blank" rel="noopener">Azure Databricks j</a>ako bezpośrednia konkurencja Azure Synapse Analytics realizuje trochę inny model. Ta strategia wynika z faktu, że Databricks powstał jako środowisko do łatwego zastosowania Sparka i koncepcja silnika Big Data jako centralnego elementu pozostała tu silnie zakorzeniona. W ciągu dwóch ostatnich lat Databricks zorientował się jednak, że sam Spark nie wystarczy. Wraz ze swoimi partnerami rozbudował platformę o dodatkowe funkcjonalności prowadzące do powstania kompletnie nowego modelu platformy danych – <strong>Lakehouse Architecture</strong>.&nbsp;&nbsp;</p>



<p>Koncepcja Lakehouse w skrócie bazuje na tym, że platforma ciągle polega na danych umieszczonych w Data Lake, ale udostępnia większość funkcjonalności dostępnych dotychczas tylko w hurtowniach:&nbsp;</p>



<ol id="block-f787f919-8dd8-4002-be92-eda2a76d28b1" class="wp-block-list">
<li>Transakcyjność – model ACID dla (niektórych) zbiorów Big Data.</li>



<li>Wsparcie wysoce wydajnego silnika zapytań SQL.</li>



<li>Mechanizmy kontroli dostępu do danych w Data Lake (Data Governance).</li>



<li>Wsparcie importu danych i orkiestracje ETL.</li>
</ol>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_4.png" alt="Big data - możliwości przetwarzania danych platformy Azure" class="wp-image-67837" title="Big Data w chmurze Azure  40"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Model Lakehouse to naprawdę mała rewolucja. Zapewne nie będzie on aż tak wydajny jak model typu <a href="https://nearshore-it.eu/pl/artykuly/ewolucja-technik-modelowania-hurtowni-danych" data-type="jpro" data-id="53515">StarSchema</a> w dobrej hurtowni danych, ale koncepcja Lakehouse opiera się na paradygmacie taniego składowania dużych zbiorów danych. Stąd Databricks zakłada, że skoro składowanie danych jest tanie, mogą być one przechowywane i organizowane w redundantnych kopiach (tabelach) skierowanych pod konkretne zastosowania – przy jednoczesnym założeniu, że dane są klasyfikowane w ich zaawansowaniu (koncepcja klas tabel Bronze-Silver-Gold).&nbsp;&nbsp;</p>



<p>Patrząc z boku, Databricks zbliża się do koncepcji reprezentowanych przez innych konkurentów, np. do platformy Vertica z podobnym redundantnym i specjalizowanym modelem tabel.&nbsp;</p>



<h3 class="wp-block-heading">DeltaLake – transakcyjność Big Data&nbsp;</h3>



<p>Idea Lakehouse nie byłaby kompletna bez wspierania koncepcji transakcyjności. Oczywiście transakcyjności nie da się łatwo zaimplementować dla surowych i nieustrukturyzowanych danych, ale dla danych przetworzonych można się już o to pokusić. Do realizacji tego celu Databricks i partnerzy (Delta.io) zaproponowali nowy format zapisu tabel „zarządzanych” o nazwie „Delta”. Delta to rozszerzenie koncepcji tabel opartych na formacie Parquet, czyli kolumnowym formacie plikowym. </p>


<div class="wp-block-image">
<figure class="alignright size-full is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_5.png" alt="Batch processing using azure" class="wp-image-67841" style="width:375px;height:125px" title="Big Data w chmurze Azure  41"></figure></div>


<p>Delta zakłada, że obraz „tabeli” reprezentowanej przez zestaw plików w magazynie nie opiera się na prostej sumie wszystkich rekordów ze wszystkich plików danych. Obok plików z danymi Delta utrzymuje tzw. Delta-Log, czyli zestaw plików opisujący transakcje na zbiorze. Innymi słowy, przy zmianie zawartości tabeli w magazynie pojawiają się nowe wersje starych plików ze zmienionymi danymi, a informacja o zakończonej transakcji (o tym, że nowy plik jest ważniejszy niż stary) jest zapisywana w Delta-Logu. Ponieważ w tym samym momencie w zbiorach plików występują pliki z danymi z różnych okresów, w Delta-Logu przechowywane jest ich wersjonowanie. Dzięki tej prostej koncepcji tabele Delta mają cechy ACID, a przy tym… możliwa jest podróż w czasie, tzn. można poprosić o obraz tabeli z pewnego momentu w przeszłości. Oczywiście w dowolnym momencie możemy wyczyścić tabelę z plików / rekordów historycznych, co spowoduje zmniejszenie jej wielkości w magazynie danych.&nbsp;</p>



<h3 class="wp-block-heading">SQL Warehouse – SQL w służbie Big Data&nbsp;</h3>



<p>Natywnym językiem wielu rozwiązań klasy BI pozostaje SQL. Z tego powodu koncepcja Lakehouse musi uwzględniać jak najszersze wsparcie dla tego języka. Oczywiście podstawowa wersja silnika Sparka zawiera wbudowany „Spark SQL”, ale jego użyteczność była trochę ograniczona. W celu poprawienia tej sytuacji Databricks zaproponował nowy rodzaj silnika zapytań o nazwie Photon oraz nowy typ klastrów dla zapytań SQL – <strong>SQL Warehouses</strong> (albo SQL endpoints). Ze względu na to, że nowy silnik zapytań wykorzystuje mocno cache klastry SQL Warehouse trzeba opierać się na trochę mocniejszych maszynach <strong>(w Azure to Standard_E8ds_v4, czyli 8 vCore&#8217;ów i 64 GB pamięci). </strong>Zwiększony koszt pozostaje jednak pod kontrolą, ponieważ działają na nich wszystkie dotychczasowe mechanizmy autoskalowania w górę i w dół, aż do osiągnięcia limitów określonych przez administratora.&nbsp;&nbsp;</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_6.png" alt="Azure Data Lake " class="wp-image-67845" title="Big Data w chmurze Azure  42"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Z moich obserwacji wynika, że zastosowanie nowego silnika i nowych klastrów znacząco przyspieszyło wykonywanie zapytań SQL na zbiorach Big Data. Oczywiście ponieważ ciągle pod spodem mamy zbiory plikowe, warto pokusić się o stworzenie właściwej organizacji danych, nie wahając się przed tworzeniem redundantnych i dedykowanych zbiorów pod najbardziej krytyczne zapytania – po to, żeby umożliwić silnikowi skorzystanie z optymalizatorów wykorzystujących partycjonowanie oraz dane indeksów i metadane dostępne w niektórych typach plików (np. Delta).&nbsp;</p>



<h3 class="wp-block-heading">Unity Catalog – właściwy Data Governance w Data Lake&nbsp;</h3>



<p>Nie można by nazwać rozwiązania przygotowanego przez Databricks hurtownią danych bez rozbudowanego mechanizmu umożliwiającego zarządzanie danymi. W tym celu Databricks zaimplementował nowy, lepszy mechanizm „katalogu danych”, czyli metabazy przetrzymującej informacje o zbiorach danych i ich schematach widzianych jako tabele. W tradycyjnych środowiskach Big Data (również opartych na Sparku) ten element&nbsp;bazował na najpopularniejszym katalogu Hive Metastore albo katalogu Impala. Databricks zaproponował swoją własną wersję katalogu danych nazwaną<strong> Unity Catalog. </strong>Unity Catalog pozwala na rozbudowaną kontrolę nad zbiorami Big Data:&nbsp;</p>



<ul id="block-652fed0c-4323-43c8-a21d-562a1a031c36" class="wp-block-list">
<li>System zarządzania oparty na instrukcjach ANSI SQL.</li>



<li>Szczegółowy audyt i analizę logów dostępu do danych.</li>



<li>Przypisywanie uprawnień do zbiorów danych na poziomie konta użytkownika.</li>



<li>Wsparcie dla implementacji uprawnień na poziome rekordów (<em>Row-Level Security</em>) oraz kolumn (<em>Column-Masking Policy</em>).</li>



<li>Scentralizowane i bezpieczne przeszukiwanie metadanych – pozwalające zrozumieć, które zbiory / tabele Big Data zawierają jakie dane.</li>



<li>Wizualizacje powiązań między zbiorami – grafy przedstawiające zależności między zbiorami z uwzględnieniem uprawnień użytkownika korzystającego z tej funkcjonalności.</li>



<li>Lepsza efektywność kwerend zbiorów zarejestrowanych w Unity Catalog – wynikająca z określonego przeorganizowania katalogu i przetrzymywania jego zapisów w pamięci w skompresowanej formie.</li>
</ul>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jak widać powyżej, korzyści, które wnosi nowy metastore Databricks, są rewolucyjne. Migracja zwykłego Hive Metastore do Unity Catalog jest prosta i na pewno warto to zrobić, żeby wynieść poziom zarządzania danymi na niespotykany dotąd poziom.&nbsp;</p>



<h3 class="wp-block-heading">Delta Sharing – udostępnianie danych na zewnątrz&nbsp;</h3>



<p>Najnowsza wersja platfrom Databricks wprowadza jeszcze jedną użyteczną funkcjonalność – w pełni kontrolowane udostępnianie danych na zewnątrz. Proces ten jest realizowany z użyciem rozwiązania Delta Sharing, które zostało wbud</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="585" src="https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png.webp" alt="jpro 2022.08.31 graphic 7.png" class="wp-image-33045" title="Big Data w chmurze Azure  43" srcset="https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png.webp 750w, https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png-300x234.webp 300w, https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png-495x386.webp 495w" sizes="auto, (max-width: 750px) 100vw, 750px" /></figure>



<p>Takie rozwiązanie jest bardzo wygodne w&nbsp;przypadku gdy&nbsp;system Big Data został oparty na&nbsp;danych od&nbsp;wielu klientów (np.&nbsp;serwisów typu multi-tenant). Właściciel systemu Big Data ma&nbsp;dostęp do&nbsp;wszystkich udzielonych mu&nbsp;danych, mając jednocześnie możliwość udostępnienia określonych informacji/wyników na&nbsp;zewnątrz w&nbsp;taki sposób, aby jego indywidualni partnerzy mieli dostęp jedynie do&nbsp;swoich podzbiorów.&nbsp;</p>



<h2 class="wp-block-heading" id="Cloud-przyszłością-Big-Data">Cloud przyszłością Big Data&nbsp;</h2>



<p>Mój&nbsp;artykuł jedynie pobieżnie poruszył temat kilku ważnych usług z&nbsp;portfolio Azure. Żeby opisać je&nbsp;dokładnie, potrzebny byłby cały cykl.&nbsp;<strong>Mam nadzieję jednak, że&nbsp;treść zainteresowała was na&nbsp;tyle, aby spróbować swoich sił z&nbsp;tematem projektowania i&nbsp;implementacji systemów Big Data z&nbsp;użyciem Azure.</strong>&nbsp;Rewolucja oparta na&nbsp;danych trwa nadal. Warto się stać jej częścią. Jeżeli macie jakieś wątpliwości lub pytania służymy pomocą!&nbsp;&nbsp;</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/big-data-azure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>IoT embedded systems – czym są systemy wbudowane?&#160;&#160;&#160;</title>
		<link>https://nearshore-it.eu/pl/artykuly/systemy-wbudowane/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/systemy-wbudowane/#respond</comments>
		
		<dc:creator><![CDATA[-- Nie pokazuj autora --]]></dc:creator>
		<pubDate>Wed, 20 Jul 2022 12:59:51 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[Transformacja cyfrowa]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/systemy-wbudowane/</guid>

					<description><![CDATA[Przemysł IoT rośnie i według analiz do 2030 r. osiągnie wartość nawet 12,6 tryliona dolarów. W tego typu urządzeniach istotną rolę odgrywają systemy wbudowane, uznawane też za systemy do zadań specjalnych. Do niedawna wykorzystywane w automatyce przemysłowej i z nią głównie kojarzone, dziś coraz częściej spotykane są w urządzeniach użytkowych i różnych dziedzinach życia. Dowiedz się, czym są systemy wbudowane i jakie są ich najważniejsze zastosowania.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Systemy wbudowane – kosmos na Ziemi?&nbsp;</h2>



<p>Jak wiele rozwiązań technologicznych, także systemy wbudowane trafiły do powszechnego użycia z projektów dla przemysłu kosmicznego. Żeby poznać ich historię, trzeba cofnąć się do lat 60., gdy na potrzeby misji Apollo powstał w 1961 r. zintegrowany obwód sterujący. Stworzone przez Charlesa Starka Drapera rozwiązanie pozwoliło nie tylko zmniejszyć wagę promu kosmicznego, ale też umożliwiło załodze zbieranie danych w czasie rzeczywistym. </p>



<p>Przeczytaj: <a href="https://nearshore-it.eu/pl/artykuly/co-przyniosa-polaczone-sily-iiot-i-5g/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/co-przyniosa-polaczone-sily-iiot-i-5g/">Co przyniosą połączone siły IIoT i 5G?</a></p>



<p>Dziś każdy z nas ma, dosłownie, na wyciągnięcie ręki podobne rozwiązania – wszelkie urządzenia przenośne czy wykorzystywane w obszarze Smart Home.&nbsp;Według <a href="https://www.marketsandmarkets.com/Market-Reports/embedded-system-market-98154672.html" target="_blank" rel="noopener">danych MarketsandMarkets</a> do 2025 roku rynek rozwiązań wbudowanych osiągnie wartość 116 bln dol., a już teraz rynek ten rośnie o 50% szybciej niż systemów obliczeniowych ogólnego przeznaczenia. To jednak niejedyny powód, by się nimi zainteresować!</p>



<h2 class="wp-block-heading">Embedded systems (systemy wbudowane). Co to w ogóle jest?&nbsp;</h2>



<p>Najczęściej spotkamy się z określeniem, że system wbudowany to połączenie software&#8217;u i hardware&#8217;u. </p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.07.13_graphic_1.png" alt=" class=" class="wp-image-67181" title="IoT embedded systems – czym są systemy wbudowane?&nbsp;&nbsp;&nbsp; 44"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Taki system za pomocą sterownika odpowiada za jakąś część bardziej złożonego procesu (np. określone zadanie lub funkcjonalność). Systemy wbudowane mogą być oparte zarówno na mikroprocesorach, jak i mikrokontrolerach, a w niemal wszystkich tego rodzaju układach wykorzystuje się system operacyjny LINUX (można też zastosować Windows IoT lub Embedded Java). W przypadku systemów wbudowanych „im prościej, tym lepiej” – a ze względu na wysoki poziom wyspecjalizowania, im mniej skomplikowany system, tym większa niezawodność.</p>



<h2 class="wp-block-heading">Czym charakteryzują się systemy wbudowane?&nbsp;&nbsp;</h2>


<div class="wp-block-image is-resized">
<figure class="alignleft size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.07.13_graphic3.jpg" alt=" class=" class="wp-image-67169" title="IoT embedded systems – czym są systemy wbudowane?&nbsp;&nbsp;&nbsp; 45"></figure></div>


<p>Najważniejsze zalety systemów wbudowanych to kompaktowość, nisko kosztowość możliwa dzięki masowej produkcji oraz ich szerokie zastosowanie w wielu różnych sektorach. </p>



<p>Jednocześnie inżynierowie systemów wbudowanych dążą do tego, aby tworzone przez nich rozwiązania były<strong> niezawodne, szybkie, efektywne i bardziej energooszczędne. </strong>To prawdziwe wyzwanie, zwłaszcza jeśli weźmiemy pod uwagę to, że nieraz muszą obsługiwać krytyczne procesy, procesować wrażliwe dane i reagować w czasie rzeczywistym.&nbsp;&nbsp;</p>



<p></p>



<h2 class="wp-block-heading">Zastosowanie &nbsp;</h2>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.07.13_graphic_2.png" alt=" class=" class="wp-image-67165" title="IoT embedded systems – czym są systemy wbudowane?&nbsp;&nbsp;&nbsp; 46"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<ul class="wp-block-list">
<li><strong>Automotive</strong> – we współczesnych samochodach znajdziemy nieraz nawet około 100 wbudowanych komputerów czy systemów, które wspierają różne obszary, jak np. systemy nawigacyjne czy sterowanie audio. Branża automotive wykorzystuje systemy wbudowane w rozwiązaniach typu ADAS (Advanced Driver Assistance System). Taki zaawansowany system wspierający jest wykorzystywany w systemach wspomagania parkowania, prowadzenia pojazdu, zwiększania bezpieczeństwa – jak np. sterowanie poduszkami powietrznymi itp. Po przestoju spowodowanym pandemią, dynamika przemysłu motoryzacyjnego nabiera znów tempa, a systemy wbudowane znajdują szerokie zastosowanie w różnego rodzaju pojazdach.&nbsp;</li>



<li><strong>Urządzenia smart</strong> – telefony komórkowe wykorzystują wiele systemów wbudowanych do sterowania kamerami, mikrofonami, USB. Posiadają je także zegarki cyfrowe (do procesowania danych w czasie rzeczywistym) oraz wszelkiego rodzaju urządzenia przenośne czy te, które pomagają budować Smart City (sygnalizatory świetlne, inteligentne oświetlenie, czujniki ruchu, kamery). Potencjał IoT, a zatem systemów wbudowanych wykorzystuje szeroko rozumiana elektronika użytkowa (urządzenia rolnicze, urządzenia domowe typu Smart Home)&nbsp;</li>



<li><strong>Maszyny przemysłowe </strong>– wykorzystanie systemów wbudowanych otworzyło drzwi dla rewolucji przemysłowej.<a href="https://nearshore-it.eu/pl/artykuly/co-przyniosa-polaczone-sily-iiot-i-5g" data-type="jpro" data-id="53982"> Urządzenia IIoT</a> (Industrial Internet of Things w procesie produkcji umożliwiają sterowanie produkcją, monitorowanie i optymalizację procesów – wszystko to w czasie rzeczywistym. Sensory, zautomatyzowane systemy produkcyjne i monitorujące czynią proces bardziej efektywnym, ekonomicznym i przyjaznym środowisku&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; </li>



<li><strong>Sprzęt medyczny</strong> – urządzenia wykorzystywane w medycynie (respiratory, urządzenia MRI) muszą spełniać najbardziej restrykcyjne wymagania, gdyż często od ich poprawnego funkcjonowania zależy zdrowie lub życie ludzkie. Wbudowane systemy obsługują w nich graficzny interfejs użytkownika, który powinien być możliwie jak najbardziej przyjazny i intuicyjny w obsłudze. Podobnie jak w maszynach użytkowych, wykorzystuje się tu również kontrolery i sensory&nbsp;&nbsp;&nbsp;</li>



<li><strong>Przemysł lotniczy </strong>– w przemyśle lotniczym systemy wbudowane mierzą się z ekstremalnymi warunkami (jak niskie czy wysokie temperatury). Mają krytyczne znaczenie dla bezpieczeństwa, muszą więc spełniać wyśrubowane normy. Takie systemy mogą odpowiadać za kontrolę prędkości i temperatury, rejestrować parametry lotu, sterować silnikami, ale też&#8230; dostarczać rozrywki pasażerom poprzez wbudowane w kabinie ekrany, którymi sterują. Jako zastosowanie rozwiązań Embedded warto też wymienić coraz chętniej wykorzystywane drony z systemami nawigacyjnymi i sterowania&nbsp;&nbsp;&nbsp;</li>
</ul>


<div class="special-content-box style-1">
    <div class="box">
                <div class="content">
            <p>&nbsp;</p>
<ul>
<li><strong>Zagrożenie cyberatakami i wyciekami danych</strong> – systemy wbudowane przetwarzają dane krytyczne dla wielu sektorów – wspomnijmy choćby banki, szpitale, wojsko czy aerospace</li>
<li><strong>Czas żywotności</strong> – kompaktowe urządzenia wykorzystujące systemy wbudowane wykorzystują więcej energii, a to przekłada się na ich czas pracy i żywotność. Wyzwaniem jest budowanie systemów, które będą jednocześnie niezawodne i energooszczędne</li>
</ul>
                    </div>
    </div>
</div>



<h2 class="wp-block-heading">Podsumowanie&nbsp;&nbsp;</h2>



<p>Coraz większe możliwości technologii takich jak <a href="https://nearshore-it.eu/pl/artykuly/jak-siegnac-chmur-w-2022-oto-najwazniejsze-trendy-zwiazane-z-wykorzystaniem-rozwiazan-cloud-computing/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/jak-siegnac-chmur-w-2022-oto-najwazniejsze-trendy-zwiazane-z-wykorzystaniem-rozwiazan-cloud-computing/">chmura</a>, sieć 5G czy <a href="https://nearshore-it.eu/pl/artykuly/przyszlosc-bi-to-ai-czyli-augmented-analytics-w-sap-analytics-cloud/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/przyszlosc-bi-to-ai-czyli-augmented-analytics-w-sap-analytics-cloud/">sztuczna inteligencja,</a> wykorzystywanych przez IoT, z pewnością będzie sprzyjał wykorzystaniu systemów wbudowanych. Szerokie zastosowanie w wielu branżach i zapotrzebowanie na sprzęty elektroniki użytkowej sprawiają, że producenci mogą z optymizmem patrzeć w przyszłość. Muszą jednak liczyć się z zagrożeniami i potrzebami, jakie wiążą się z zastosowaniem rozwiązań typu Embedded Systems w urządzeniach użytkowych. Zatrudniając odpowiednio wykwalifikowanych inżynierów i przeprowadzając testy bezpieczeństwa systemów wbudowanych, można odpowiednio zminimalizować to ryzyko.&nbsp;&nbsp;&nbsp;</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/systemy-wbudowane/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
