Українська
Підсумки
Висновки
Модель акторів замінює спільну пам’ять і блокування приватним станом і асинхронними повідомленнями, що обробляються по одному. Orleans реалізує віртуальних акторів – зерна, які завжди існують логічно, активуються під час першого виклику на одному із силосів кластера й деактивуються після простою. Активація виконує запити покроково в одному потоці; реентрантність прискорює зерна з очікуваннями, але повертає ризик гонитви, а цикли нереентрантних викликів ведуть до взаємоблокувань. Стан зерна зберігають провайдери (пам’ять, Redis, SQL) з оптимістичним блокуванням за ETag; таймери працюють в активації, а нагадування переживають перезапуски. Кластер Orleans виявляє відмови силосів хартбітами й таблицею членства та переактивує зерна на живих силосах, втрачаючи лише незбережений стан. Теорема CAP стверджує, що при розділенні мережі треба вибирати між узгодженістю й доступністю, а PACELC додає вибір між затримкою й узгодженістю без розділень. Кворуми
Питання для самоперевірки
- Що таке актор? Які властивості моделі акторів усувають потребу в блокуваннях?
- Чим відрізняються повідомлення «tell» і «ask»? Як їх реалізувати на
Channel<T>? - Що таке віртуальний актор? Чим зерно відрізняється від активації?
- Які ролі виконують силос, кластер, клієнт і шлюз Orleans?
- Які пакети потрібні проєктам інтерфейсів, реалізацій, силосу й клієнта?
- Навіщо атрибути
[GenerateSerializer]та[Id]? - Що таке хід зерна? Чому звичайне зерно не потребує
lock? - Коли застосовують
[Reentrant],[AlwaysInterleave],[ReadOnly],[StatelessWorker]? - Чому цикл викликів A → B → A призводить до таймауту і як його усунути?
- Як зберегти стан зерна? Що відбувається при конфлікті ETag?
- Чим таймер відрізняється від нагадування? Які провайдери нагадувань існують?
- Як Orleans виявляє відмову силосу і що стається з його зернами?
- Сформулюйте теорему CAP. Наведіть приклади CP- і AP-систем. Що додає PACELC?
- Порівняйте сильну, причинну й кінцеву узгодженість.
- Чому при
читання бачить останній запис? Що буде при відрізаних трьох репліках з п’яти? - Як Raft обирає лідера й фіксує записи? Скільки відмов витримує кластер з 5 вузлів?
- Які типи відмов бувають у розподілених системах?
- Як працюють повтори з джитером і запобіжник? Навіщо ідемпотентність?
Корисні посилання
- Документація Orleans: https://learn.microsoft.com/dotnet/orleans/
- Зерна: https://learn.microsoft.com/dotnet/orleans/grains/
- Планування запитів і реентрантність: https://learn.microsoft.com/dotnet/orleans/grains/request-scheduling
- Збереження стану зерен: https://learn.microsoft.com/dotnet/orleans/grains/grain-persistence/
- Таймери й нагадування: https://learn.microsoft.com/dotnet/orleans/grains/timers-and-reminders
- Керування кластером: https://learn.microsoft.com/dotnet/orleans/implementation/cluster-management
- Спостереження за Orleans: https://learn.microsoft.com/dotnet/orleans/host/monitoring/
- Вихідний код і зразки Orleans: https://github.com/dotnet/orleans
- Окремий дашборд Aspire: https://aspire.dev/dashboard/standalone/
- Стійкість застосунків .NET: https://learn.microsoft.com/dotnet/core/resilience/
- Шаблон «запобіжник»: https://learn.microsoft.com/azure/architecture/patterns/circuit-breaker
- Алгоритм Raft: https://raft.github.io/