Udostępnij za pośrednictwem


Microsoft Orleans

Orleans:

  • To międzyplatformowa struktura do tworzenia niezawodnych, skalowalnych aplikacji rozproszonych. Aplikacje rozproszone są definiowane jako te, które obejmują więcej niż jeden proces, często wykraczają poza granice sprzętu i używają komunikacji typu peer-to-peer.
  • Skaluje z jednego serwera lokalnego do tysięcy rozproszonych, wysoce dostępnych aplikacji w chmurze.
  • Rozszerza znane pojęcia i idiomy języka C# na środowiska z wieloma serwerami.
  • Jest przeznaczony do elastycznego skalowania. Gdy host dołącza do klastra, może zaakceptować nowe aktywacje. Gdy host opuści klaster, poprzednie aktywacje na tym hoście zostaną ponownie aktywowane na pozostałych hostach zgodnie z potrzebami. Host może opuścić klaster z powodu redukcji skali lub awarii maszyny. Klaster Orleans można skalować w dół do jednego hosta. Te same właściwości, które umożliwiają elastyczną skalowalność, umożliwiają odporność na uszkodzenia. Klaster automatycznie wykrywa i szybko odzyskuje sprawność po awariach.
  • Upraszcza złożoność tworzenia aplikacji rozproszonych, zapewniając wspólny zestaw wzorców i interfejsów API.
  • Umożliwia deweloperom zapoznanie się z tworzeniem aplikacji na jednym serwerze w celu przejścia na tworzenie odpornych, skalowalnych usług natywnych dla chmury i aplikacji rozproszonych.
  • Jest czasami nazywany "rozproszoną platformą .NET".
  • To wybrana struktura podczas tworzenia aplikacji natywnych dla chmury.
  • Działa w dowolnym miejscu obsługiwanym przez platformę .NET. Obejmuje to hosting w systemach Linux, Windows i macOS.
  • Aplikacje można wdrażać w usługach Kubernetes, virtual machines i PaaS, takich jak Azure App Service i Azure Container Apps.

"Model aktora"

Orleans opiera się na modelu "aktora". Model aktora pochodzi z początku lat 70. i teraz stanowi kluczowy element Orleans. Model aktora to model programowania, w którym każdy aktor jest lekkim, współbieżnym, niezmiennym obiektem, który hermetyzuje fragment stanu i odpowiednie zachowanie. Aktorzy komunikują się wyłącznie ze sobą przy użyciu komunikatów asynchronicznych. Orleans w szczególności wynalazł abstrakcję wirtualnego aktora, gdzie aktorzy istnieją wiecznie.

Notatka

Aktorzy są czysto logicznymi jednostkami, które zawsze istnieją praktycznie. Nie można jawnie utworzyć ani zniszczyć aktora, a jego istnienie wirtualne nie ma wpływu na awarię serwera, który go wykonuje. Ponieważ aktorzy zawsze istnieją, są zawsze adresowalni.

Jest to nowatorskie podejście do tworzenia nowej generacji aplikacji rozproszonych na potrzeby epoki chmury. Model programowania Orleans osłania złożoność związaną z wysoce równoległymi aplikacjami rozproszonymi bez ograniczania możliwości lub nakładania ograniczeń na dewelopera.

Aby uzyskać więcej informacji, zobacz Orleans: Virtual Actors za pośrednictwem usługi Microsoft Research. Wirtualny aktor jest reprezentowany jako ziarno Orleans.

Co to są ziarna?

Ziarno jest jednym z kilku Orleans prymitywów. Jeśli chodzi o model aktora, ziarno jest aktorem wirtualnym. Podstawowym blokiem konstrukcyjnym w dowolnej aplikacji Orleans jest ziarno . Ziarna to jednostki składające się z tożsamości, zachowania i zdefiniowanego przez użytkownika stanu. Rozważ następującą wizualną reprezentację ziarna:

Ziarno składa się ze stabilnej tożsamości, zachowania i stanu.

Tożsamości ziarna to klucze zdefiniowane przez użytkownika, dzięki czemu ziarna są zawsze dostępne do wywołania. Ziarna mogą być wywoływane przez inne ziarna lub dowolną liczbę klientów zewnętrznych. Każde ziarno jest wystąpieniem klasy, która implementuje jeden lub więcej z następujących interfejsów:

Ziarna mogą mieć nietrwałe lub trwałe dane stanu, które mogą być przechowywane w dowolnym systemie magazynu. W związku z tym grainy niejawnie partycjonują stany aplikacji, umożliwiając automatyczną skalowalność i upraszczając odzyskiwanie po awariach. Stan ziarna jest przechowywany w pamięci, gdy ziarno jest aktywne, co prowadzi do mniejszego opóźnienia i mniejszego obciążenia magazynów danych.

Zarządzany cykl życia ziarna Orleans.

Tworzenie instancji ziaren jest wykonywane automatycznie na żądanie przez środowisko uruchomieniowe Orleans. Ziarna, które nie są używane przez jakiś czas, są automatycznie usuwane z pamięci, aby zwolnić zasoby. Jest to możliwe dzięki ich stabilnej tożsamości, która pozwala wywoływać ziarna, niezależnie od tego, czy są one już załadowane do pamięci, czy nie. Umożliwia to również przezroczyste odzyskiwanie po awarii, ponieważ obiekt wywołujący nie musi wiedzieć, na którym serwerze ziarno jest tworzone w dowolnym momencie. Ziarna mają zarządzany cykl życia, a środowisko uruchomieniowe Orleans jest odpowiedzialne za aktywowanie/dezaktywowanie oraz umieszczanie/lokalizowanie ziaren w razie potrzeby. Dzięki temu deweloper może napisać kod tak, jakby wszystkie ziarna zawsze znajdowały się w pamięci.

Co to są silosy?

Silos to kolejny przykład Orleans pierwotnego. Silos hostuje co najmniej jedno ziarno. Środowisko uruchomieniowe Orleans implementuje model programowania dla aplikacji.

Zazwyczaj grupa silosów działa jako klaster w celu zapewnienia skalowalności i odporności na uszkodzenia. W przypadku uruchamiania jako klastra silosy koordynują się ze sobą w celu dystrybucji pracy i wykrywania i odzyskiwania po awariach. Środowisko uruchomieniowe umożliwia ziarnom hostowanym w klastrze komunikowanie się ze sobą tak, jakby były w ramach jednego procesu. Aby ułatwić wizualizowanie relacji między klastrami, silosami i ziarnami, rozważmy następujący diagram:

klaster ma co najmniej jeden silos, a silos ma co najmniej jedno ziarno.

Na powyższym diagramie przedstawiono relację między klastrami, silosami i ziarnami. Można mieć dowolną liczbę klastrów, każdy klaster ma co najmniej jeden silos, a każdy silos ma co najmniej jedno ziarno.

Oprócz podstawowego modelu programowania silosy udostępniają zestaw usług środowiska uruchomieniowego, takich jak czasomierze, przypomnienia (trwałe czasomierze), trwałość, transakcje, strumienie i inne. Aby uzyskać więcej informacji, zobacz Co mogę zrobić z Orleans?.

Aplikacje internetowe i inni klienci zewnętrzni nazywają ziarna w klastrze przy użyciu biblioteki klienta, która automatycznie zarządza komunikacją sieciową. Klienci mogą być również umieszczani razem w tym samym procesie z silosami dla uproszczenia.

Co mogę zrobić z Orleans?

Orleans to struktura do tworzenia aplikacji natywnych dla chmury i powinna być brana pod uwagę za każdym razem, gdy tworzysz aplikacje platformy .NET, które ostatecznie będą musiały zostać skalowane. Pozornie niekończące się sposoby korzystania z Orleans, ale poniżej przedstawiono niektóre z najbardziej typowych sposobów; Gry, Bankowość, Aplikacje do czatów, Śledzenie GPS, Handel giełdowy, Koszyki na zakupy, Aplikacje do głosowania i nie tylko. Orleans jest używany przez firmę Microsoft na platformie Azure, Xbox, Skype, Halo, PlayFab, Gears of War i wielu innych usługach wewnętrznych. Orleans ma wiele funkcji, które ułatwiają korzystanie z różnych aplikacji.

Wytrwałość

Orleans zapewnia prosty model trwałości, który gwarantuje, że stan jest dostępny przed przetworzeniem żądania i że jego spójność jest utrzymywana. Ziarna mogą mieć wiele nazwanych trwałych obiektów danych. Na przykład może istnieć jeden o nazwie "profil" dla profilu użytkownika i jeden o nazwie "inwentarz" dla jego inwentarza. Ten stan można przechowywać w dowolnym systemie magazynu.

Kiedy proces jest uruchomiony, stan jest przechowywany w pamięci, dzięki czemu zapytania odczytu mogą być obsługiwane bez uzyskiwania dostępu do pamięci masowej. Gdy ziarno aktualizuje jego stan, wywołanie IStorage.WriteStateAsync gwarantuje, że magazyn zapasowy jest aktualizowany pod kątem trwałości i spójności.

Aby uzyskać więcej informacji, zobacz Trwałość ziarna.

Czasomierze i przypomnienia

Przypomnienia to trwały mechanizm planowania dla ziarna. Można ich użyć, aby upewnić się, że niektóre działania są wykonywane w przyszłości, nawet jeśli ziarno nie jest obecnie aktywowane w tym czasie. Czasomierze są nietrwałym odpowiednikiem przypomnień i mogą być używane w przypadku zdarzeń o wysokiej częstotliwości, które nie wymagają niezawodności.

Aby uzyskać więcej informacji, zobacz Czasomierze i przypomnienia.

Elastyczne umieszczanie ziarna

Gdy ziarno jest aktywowane w Orleans, środowisko uruchomieniowe decyduje, na którym serwerze (silosie) uaktywnić to ziarno. Jest to nazywane umieszczaniem ziarna.

Proces umieszczania w Orleans jest w pełni konfigurowalny. Deweloperzy mogą wybierać spośród zestawu domyślnych zasad umieszczania, takich jak losowe, preferowane lokalnie i oparte na obciążeniu, albo skonfigurować niestandardową logikę. Dzięki temu można w pełni elastycznie decydować, gdzie tworzone są ziarna. Na przykład, ziarna można umieścić na serwerze blisko zasobów, które są potrzebne do ich działania, lub blisko innych ziaren, z którymi się komunikują.

Aby uzyskać więcej informacji, zapoznaj się z sekcją Umieszczanie ziarna.

Wersjonowanie ziarna i klastry heterogeniczne

Aktualizowanie systemów produkcyjnych w sposób, który bezpiecznie uwzględnia zmiany, może być trudne, szczególnie w systemach utrzymujących stan. Aby to uwzględnić, interfejsy ziarna w Orleans mogą być wersjonowane.

Klaster utrzymuje mapowanie, które implementacje ziarna są dostępne na których silosach w klastrze oraz jakie są wersje tych implementacji. Ta wersja informacji jest używana przez środowisko uruchomieniowe wraz z strategiami rozmieszczania w celu podejmowania decyzji przy kierowaniu połączeń do składników. Ponadto umożliwia to także heterogeniczne klastry, w których różne silosy mają różne zestawy implementacji ziarna dostępne, co pozwala bezpiecznie aktualizować ziarna w różnych wersjach.

Aby uzyskać więcej informacji, zobacz Grain Versioning.

Pracownicy bezstanowi

Pracownicy bezstanowi są specjalnie oznaczonymi ziarnami, które nie mają żadnego skojarzonego stanu i mogą być aktywowane na wielu silosach jednocześnie. Umożliwia to zwiększenie równoległości dla funkcji bezstanowych.

Aby uzyskać więcej informacji, zobacz bezstanowe jednostki robocze.

Filtry wywołań ziarna

Filtr wywołań ziarna jest logiką wspólną dla wielu ziarna. Orleans obsługuje filtry zarówno dla połączeń przychodzących, jak i wychodzących. Filtry autoryzacji, rejestrowania i telemetrii oraz obsługi błędów są uznawane za typowe.

Kontekst żądania

Metadane i inne informacje mogą być przekazywane z serią żądań przy użyciu kontekstu żądania . Kontekst żądania może służyć do przechowywania informacji dotyczących śledzenia rozproszonego lub innych wartości zdefiniowanych przez użytkownika.

Transakcje rozproszone ACID

Oprócz prostego modelu trwałości opisanego powyżej, ziarna mogą mieć stan transakcyjny. Wiele zbóż może uczestniczyć w ACID transakcjach razem, niezależnie od tego, gdzie ich stan jest ostatecznie przechowywany. Transakcje w Orleans są rozproszone i zdecentralizowane (nie ma ani centralnego menedżera transakcji, ani koordynatora transakcji) i mają izolację serializowalną .

Aby uzyskać więcej informacji na temat transakcji, zobacz transakcji.

Strumienie

Strumienie pomagają programistom przetwarzać serię elementów danych prawie w czasie rzeczywistym. strumienie Orleans są zarządzane; strumienie nie muszą być tworzone ani rejestrowane przed tym, jak ziarno lub klient publikuje albo subskrybuje strumień. Pozwala to na większe oddzielenie producentów strumieni i konsumentów od siebie i infrastruktury.

Przetwarzanie strumieniowe jest niezawodne: ziarna mogą przechowywać punkty kontrolne (kursory) i resetować się do przechowywanego punktu kontrolnego podczas aktywacji lub w dowolnym późniejszym czasie. Strumienie obsługują dostarczanie wsadowe komunikatów konsumentom w celu zwiększenia wydajności i poprawy szybkości odzyskiwania.

Strumienie obsługiwane są przez usługi kolejkowania, takie jak Azure Event Hubs, Amazon Kinesis i inne.

Dowolna liczba strumieni może być multipleksowana na mniejszą liczbę kolejek, a odpowiedzialność za ich przetwarzanie jest równomiernie rozłożona w całym klastrze.

Wprowadzenie do wideo Orleans

Jeśli interesuje Cię wprowadzenie wideo do Orleans, obejrzyj następujący film.

Następne kroki