Co to jest .NET Aspire?
Ekosystemy chmury, takie jak Microsoft Azure i Amazon Web Services (AWS), są głęboko osadzone w branży IT i popularne rozwiązania hostingu dla aplikacji internetowych i usług internetowych. Prawdopodobnie system hostingu w chmurze jest domyślnym wyborem dla aplikacji, dlatego należy upewnić się, że tworzone aplikacje mają na celu maksymalne wykorzystanie ich.
Aplikacja natywna dla chmury to aplikacja przeznaczona specjalnie do uruchamiania w chmurze. Aplikacje często wykazują pewne wzorce architektury, dzięki czemu wydajność, skalowalność i niezawodność są optymalne.
Wyobraź sobie, że pracujesz dla firmy zajmującej się odzieżą i sprzętem na świeżym powietrzu. Zarząd poprosił Cię o opracowanie nowej aplikacji internetowej eShop dla głównej witryny firmy przeznaczonej dla klientów. Twój zespół jest zaznajomiony z modelem mikrousług i chcesz wiedzieć, czy korzystanie z platformy .NET Aspire ułatwi projekt.
W tej lekcji dowiesz się więcej na temat architektur natywnych dla chmury i poznasz wyzwania, które mogą być związane z ich tworzeniem. Zobaczysz również, jak platforma .NET Aspire może sprostać tym wyzwaniom.
Co to jest aplikacja natywna dla chmury?
Aplikacja natywna dla chmury to aplikacja, która jest zaprojektowana w celu optymalnego wykorzystania infrastruktury chmury w celu zapewnienia najlepszej wydajności, dostępności i odporności. Istnieją sześć filarów architektur oprogramowania natywnego dla chmury:
- Infrastruktura chmurowa. Aplikacje natywne dla chmury są wdrażane w rozwiązaniach hostingowych w chmurze, a nie w lokalnych farmach serwerów.
- Mikrousługi. Aplikacje natywne dla chmury są implementowane jako zestaw mikrousług, z których każda implementuje niewielką część funkcjonalności biznesowej.
- Kontenery. Mikrousługi i inne części aplikacji są opracowywane i wdrażane w kontenerach w celu zapewnienia spójnego środowiska wykonywania.
- Usługi zapasowe. Zasoby pomocnicze, takie jak bazy danych i usługi buforowania, mogą służyć do zapewnienia typowych funkcji mikrousług.
- Nowoczesny projekt. Aplikacje natywne dla chmury są zgodne z metodologią dwunastoskładnikowej aplikacji, która obejmuje zasady, takie jak ciągła integracja/ciągłe wdrażanie (CI/CD), rozproszenie, powiązanie portów itd.
- Automatyzacja. Aplikacje natywne dla chmury używają infrastruktury jako kodu (IaC), aby zautomatyzować aprowizowanie i wdrażanie platformy.
Aby zapewnić elastyczność, aplikacja natywna dla chmury składa się z zestawu mikrousług. Każda mikrousługa:
- Implementuje jedną część pełnej funkcjonalności.
- Wykonuje własny proces i jest odizolowany od innych, często w dedykowanym kontenerze.
- Jest tworzony przez oddzielny zespół.
- Komunikuje się z innymi, ale jest luźno powiązany.
Każdy zespół wybiera języki i technologie, które wolą implementować mikrousługę. Każda mikrousługa jest wdrażana i skalowana niezależnie od innych.
Na poniższym diagramie przedstawiono różnice między tradycyjną monolityczną aplikacją internetową a aplikacją internetową składającą się z mikrousług.
Aplikacje natywne dla chmury mogą mieć wiele zalet dla Twojej firmy. Na przykład:
- Hostując aplikację w chmurze, nie musisz samodzielnie tworzyć i obsługiwać infrastruktury, takiej jak serwery hostingu, systemy operacyjne i usługi pomocnicze.
- Ponieważ każda mikrousługa jest opracowywana niezależnie, można stale wdrażać w nich nowe funkcje bez konieczności oczekiwania na inne zespoły lub punkty kontrolne wersji głównej.
- Ponieważ każda mikrousługa działa w co najmniej jednym kontenerze, wiesz, że środowisko będzie takie samo we wszystkich środowiskach testowych, przejściowych i produkcyjnych.
- Możesz użyć systemu aranżacji kontenerów, takiego jak Kubernetes, do szybkiego wdrażania dodatkowych wystąpień w celu reagowania na dodatkowe zapotrzebowanie.
Wyzwania przedstawione przez aplikacje natywne dla chmury
Aplikacja natywna dla chmury składająca się z wielu mikrousług i z wieloma funkcjami może stać się złożona i stanowić wyzwania, które nie pojawiają się w aplikacjach monolitycznych. Na przykład:
- Definicja aplikacji. O ile nie udokumentowano dokładnie, deweloperzy mogą mieć trudności z zrozumieniem, które składniki składają się na pełną aplikację natywną dla chmury.
- Komunikacja. Każda mikrousługa może wymagać wymiany komunikatów lub danych z innymi mikrousługami, aby sformułować odpowiedź na żądanie użytkownika. Chociaż musisz włączyć taką komunikację, musisz to zrobić w sposób, który nie łączy ściśle jednej mikrousługi z inną. Potrzebna jest również komunikacja, aby zachować niezawodność w czasie wysokiego zapotrzebowania lub awarii usługi.
- Odporność. Żadna usługa hostingu nie może być dostępna w 100%. Należy upewnić się, że w rzadkich przypadkach, gdy mikrousługa jest niedostępna, aplikacja niezawodnie obsługuje błędy i przechowuje żądania do momentu powrotu usługi.
- Dane rozproszone. Każda mikrousługa implementuje własną warstwę magazynu danych i może nie używać tego samego serwera bazy danych co inne. Należy rozważyć sposób wykonywania zapytań dotyczących danych z wielu mikrousług i sposobu implementowania transakcji.
- Tajemnice. Jeśli aplikacja obsługuje wszelkiego rodzaju poufne dane, każda mikrousługa musi uwierzytelniać każde odebrane żądanie przed zwróceniem odpowiedzi. Często wpisy tajne, takie jak asymetryczne i symetryczne klucze szyfrowania, są używane do ochrony danych i pozytywnie identyfikują wywołujących użytkowników i mikrousług. Należy wziąć pod uwagę sposób przechowywania i wymiany tych wpisów tajnych w aplikacji natywnej dla chmury.
- Dołączanie deweloperów. Nowi deweloperzy muszą mieć możliwość szybkiego zrozumienia architektury aplikacji i sposobu pracy z nią. Musisz mieć pewność, że nowi deweloperzy mogą szybko przyspieszyć bez dużej ilości wiedzy między domenami lub konfiguracji lokalnej.
Ostatnio projektowanie aplikacji natywnych dla chmury zyskało popularność, ale wyzwania takie jak te w tej sekcji zniechęcają niektóre zespoły do korzystania z tego wzorca. Platforma .NET zawiera na przykład wszystkie funkcje potrzebne do rozwiązania tych problemów, ale rozwiązania mogą wymagać znaczących inwestycji w trenowanie i kod niestandardowy.
Co to jest .NET Aspire?
.NET Aspire to nowy stos gotowy do chmury utworzony dla platformy .NET, który umożliwia deweloperom szybkie i łatwe tworzenie aplikacji natywnych dla chmury. Przyjrzyjmy się funkcjom platformy .NET Aspire, które odpowiadają wyzwaniom, które widzieliśmy.
Aranżacja
Mikrousługi i ich luźno powiązany charakter zwiększają elastyczność wdrożonej aplikacji, ale mogą utrudnić konfigurację. Lista usług tworzących aplikację może stać się niejasna, a punkt końcowy, w którym dostępna jest mikrousługa, może być trudna do zidentyfikowania. Platforma .NET Aspire zapewnia funkcje orkiestracji, dzięki czemu:
- Można wyraźnie określić dla wszystkich zespołów projekty platformy .NET, kontenery, pliki wykonywalne i zasoby w chmurze tworzące aplikację.
- Mikrousługi mogą automatycznie odnajdywać punkty końcowe dla wszystkich składników aplikacji. Program .NET Aspire wykonuje to odnajdywanie usługi, zarządzając parametry połączenia i wstrzykiwając je do mikrousług w razie potrzeby.
Podczas tworzenia rozwiązania .NET Aspire zobaczysz nowy projekt w rozwiązaniu o nazwie <SolutionName>. AppHost. Ten projekt implementuje aranżację aplikacji i upewnij się, że jest to projekt startowy dla rozwiązania.
Składniki
Mikrousługi często mają wymagania funkcjonalne dotyczące złożonych usług zapasowych, które stanowią podstawę ich funkcji. Na przykład:
- Magazyn danych. Aby utrwalać dane do obsługi katalogów produktów, koszyków zakupów, magazynów tożsamości i innych funkcji, mikrousługi muszą przechowywać dane w magazynach ustrukturyzowanych lub częściowo ustrukturyzowanych.
- Buforowanie. Aby zmaksymalizować wydajność, mikrousługi mogą przechowywać częściowe lub kompletne odpowiedzi w pamięci podręcznej, aby kolejne podobne żądania mogły zostać spełnione szybciej.
- Obsługa komunikatów. Luźno powiązane mikrousługi muszą komunikować się ze sobą i należy upewnić się, że ta komunikacja jest niezawodna nawet wtedy, gdy ruch jest wysoki lub warunki sieciowe są trudne. Usługa, która kolejkuje i dystrybuuje komunikaty od nadawców do adresatów, jest typowym wymaganiem.
W programie .NET Aspire można łatwo zaimplementować te usługi zapasowe w każdej mikrousłudze, ponieważ stos zawiera składniki platformy .NET Aspire. Każdy składnik jest pakietem NuGet, który można dodać do rozwiązania i implementuje standardowy interfejs do usługi zapasowej. Ten standardowy interfejs gwarantuje, że mikrousługa łączy się ze swoimi usługami zapasowymi spójnie i bezproblemowo.
Gotowe składniki platformy .NET Aspire obejmują:
- Składniki magazynu danych, takie jak te dla baz danych PostgreSQL, SQL Database, Azure Cosmos DB i MongoDB.
- Buforowanie składników, takich jak składnik usługi Redis.
- Składniki obsługi komunikatów, takie jak te dla rabbitMQ i Azure Service Bus.
Ważne
Platforma .NET Aspire zawiera wiele składników, które współpracują z usługami platformy Azure, takimi jak Azure Storage i Azure Service Bus, ale platforma Azure nie jest wymagana dla projektów platformy .NET Aspire i działają równie dobrze z usługami zapasowymi spoza platformy Azure, takimi jak RabbitMQ i MongoDB.
Narzędzia
Platforma .NET Aspire dodaje również narzędzia dostępne dla deweloperów w programie Visual Studio. Na przykład:
- Nowe szablony projektów umożliwiają tworzenie rozwiązań .NET Aspire, wykonując kilka kroków w kreatorze.
- Pulpit nawigacyjny platformy .NET Aspire to interfejs internetowy, który jest wyświetlany za każdym razem, gdy uruchamiasz rozwiązanie z poziomu programu Visual Studio. Na tym pulpicie nawigacyjnym są wyświetlane wszystkie mikrousługi i usługi tworzenia kopii zapasowych dla aplikacji. Można je wywołać do testowania. Przedstawia również narzędzia do monitorowania i wydajności.
- Zostaną wyświetlone dodatkowe elementy menu, których można użyć do dodania składnika .NET Aspire, zarejestrowania projektu na potrzeby obsługi orkiestratora platformy .NET Aspire lub wykonania innych zadań.
Uwaga
Więcej informacji na temat narzędzi .NET Aspire znajdziesz w dalszej części tego modułu.