В чем разница между моделью Actor и микросервисами?


23

Оба кажутся параллельными MPI-сетями, связывающими процессы. Я идентифицирую актеров с услугами. Являются ли актеры более динамичными (вы можете создавать их и убивать как дышащих, тогда как сервисная сеть более статична) или как?


Ответы:


11

Актерская модель - это математическая модель для параллельных вычислений, а микросервисы - реализация сервис-ориентированной архитектуры. Сходства довольно случайны.

Конечно, возможно построить микросервисы на основе некоторой актерской модели и смоделировать микросервисную архитектуру с актерской моделью, но это не значит, что они эквивалентны. Замените «микросервисная система» на «система электронной почты», и это все равно будет верно. Замените «модель актера» на «Связь последовательных процессов» (CSP), и это также будет «истинно», потому что системы CSP и модели акторов могут моделироваться друг другом.

Учитывая модель актера, вы можете реализовать ее с помощью микросервисов, SOA или даже электронной почты, но это не значит, что они находятся на одном уровне абстракции для реального сравнения.

Кроме того, модель актора подчеркивает буферы (может рассматриваться как очереди сообщений в мире микросервисов), поэтому некоторые субъекты / микросервисы могут быть не готовы, хотя асинхронная связь по своей природе все еще возможна.

Другими словами, сравнение с актерской моделью может принести некоторые творческие идеи на очень высоком уровне рассмотрения, но в основном это яблоки против апельсинов.

Если цель состоит в том, чтобы сравнить математическую модель SOA / микросервисов с моделью Actor, то это также не тривиально, потому что: 1) не существует согласованной математической модели для SOA, 2) модель обычно включает в себя цель. И моделирование SOA / микросервисов очень вероятно будет отличаться от цели модели актера. Один пример попытки смоделировать SOA здесь .

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


Я имею в виду, что модель актера нельзя сравнивать с микросервисами на одном уровне. Позвольте мне обновить мой ответ
Роман Суси

Я не говорю, что. Микросервисы могут реализовывать режим актера, а также программы на ассемблере или Си. Но я не говорю, что они всегда делают или даже часто. И да, Erlang также является примером реализации модели актера. Не уверен, что понимаю ваш аргумент.
Роман Суси

Извините, я впервые прочитал, что актеры - это математическая модель, которую реализуют uServices (эта модель). Я не заметил, что они реализуют сервисную архитектуру. Итак, мой вопрос заключается в том, как две математические модели, Actors и SOA, сравниваются друг с другом. Служба - это то, что имеет цикл обработки сообщений, который принимает запросы и генерирует ответные сообщения. Это то, что актер / делает. Чем он отличается от микросервиса в SOA? Другими словами, когда у меня есть распределенная сеть служб, я должен называть их микросервисами или субъектами?
Маленький Чужой

Обратите внимание, что это сайт вопросов и ответов, а не форум или лента новостей. Моникеры, такие как UPDATE и EDIT, не нужны; Каждый пост в Stack Exchange уже имеет подробную историю изменений, которую может просмотреть каждый.
Роберт Харви

1

Микросервисы - это способ организации программного обеспечения путем разделения каждой проблемной области на собственный развертываемый артефакт (исполняемый файл, сценарий, JAR, WAR и т. Д.). Это дает вам гибкость, например, позволяя вам масштабировать, развертывая больше экземпляров там, где они необходимы. Скажем, пользователи тратят больше времени на просмотр вашего каталога, чем на добавление товаров в корзину; один развертываемый артефакт обрабатывает функции каталога, другой - функции корзины покупок - вы можете запускать больше копий служб каталога для обработки нагрузки.

Это также изолирует их от внутренних изменений. Скажем, вы переходите из реляционной базы данных в базу данных документов для хранения данных о продукте - скорее всего, ваши услуги корзины покупок не нужно будет менять.

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


Когда вы сказали, что у вас может быть несколько экземпляров одного и того же сервиса, я начал думать, что он противоположен: сервис - это тип, тогда как актеры - это объекты :)
Little Alien

Актеры не могут быть развернуты индивидуально? Вы уверены?dotnet.github.io/orleans/Documentation/Grain-Versioning/…
Даффи Панк

Мне кажется, что с точки зрения реализации, может быть, существует некоторая конвергенция между двумя концепциями ...
Даффи Панк

1

Я бы сказал, что основным отличием является гранулярность.

Для модели актера она относительно мелкозернистая, в которой актер имеет тенденцию представлять эквивалент одного объекта в ООП.

Для микроуслуг это относительно грубо, так как один микроуслуг может состоять из большого количества действующих лиц или объектов.

Обратите внимание, что вам не нужно было бы слишком сильно расширять свое воображение, чтобы сказать, что современный веб - это то же самое с еще большей гранулярностью («макро-сервисы»); и что (например) HTTP-сервер является макросервисом, сервер базы данных является макросервисом, веб-браузер является макросервисом и т. д.

Это все примерно одинаково - отдельные части, которые общаются. Изменяется только размер кусков (и, следовательно, количество кусков).


Каждое Java-приложение, независимо от его размера, представляет собой отдельный объект. Объекты сделаны из других объектов и могут расти бесконечно больше. Я полагаю, что uServices также являются приложениями, которые сделаны из других объектов.
Маленький инопланетянин

0

Microservices масштабируются горизонтально, создавая несколько реплик, каждая из которых способна обслуживать запросы из-за состояния службы без сохранения состояния. Они устойчивы к неудаче благодаря своей природе без гражданства.

Актеры масштабируются, перемещая их в разделы с меньшей нагрузкой или большим количеством доступных ресурсов. Они с состоянием . Они устойчивы к сбоям, потому что - в зависимости от структуры актера - другой актер может динамически вращаться или всегда можно поддерживать горячую резервную копию актера, чтобы справиться с ошибкой основного актора.

Опять же, микросервисы также могут иметь состояние, но это противоречит принципам проектирования микросервисов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.