company_banner

Вышел Orleans 3.0

Автор оригинала: Orleans Team
  • Перевод
Это гостевой пост от команды Orleans. Orleans — это кроссплатформенный фреймворк для создания распределенных приложений с использованием .NET. Для получения дополнительной информации см. https://github.com/dotnet/orleans.

Мы рады объявить о выпуске Orleans 3.0. По сравнению с Orleans 2.0, в ней появилось множество улучшений и исправлений, а также несколько новых функций. Эти изменения продиктованы опытом многих людей, использующих приложения на базе Orleans в продакшене в широком диапазоне сценариев и сред, а также увлечением глобального сообщества Orleans, которое помогает фреймворку становиться лучше, быстрее и гибче. Большое спасибо всем, кто внес свой вклад в этот релиз различными способами!



Основные изменения по сравнению с Orleans 2.0


Orleans 2.0 был выпущен чуть более 18 месяцев назад, и с тех пор фреймворк добился значительных успехов. Некоторые изменения по сравнению с 2.0:

  • Распределенные ACID транзакции
  • Новый планировщик, который в некоторых случаях увеличил производительность более чем на 30%
  • Новый генератор кода на основе Roslyn
  • Переписанная принадлежность к кластеру для улучшения скорости восстановления
  • Поддержка co-hosting

А также множество других улучшений и исправлений.

Замена сетевого уровня с помощью ASP.NET Bedrock


Поддержка безопасной связи с использованием TLS была главной задачей в течение некоторого времени. Причем как со стороны сообщества, так и со стороны внутренних партнеров. В версии 3.0 мы добавляем поддержку TLS, доступную через пакет Microsoft.Orleans.Connections.Security. Для получения дополнительной информации см. пример TransportLayerSecurity.

Внедрение поддержки TLS было основной задачей из-за того, как был реализован сетевой уровень в предыдущих версиях Orleans: его нельзя было легко адаптировать для использования SslStream, который является наиболее распространенным методом для реализации TLS. Используя TLS в качестве движущей силы, мы переписали сетевой уровень Орлеана.

В Orleans 3.0 заменяется весь сетевой уровень на уровень, созданный на основе Project Bedrock, фичи группы ASP.NET. Цель Bedrock — помочь разработчикам создавать быстрые и надежные сетевые клиенты и серверы.

Команда ASP.NET и команда Orleans работали вместе над созданием абстракций, которые поддерживают как сетевых клиентов, так и серверы, transport-агностичны и могут быть настроены с использованием промежуточного программного обеспечения. Эти абстракции позволяют нам изменять сетевой «транспорт» через конфигурацию, не изменяя внутренний, специфичный для Орлеана сетевой код. Поддержка TLS в Orleans реализована в виде промежуточного программного обеспечения Bedrock, и мы намерены сделать его универсальным, чтобы его можно было использовать совместно с другими в экосистеме .NET.

Хотя стимулом для этого нововведения было добавление поддержки TLS, в наших нагрузочных тестах в ​​ночное время пропускная способность в среднем увеличивается примерно на 30%.

Переписывание сетевого уровня также включало замену нашего кастомного буффреного пуллинга (custom buffer pooling) на использование MemoryPool<byte> , и при внесении этого изменения сериализация теперь использует больше преимуществ Span<T>. Некоторые пути кода, которые ранее основывались на блокировке через выделенные потоки, вызывающие BlockingCollection<T>, теперь используют Channel<T> для асинхронной передачи сообщений. Это приводит к уменьшению выделенных потоков, вместо этого перемещая работу в пул потоков .NET.

Совместный хостинг (co-hosting) через Generic Host


Совместный хостинг Orleans с другими платформами, такими как ASP.NET Core, в том же процессе теперь стал проще, чем раньше, благодаря .NET Generic Host.

Вот пример добавления Orleans вместе с ASP.NET Core к хосту с использованием UseOrleans:
var host = new HostBuilder()
  .ConfigureWebHostDefaults(webBuilder =>
  {
    // Настройка ASP.NET Core
    webBuilder.UseStartup<Startup>();
  })
  .UseOrleans(siloBuilder =>
  {
    // Настройка Orleans
    siloBuilder.UseLocalHostClustering();
  })
  .ConfigureLogging(logging =>
  {
    /* Настройка сквозных задач, таких как логгирование */
  })
  .ConfigureServices(services =>
  {
    /* Настройка общих служб */
  })
  .UseConsoleLifetime()
  .Build();

// Запустите хост и дождитесь его остановки.
await host.RunAsync();

Эта функциональность может использоваться для упрощения топологии развертывания или для добавления дополнительных функций в существующее приложение. Некоторые команды внутренне используют совместный хостинг, чтобы добавить тесты Kubernetes в свои проекты Orleans, используя ASP.NET Core Health Checks.

Улучшения надежности


Кластеры теперь быстрее восстанавливаются после сбоев благодаря расширенному госсипингу (gossiping). Кроме того, ошибки обмена сообщениями теперь обрабатываются более согласованно, в результате чего ошибки передаются обратно вызывающей стороне. Это помогает разработчикам быстрее обнаруживать ошибки. Например, когда сообщение не может быть полностью сериализовано или десериализовано, подробное исключение будет передано обратно исходному вызывающему.

Улучшенная расширяемость


Теперь потоки могут иметь собственные адаптеры данных, что позволяет им принимать данные в любом формате. Это дает разработчикам больший контроль над тем, как элементы потока представляются в хранилище. Это также дает провайдеру потока контроль над тем, как записываются данные, позволяя потокам интегрироваться с существующими системами и/или не-Orleans сервисами.

Кастомное состояние транзакции теперь может декларировать, какие роли оно может выполнять в транзакции. Например, реализация состояния транзакции, которая записывает события жизненного цикла транзакции в очередь служебной шины, не может выполнять обязанности менеджера транзакций, поскольку она доступна только для записи.

Присоединйятесь!


Теперь, когда вышел Orleans 3.0, мы переключаем наше внимание на будущие релизы — и у нас есть несколько захватывающих планов! Присоединяйтесь к нашему теплому и гостеприимному сообществу на GitHub.



Читайте также: 7 бесплатных курсов для разработчиков
Microsoft
395,59
Microsoft — мировой лидер в области ПО и ИТ-услуг
Поделиться публикацией

Похожие публикации

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое