У Microsoft есть проект с открытым исходным кодом-платформа для написания масштабируемых сервисов, которая направлена на упрощение разработки масштабируемых облачных сервисов.
Согласно его новой странице на GitHub:
Orleans-это фреймворк, который обеспечивает простой подход к созданию распределенных крупномасштабных вычислительных приложений без необходимости изучать и применять сложный параллелизм или другие шаблоны масштабирования. Он был создан Microsoft Research и предназначен для использования в облаке. Орлеан широко использовался в Microsoft Azure несколькими группами продуктов Microsoft, в частности 343 отраслями в качестве платформы для всех облачных сервисов Halo 4, а также рядом других компаний.
Публичный предварительный просмотр Орлеана был выпущен на Build 2014, где Microsoft провела сессию по использованию проекта в известной игре Halo 4, все еще доступной в этом часовом видео канала 9:
Проблема, решаемая Orleans, заключается в создании интерактивных сервисов, которые являются масштабируемыми и надежными. Как отметил Сергей Быков, ведущий инженер-программист, интерактивность накладывает строгие ограничения на доступность и задержку, поскольку это напрямую влияет на опыт конечных пользователей. Для поддержки большого количества одновременных сеансов пользователей необходима высокая пропускная способность.
Трехуровневая архитектура с интерфейсами без состояния, средним уровнем без состояния и уровнем хранения имеет ограниченную масштабируемость из-за задержек и ограничений пропускной способности уровня хранения, с которыми необходимо консультироваться при каждом запросе. Традиционным средством для этого является добавление слоя кэширования между средним уровнем и хранилищем для повышения производительности. Это означает, что вы теряете большую часть параллелизма и семантических гарантий базового уровня хранения, поэтому менеджер кэша должен иметь контроль параллелизма, чтобы предотвратить несоответствия, вызванные одновременными обновлениями кэшированного элемента. Использование среднего уровня без состояния означает, что для каждого запроса данные отправляются из хранилища или кэша на сервер среднего уровня, обрабатывающий запрос. Это известно как парадигма доставки данных.
Альтернативным решением, используемым Орлеаном, является использование модели актора. Это опирается на парадигму доставки функций, которая рассматривает вычисления как оценку математических функций и избегает изменяющихся состояний и изменяемых данных. Модель актора использует «акторов» в качестве базовой сущности для параллельных вычислений. Когда субъект получает сообщение, он может сделать такие вещи, как создать другого субъекта, отправить сообщение, принять какое-то локальное решение или решить, что делать, когда будет получено следующее сообщение. Использование актеров позволяет создать средний уровень с отслеживанием состояния. Это дает вам преимущества производительности кэша, но хранит данные локально, а также обеспечивает семантические преимущества и согласованность инкапсулированных сущностей за счет использования операций, специфичных для конкретного приложения. Платформы актеров, такие как Erlang и Akka, облегчают программирование распределенных систем, но вам все равно нужно знать, что вы делаете с точки зрения системных служб. Орлеан предназначен для обеспечения более высоких уровней абстракции акторов. Она основана на акторах, но отличается от существующих платформ, основанных на акторах, тем, что рассматривает акторов как виртуальные сущности, а не как физические.
Актер Орлеана всегда существует виртуально. Он не может быть явно создан или уничтожен, и его существование превосходит время жизни любого из его экземпляров в памяти.
Если в памяти нет экземпляра субъекта, сообщение, отправленное субъекту, вызывает создание нового экземпляра на доступном сервере. Неиспользуемый экземпляр субъекта автоматически восстанавливается в рамках управления ресурсами среды выполнения.
Актеры никогда не терпят неудачу: если сервер S выходит из строя, следующее сообщение, отправленное актеру A, работавшему на S, вызывает автоматическое повторное создание экземпляра A на другом сервере, устраняя необходимость в приложениях для контроля и явного повторного создания неудачных актеров. Расположение экземпляра субъекта прозрачно для кода приложения, и он может автоматически создавать несколько экземпляров одного и того же субъекта без состояния, легко масштабируя горячих субъектов. В целом, Орлеан предоставляет разработчикам виртуальное “акторное пространство”, которое позволяет им вызывать любого актора в системе, независимо от того, присутствует он в памяти или нет.
Использование виртуализации для сопоставления виртуальных субъектов с их физическими экземплярами означает, что среда выполнения может справиться со многими проблемами жестких распределенных систем, которые в противном случае пришлось бы решать разработчику, такими как размещение субъектов и балансировка нагрузки, деактивация неиспользуемых субъектов и восстановление субъектов после сбоев сервера.
Орлеан уже использовался для создания нескольких производственных служб, работающих в настоящее время в облаке Microsoft Windows Azure, включая серверные службы для Halo 4, и это позволило проектной группе проверить масштабируемость и надежность производственных приложений, написанных с его помощью, и скорректировать свою модель и реализацию на основе этой обратной связи. Теперь он находится на GitHub и доступен для других пользователей.