Udostępnij za pośrednictwem


Często zadawane pytania

W tym artykule znajdziesz odpowiedzi na najczęściej zadawane pytania dotyczące platformy .NET Orleans. Jeśli masz tutaj pytanie, na które nie udzielono odpowiedzi, poproś zespół produktu, publikując problem w repozytorium GitHub.

Dostępność

Czy mogę swobodnie używać Orleans w moim projekcie?

Absolutnie. Kod źródłowy jest licencjonowany na podstawie licencji MIT. Pakiety NuGet są publikowane w nuget.org.

Czy Orleans jest gotowe do produkcji? Usłyszałem, że jest to projekt badawczy.

Orleans rozpoczęty jako projekt badawczy w ramach badań firmy Microsoft. Później stał się produktem gotowym do produkcji i był używany w środowisku produkcyjnym w firmie Microsoft (od 2011 r.) i przez inne firmy (ponieważ został publicznie wydany w 2015 r.). Orleans obsługuje wiele systemów o wysokiej dostępności i usług w chmurze.

Czy firma Microsoft obsługuje Orleans?

Firma Microsoft udostępniła kod źródłowy Orleans na licencji MIT w witrynie GitHub. Firma Microsoft nadal inwestuje w Orleans i przyjmuje wkład społeczności w kod źródłowy.

Pozycjonowania

Czy Orleans jest produktem serwera? Jak uruchomić Orleans?

Orleans to struktura, zestaw bibliotek, która ułatwia tworzenie aplikacji. OrleansAplikacje oparte na systemie mogą być uruchamiane w różnych środowiskach hostingu, w chmurze lub w klastrach lokalnych, a nawet na jednej maszynie. Jest to odpowiedzialność deweloperów aplikacji za tworzenie, wdrażanie i uruchamianie aplikacji opartej Orleansna ich docelowym środowisku hostingu.

Gdzie mogę uruchomić Orleans?

Orleans program może działać w dowolnym środowisku, w którym można uruchomić aplikację .NET. Przed Orleans 2.0 wymagany jest pełny program .NET Framework. Począwszy od wersji 2.0, Orleans jest zgodny z platformą .NET Standard 2.0, dlatego może działać na platformie .NET Core w środowiskach systemu Windows i innych niż Windows, które obsługują platformę .NET Core.

Czy jest Orleans kompilowany dla platformy Azure?

Nie. Uważamy, że powinieneś mieć możliwość uruchamiania Orleans wszędzie tam, gdzie tego potrzebujesz, w sposób, który ci odpowiada. Orleans jest bardzo elastyczny i ma kilku opcjonalnych dostawców, którzy pomagają hostować go w środowiskach chmury, takich jak Azure, AWS lub GCP, lub w klastrach lokalnych, z wyborem technologii do obsługi Orleansprotokołu klastrowania.

Jaka jest różnica między językami aktorów, takimi jak Orleans, a innymi językami i frameworkami, takimi jak Erlang lub Akka?

Chociaż opiera się na tych samych podstawowych zasadach modelu aktora, Orleans zrobił krok naprzód i wprowadził pojęcie virtual actors, które znacznie upraszcza środowisko deweloperów i jest znacznie bardziej odpowiednie dla usług w chmurze i systemów o dużej skali.

Projektowanie

Jak duże lub jak małe powinno być ziarno w mojej aplikacji?

Model izolacji ziarna sprawia, że są one bardzo dobre w reprezentowaniu niezależnie odizolowanych kontekstów stanu i obliczeń. W większości przypadków ziarna naturalnie mapować na takie jednostki aplikacji, jak użytkownicy, sesje, konta. Te jednostki są ogólnie odizolowane od siebie, można uzyskiwać do nich dostęp i aktualizować niezależnie oraz uwidaczniać dobrze zdefiniowany zestaw obsługiwanych operacji. Działa to dobrze dzięki intuicyjnemu modelowaniu "jednej jednostki, jednego ziarna".

Jednostka aplikacji może być zbyt duża, aby była wydajnie reprezentowana przez pojedyncze ziarno, jeśli hermetyzuje zbyt dużo stanu, a w rezultacie musi obsługiwać dużą liczbę żądań. Mimo że pojedyncze ziarno może na ogół obsługiwać do kilku tysięcy drobnych wywołań na sekundę, ogólna zasada każe być ostrożnym, aby pojedyncze ziarno nie odbierało setek żądań na sekundę. Może to być oznaką zbyt dużego ziarna, a rozłożenie go na mniejsze ziarna może prowadzić do bardziej stabilnego i zrównoważonego systemu.

Jednostka aplikacji może być zbyt mała, aby być ziarnem, jeśli prowadziłoby to do ciągłej interakcji innych ziaren z nią, a w rezultacie prowadzić do zbyt dużego obciążenia wiadomościami. W takich przypadkach może mieć większy sens, aby ściśle współdziałające podmioty były częścią jednej jednostki podstawowej, aby mogły wywoływać się bezpośrednio.

Jak należy unikać gorących miejsc w ziarnie?

Przepustowość ziarna jest ograniczona do jednego wątku, na którym może być wykonywana jego aktywacja. Dlatego zaleca się unikanie projektów, w których pojedyncze ziarno otrzymuje nieproporcjonalną ilość żądań lub bierze udział w przetwarzaniu żądań do innych ziaren. Różne wzorce pomagają zapobiegać przeciążeniu pojedynczego ziarna nawet wtedy, gdy jest to centralny punkt komunikacji.

Na przykład, jeśli ziarno jest agregatorem niektórych liczników lub statystyk, które są regularnie zgłaszane przez dużą liczbę ziaren, jednym ze sprawdzonych podejść jest dodanie kontrolowanej liczby pośrednich ziaren agregatorów i przypisanie każdego z raportujących ziaren (przy użyciu modulo na kluczu lub skrócie) do pośredniego agregatora, tak aby obciążenie było mniej więcej równomiernie rozłożone we wszystkich pośrednich ziarnach agregatorów, które z kolei okresowo zgłaszają częściowe agregacje do centralnego ziarna agregatora.

Jak to zrobić

Jak usunąć ziarno?

Ogólnie rzecz biorąc, nie ma potrzeby, aby logika aplikacji wymuszała dezaktywację ziarna, ponieważ Orleans środowisko uruchomieniowe automatycznie wykrywa i dezaktywuje bezczynne aktywacje ziarna w celu odzyskania zasobów systemowych. Pozwolenie Orleans na wykonanie tego jest bardziej wydajne, ponieważ grupuje operacje dezaktywacji zamiast wykonywać je pojedynczo. W nielicznych przypadkach, gdy sądzisz, że konieczne jest przyspieszenie dezaktywacji ziarna, ziarno może to zrobić, wywołując metodę DeactivateOnIdle().

Czy mogę wskazać Orleans, gdzie aktywować ziarno?

Można to zrobić przy użyciu restrykcyjnych strategii umieszczania, ale ogólnie uważamy, że jest to dość zaawansowany wzorzec, który wymaga starannego rozważenia. Wykonując to, co sugeruje pytanie, aplikacja przejmie ciężar zarządzania zasobami bez konieczności posiadania wystarczającej ilości informacji na temat globalnego stanu systemu, aby to zrobić. Jest to szczególnie sprzeczne z wydajnością w przypadku ponownego uruchamiania silosu, które w środowiskach chmury mogą być regularnie wykonywane w przypadku stosowania poprawek systemu operacyjnego. W związku z tym określone umieszczanie może zaszkodzić skalowalności aplikacji, a także odporności na awarie systemu.

To powiedziawszy, w rzadkich przypadkach, w których aplikacja rzeczywiście wie, gdzie należy aktywować określone ziarno, na przykład, jeśli zna lokalizację trwałego stanu ziarna, w wersji 1.5.0 wprowadziliśmy niestandardowe zasady rozmieszczania i reżyserów.

Jak zapanować nad wersjonowaniem ziarna lub jak dodać nowe klasy ziarna i interfejsy?

Do uruchomionego klastra można dodawać silosy z nowymi klasami ziarna lub nowymi wersjami istniejących klas ziarna.

Czy mogę nawiązać Orleans połączenie z silosami z publicznego Internetu?

Orleans jest przeznaczony do hostowania jako część tylnego systemu usługi, a od Ciebie oczekuje się utworzenia warstwy front-endowej, z którą będą łączyć się klienci zewnętrzni. Może to być projekt internetowego interfejsu API opartego na protokole HTTP, serwer gniazd, serwer SignalR lub cokolwiek innego, co odpowiada potrzebom aplikacji. Połączenie z Orleans z Internetu można nawiązać, udostępniając punkty końcowe TCP silosów, ale nie jest to dobre z punktu widzenia zabezpieczeń.

Co się stanie, jeśli silos zakończy się niepowodzeniem, zanim wywołanie ziarna zwróci odpowiedź dla mojego połączenia?

W przypadku awarii silosu podczas wywołania ziarna otrzymasz wyjątek, który możesz przechwycić w kodzie, a następnie spróbować ponownie lub podjąć inne działania w celu obsłużenia błędu zgodnie z logiką aplikacji. Ziarno, które nie powiodło się z silosem, zostanie automatycznie utworzone ponownie po następnym wywołaniu. Środowisko Orleans uruchomieniowe nie spieszy się z ponownym tworzeniem ziaren z uszkodzonego silosu, ponieważ wiele z nich może nie być natychmiast potrzebnych lub w ogóle. Zamiast tego środowisko uruchomieniowe odtwarza takie ziarna indywidualnie i tylko wtedy, gdy nowe żądanie zostanie dostarczone dla określonego ziarna. Dla każdego ziarna wybiera jeden z dostępnych silosów jako nowego hosta.

Zaletą tego podejścia jest to, że proces odzyskiwania jest wykonywany tylko w przypadku ziaren, które są używane, i jest rozłożony w czasie, obejmując wszystkie dostępne silosy, co poprawia reakcję systemu i szybkość odzyskiwania. Należy również pamiętać, że występuje opóźnienie między czasem awarii silosu a momentem, kiedy klaster wykrywa tę awarię Orleans. Opóźnienie jest konfigurowalnym kompromisem między szybkością wykrywania a prawdopodobieństwem wyników fałszywie dodatnich. W tym okresie przejściowym wszystkie wywołania ziarna zakończą się niepowodzeniem, ale po wykryciu błędu ziarno zostanie utworzone po nowym wywołaniu na innym silosie, tak więc w końcu będzie dostępne.

Co się stanie, jeśli wykonanie wywołania ziarna trwa zbyt długi czas?

Ponieważ Orleans korzysta z modelu kooperacyjnego wielozadaniowania, nie przerywa automatycznie wykonywania ziarna, ale Orleans generuje ostrzeżenia dla długotrwałych wywołań ziarna, co umożliwia ich wykrycie. Współbieżność zadań ma znacznie lepszą wydajność w porównaniu z przerywalnym wielozadaniowością. Należy pamiętać, że wywołania ziarna nie powinny wykonywać synchronicznie żadnych długotrwałych zadań, takich jak operacje wejścia/wyjścia, i nie powinny blokować innych zadań. Wszystkie oczekiwania powinny być realizowane asynchronicznie przy użyciu słowa kluczowego await lub innych mechanizmów oczekiwania asynchronicznego. Ziarna powinny być zwracane tak szybko, jak to możliwe, aby umożliwić wykonywanie innych ziaren i zwiększyć maksymalną wydajność.